Auf Mausklick warten (WinBGIm mit Orwell Dev-C++)?

...komplette Frage anzeigen

1 Antwort

Da scheinst Du etwas grundlegend nicht verstanden zu haben:

In einer GUI-Anwendung werden üblicherweise erst die Fenster initialisiert, dann die Event-Loop gestartet. Das ist eine Funktion, die auf Maus-, Tastatur- und andere Ereignisse wartet, und diese an das passende GUI-Objekt weiterleitet. Alle Fenster, Buttons, usw. besitzen dazu einen Eventhandler, den Du natürlich für deine Farbfelder selbst schreiben musst.

Willst Du diese Event-Loop unbedingt selbst schreiben, solltest Du in der Endlosschleife wenigstens ein usleep(10000) einbauen (für 10ms Pause). In einem Beispiel aus dem Netz wird delay(200) statt usleep() gerufen. Wahrscheinlich ist delay() in graphics.h dabei.

ralphdieter 10.01.2016, 17:21

Hab' gerade gegoogelt: WinBGIm bietet wirklich nur Graphik in der DOS-Box. Da ist also nix mit Fenstern, und die Event-Loop musst Du tatsächlich selbst schreiben.

Also fehlt in deinem Code tatsächlich nur ein delay().

1
keepalive 10.01.2016, 18:17
@ralphdieter

Danke. Ich hatte es erst mit windows.h und Sleep probiert. Mit delay kann ich selbst eine Millisekunde angeben, ohne dass sich das Programm aufhängt (y). (Wie ich darauf einfach nicht kam, wenn schon etliche Beispiele am Ende von Programmen kbith mit delay verwenden..).
Ich hätte zwar echt gerne etwas wie getch für Mausklicks, um unnötigen Output zu vermeiden, ̶d̶̶o̶̶c̶̶h̶̶ ̶̶d̶̶a̶̶ ̶̶e̶̶h̶̶ ̶̶n̶̶u̶̶r̶̶ ̶̶i̶̶m̶̶m̶̶e̶̶r̶̶ ̶̶e̶̶i̶̶n̶̶e̶̶ ̶-̶1̶̶ ̶̶a̶̶u̶̶s̶̶g̶̶e̶̶g̶̶e̶̶b̶̶e̶̶n̶̶ ̶̶w̶̶i̶̶r̶̶d̶̶,̶̶ ̶̶w̶̶e̶̶n̶̶n̶̶ ̶̶n̶̶i̶̶c̶̶h̶̶t̶̶ ̶̶g̶̶e̶̶k̶̶l̶̶i̶̶c̶̶k̶̶t̶̶ ̶̶w̶̶u̶̶r̶̶d̶̶e̶̶,̶̶ ̶̶k̶̶a̶̶n̶̶n̶̶ ̶̶i̶̶c̶̶h̶̶ ̶̶d̶̶a̶̶s̶̶ ̶̶s̶̶i̶̶c̶̶h̶̶e̶̶r̶̶l̶̶i̶̶c̶̶h̶̶ ̶̶s̶̶c̶̶h̶̶n̶̶e̶̶l̶̶l̶̶ ̶̶b̶̶e̶̶h̶̶e̶̶b̶̶e̶̶n̶̶.̶

Habe beim Schreiben bemerkt, dass ich das Outputproblem sogar bereits im fertigen Programm "behoben" habe <3:

colorclick:
delay(1);
getmouseclick(WM_LBUTTONDOWN, x, y); //Linke Maustaste gedrückt? -> XY-Koordinaten
color = getpixel(x,y); //Farbe bei XY-Koordinaten

if (color == 4)
{
field =1;
}
else if (color == 1)
{
field =2;
}
else if (color == 2)
{
field =3;
}
else if (color == 14)
{
field =4;
}
else
{
goto colorclick;
}

(Ich weiß, dass goto umstritten ist, doch ob es Sinn macht da stattdessen eine Schleife rumzupacken...?)


Jedenfalls.. Dank euch kann dieses wunderbare Spiel nun mit der Maus gespielt werden <3: http://i.imgur.com/MMI5wtl.png (Kleinigkeiten wie Output passe ich noch an. Für den Spieler sind Koordinaten und co. ja irrelevant).

0
keepalive 10.01.2016, 18:48
@keepalive

(Noch eine kurze Anmerkung, da das von mir etwas unbedarft ausgedrückt wurde: Natürlich meinte ich mit Outputproblem nicht wirklich den Output durch cout, sondern dass wenn ein anderer Farbwert als rot, grün, blau oder gelb in color steht. Konnte ja einfach durch einen weiteren Fall mit Sprung zurück behoben werden, wie man in meinem Codeausschnitt sieht.)

Sorry, hatte gar nicht bemert, dass mir nur eine Person geantwortet hatte und dann nochmal einen Kommentar hinterlassen hatte.
(Ich erlebe es ziemlich selten dass jemand nochmal über das, was er antwortete, nachdenkt und dann noch weitere Informationen hinterherschiebt, wenn möglich/nötig. Ich bin positiv überrascht)

0

Was möchtest Du wissen?