2017-08-17 3 views
0

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

+0

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. –

+0

Danke für das Feedback, fügte den Rest des Programms hinzu. – sCuper

Antwort

1

Ich denke, auch die Tasten funktionieren gut, aber Ihre Event-Handler eigentlich nichts tun. Zuerst musste ich den größeren Button, den kleineren Button und den korrekten Button ändern, um stash.higher, stash.lower, stash.correct zu sein. Dann berechnet Ihr Code das neue Minimum & Maximum aber es tut nichts wirklich mit ihnen.

Ich legte eine Druckanweisung in den Ereigniscode und es wird definitiv die Taste drücken.

In Ihrem Event-Handler möchten Sie wahrscheinlich widget_control verwenden, um das Textfeld mit der neuen Schätzung zu aktualisieren.

Verwandte Themen