Main loop refuses to identify Repeat?
BlitzMax Forums/BlitzMax Beginners Area/Main loop refuses to identify Repeat?
| ||
I know I must be doing something stupid here. I made a larger program, but it's mostly just a text adventure type thing with a lot of drawtext lines. I simplified it a bit but the rest of the code is the same.SetGraphicsDriver GLMax2DDriver()
AppTitle = "More like TEST adventure"
Graphics 400,300,0,60
Local font:TImageFont=LoadImageFont("C:\WINDOWS\Fonts\arial.ttf",16)
SetImageFont(font)
SeedRnd MilliSecs()
Repeat
Cls
DrawText "How do you respond?", 100, 140
DrawText "(Y = ~qYes!~q / N = ~qNo!~q)", 100, 160
Flip
Repeat
Until KeyDown(KEY_Y) Or KeyDown(KEY_N)
If KeyDown(KEY_N) Then
Repeat
Cls
blinkR = Rnd(255)
blinkG = Rnd(255)
blinkB = Rnd(255)
DrawText "YOU WIN!", 100, 140
SetColor blinkR,blinkG,blinkB
DrawText "Play Again?", 90, 180
Flip
Until KeyDown(KEY_Y) Or KeyDown(KEY_N)
Else
Repeat
Cls
DrawText "YOU LOSE!" 100, 140
DrawText "Play Again? (Y)es/(E)xit" 70, 180
Flip
Until KeyDown(KEY_Y) Or KeyDown(KEY_E)
If KeyDown(KEY_Y) Then Exit
Until KeyDown(KEY_E)
EndNotice how I used the flashy color code for "You Win!" from one of the beginner tutorials. Isn't that just adorable? Anyways the compile error I get is "'Until' without matching 'Repeat'", but there are just as many repeats to match all the untils I am using. What gives? |
| ||
| Endif is missing after the "you lose" repeat part. You have a new if there but no endif to close the KEY_N if block for that reason the last until can't be recognized as well. |
| ||
| Haha. Told you it was a stupid mistake :/ Aside from a couple missing commas I got it all working after that. Also it responds too fast if someone holds down the key nothing a few delays couldn't fix. Thanks! |
| ||
| use KeyHit() instead of KeyDown(). |
| ||
| I tried KeyHit() and it just leads to the You Lose! screen everytime and somehow doens't break out of the main loop either. So in other words it seems to be taking the input as if I'm pressing "N" then "Y" each time... odd |
| ||
| Hey Omni. Not sure if you care about this anymore, but I thought I'd give my input. I think you had troubles for three reasons: 1. You used a loop embedded within a loop, with both using KEY_Y and KEY_N. So because you used Key_Down instead of key_hit, your program flow becomes uncontrollable. 2. You have too many nested loops. Check out my code to see what I changed there. 3. Your indentation system is wonky, sorry man. That's likely why you missed the 'Endif'. I really had to think in order to follow your code. No biggie, though.
AppTitle = "More like TEST adventure"
Graphics 400,300,0,60
Local font:TImageFont=LoadImageFont("C:\WINDOWS\Fonts\arial.ttf",16)
SetImageFont(font)
Repeat
DrawText "How do you respond? 1 or 2", 100, 140
DrawText "Hit e to exit", 100, 160
Flip;cls
If KeyHit(KEY_1) Then
Repeat
DrawText "YOU LOSE!", 100, 140
DrawText "Play again? Y/N", 100, 160
Flip;Cls
If KeyHit(KEY_N) End
Until KeyHit(KEY_Y)
ElseIf KeyHit(KEY_2) Then
Repeat
SetColor Rnd(255), Rnd(255), Rnd(255)
DrawText "YOU WIN!", 100, 140
SetColor 255, 255, 255
DrawText "Play again? (Y/N)", 100, 160
Flip;Cls
If KeyHit(KEY_N) End
Until KeyHit(KEY_Y)
EndIf
Until KeyDown(KEY_E)
I completely changed the structure so that it's simpler and easier to follow. I hope you get something from this. |