Ich bin ziemlich neu in IDL und als eine Art zu lernen, habe ich versucht, eine Nummer Ratespiel zu erstellen. Ich habe ein Widget mit drei Tasten: Einer, der dem Programm sagt, dass die Nummer, an die Sie denken, größer ist als die, nach der der Computer fragt, eine, wenn sie kleiner ist, und eine, wenn sie korrekt ist.IDL: Button Widget stoppt die Aktualisierung nach einem Tastendruck
Mein Problem ist, dass, sobald Sie gedrückt haben, d. H. Der größere Knopf, wenn Sie es erneut drücken, wird es nichts tun. Z.B. das Programm beginnt 500 zu raten, wenn ich größer drücke, rät es 750. Wenn ich jetzt wieder größer drücke, reagiert das Programm nicht.
ist mein Code wie folgt:
PRO test1_event, ev
WIDGET_CONTROL, ev.top, GET_UVALUE = stash
minimum = 0
maximum = 1000
IF (ev.Id EQ largerbutton) THEN BEGIN
minimum = (minimum+maximum)/2
maximum = maximum
ENDIF
IF (ev.Id EQ smallerbutton) THEN BEGIN
maximum = (minimum+maximum)/2
minimum = minimum
ENDIF
IF (ev.Id EQ correctbutton) THEN BEGIN
help2 = string('I got it!') ;This prints to a text widget
ENDIF
END
PRO test1
wBase = WIDGET_BASE(X_SCROLL_SIZE = 512, Y_SCROLL_SIZE = 512)
;wDraw = WIDGET_WINDOW(wBase, X_SCROLL_SIZE = 512, Y_SCROLL_SIZE = 512)
Lower = WIDGET_BUTTON(wBase, VALUE = 'Smaller', XOFFSET = 60, YOFFSET = 250)
Higher = WIDGET_BUTTON(wBase, VALUE = 'Larger', XOFFSET = 225, YOFFSET = 250)
Correct = WIDGET_BUTTON(wBase, VALUE = 'Correct', XOFFSET = 380, YOFFSET = 250)
minimum = 0
maximum = 1000
help1 = string('Please think of a number between' + string(minimum) + ' and ' + string(maximum))
help2 = string('Is your number ' + string((minimum + maximum)/2) + '?')
wText = WIDGET_TEXT(wBase, VALUE = ['Welcome to my little game. I will now try and guess a number you are thinking of.'], XSIZE = 63,XOFFSET = 50, YOFFSET = 100)
wText1 = WIDGET_TEXT(wBase, VALUE = help1, XSIZE = 63,XOFFSET = 50, YOFFSET = 120)
wText2 = WIDGET_TEXT(wBase, VALUE = help2, XSIZE = 63,XOFFSET = 50, YOFFSET = 140)
stash = {text1:wText, text2:wText1, text3:wText2, $
lower:Lower, higher:Higher, correct:Correct, minimum:minimum, maximum:maximum}
WIDGET_CONTROL, wBase, SET_UVALUE = stash, /REALIZE
XMANAGER, 'test1', wBase
end
Ich habe versucht, eine while-Schleife verwenden und auch wiederholen, aber dann geht das Programm nur bis zu 999, wenn ich die größeren Taste drücken und auf 0, wenn ich drücke der Kleinere.
Irgendwelche Ideen, was ich tun kann?
EDIT: Hinzugefügt den Rest des Programms
Es sieht so aus, als ob Sie etwas von Ihrem Code vermissen. Sind "largebutton" und "smallebutton" im "stash" gespeichert? Rufen Sie XMANAGER auf, um die Ereignisverarbeitung zu starten? Wie speichern Sie schließlich "Minimum" und "Maximum"? Bitte posten Sie Ihr gesamtes Programm. –
Danke für das Feedback, fügte den Rest des Programms hinzu. – sCuper