Problem beim "Ende" screen
Übersicht

ChansiBetreff: Problem beim "Ende" screen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo
Ich bin ein kompletter Neuling in Sachen Blitz und habe erstmal das Tutorial ausprobiert (Eat the dots). Jetzt wollte ich das Programm noch ein bisschen verfeinern und einen Screen einfügen, der erscheint wenn man alles geschafft hat. Aber irgendwie passiert nichts, wenn ich es schaffe. Der Code ist improvisiert und enthält vermutlich elemtare Fehler. Code: [AUSKLAPPEN] Function Restart_Game()
If food= 0 ClearScreens() Print "Congratulations!" Print "You have finished the Game! :)" Print "Press Enter to start again. If KeyHit(28) InitGame() EndIf End Function Function ClearScreens() Delete Each food Delete Each rock End Function |
||
- Zuletzt bearbeitet von Chansi am Mi, Dez 03, 2008 17:32, insgesamt einmal bearbeitet
DjDETE |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Da ich nicht den kompletten Code sehe, bin ich mir nicht sicher, aber ich glaube du musst warten, bis jemand Enter drückt. Um das zu machen, wäre es, da du eh schon Print benutzt, am einfachsten, das Keyhit(28) durch Input() zu ersetzen.
Code: [AUSKLAPPEN] Function Restart_Game()
If food= 10 ClearScreens() Print "Congratulations!" Print "You have finished the Game! :)" Print "Press Enter to start again. Input() InitGame() EndIf End Function Aber am Besten wäre es, wenn du Print/Input ganz weglassen würdest, da es ziemlich langsam ist: Code: [AUSKLAPPEN] Function Restart_Game() If food= 10 ClearScreens() Repeat Cls Text 20,20, "Congratulations!" Text 20,40, "You have finished the Game! :)" Text 20,60,"Press Enter to start again. If KeyHit(28) InitGame() Flip Forever EndIf End Function MfG DeTe Edit: Ups, da hab ich was im 2. Code vergessen (Cls & Flip) |
||
Chansi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich glaube, du verstehst mich falsch ![]() Wenn alle Dots verschwunden sind, erscheint der Bildschirm nicht, auf dem das alles stehen soll. Der komplette Code ist jetzt so: Code: [AUSKLAPPEN] ; eat the dots
Graphics 640,480 SetBuffer BackBuffer() Global status=0,x#=0,y#=0,speed#=1,dir=1 ; main loop Type food Field x,y End Type Type rock Field x,y End Type While Not KeyHit(1) ; refresh screen Flip Cls Color 255,255,0 Rect 0,0,640,480,0 ; select state Select status Case 0 Locate 100,100 Print "Press Enter To Start" If KeyHit(28) InitGame() Case 1 UpdatePlayer() End Select Wend Function InitGame() x=320 y=240 speed=1 dir=1 status=1 For f.food=Each food Delete f Next For r.rock=Each rock Delete r Next For i=0 To 20 r.rock=New rock r\x=Rnd(640) r\y=Rnd(480) Next For i=0 To 20 f.food=New food f\x=Rnd(640) f\y=Rnd(480) Next End Function Function UpdatePlayer() UpdateRocksandFood() If Not RectsOverlap(x,y,10,10,0,0,630,470) status=0 ; steer player If KeyDown(200) Or JoyY()<-0.5 dir=0 If KeyDown(205) Or JoyX()>0.5 dir=1 If KeyDown(208) Or JoyY()>0.5 dir=2 If KeyDown(203) Or JoyX()<-0.5 dir=3 ; move player Select dir Case 0 y=y-speed Case 1 x=x+speed Case 2 y=y+speed Case 3 x=x-speed End Select ; draw player Color 255,255,255 Rect x,y,10,10 End Function Function UpdateRocksandFood() ; draw food and check if eaten Color 0,255,0 For f.food=Each food Rect f\x,f\y,10,10 If RectsOverlap(x,y,10,10,f\x,f\y,10,10) speed=speed+0.2 Delete f EndIf Next ; draw rocks and check for roadkill Color 255,0,255 For r.rock=Each rock Rect r\x,r\y,10,10 If RectsOverlap(x,y,10,10,r\x,r\y,10,10) status=0 EndIf Next End Function Function Restart_Game() If food=0 ClearScreens() Repeat Text 20,20, "Congratulations!" Text 20,40, "You have finished the Game! :)" Text 20,60,"Press Enter to start again. If KeyHit(28) InitGame() Forever EndIf End Function Function ClearScreens() Delete Each food Delete Each rock End Function |
||
DjDETE |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du musst die Funktion Restart_Game() natürlich auch in der Hauptschleife ausführen. Und du kannst nicht food=0 verwenden, da es sich ja um Types handelt. Deshalb habe ich die Anzahl einfach durch eine For...Next Schleife gezählt, was sicher nicht die eleganteste Lösung ist, aber mir viel auf die Schnelle nichts besseres ein:
Code: [AUSKLAPPEN] eat the dots
Graphics 640,480 SetBuffer BackBuffer() Global status=0,x#=0,y#=0,speed#=1,dir=1 ; main loop Type food Field x,y End Type Type rock Field x,y End Type While Not KeyHit(1) ; refresh screen Flip Cls Color 255,255,0 Rect 0,0,640,480,0 ; select state Select status Case 0 Locate 100,100 Print "Press Enter To Start" If KeyHit(28) InitGame() Case 1 UpdatePlayer() Restart_Game() End Select Wend Function InitGame() x=320 y=240 speed=1 dir=1 status=1 For f.food=Each food Delete f Next For r.rock=Each rock Delete r Next For i=0 To 20 r.rock=New rock r\x=Rnd(640) r\y=Rnd(480) Next For i=0 To 20 f.food=New food f\x=Rnd(640) f\y=Rnd(480) Next End Function Function UpdatePlayer() UpdateRocksandFood() If Not RectsOverlap(x,y,10,10,0,0,630,470) status=0 ; steer player If KeyDown(200) Or JoyY()<-0.5 dir=0 If KeyDown(205) Or JoyX()>0.5 dir=1 If KeyDown(208) Or JoyY()>0.5 dir=2 If KeyDown(203) Or JoyX()<-0.5 dir=3 ; move player Select dir Case 0 y=y-speed Case 1 x=x+speed Case 2 y=y+speed Case 3 x=x-speed End Select ; draw player Color 255,255,255 Rect x,y,10,10 End Function Function UpdateRocksandFood() ; draw food and check if eaten Color 0,255,0 For f.food=Each food Rect f\x,f\y,10,10 If RectsOverlap(x,y,10,10,f\x,f\y,10,10) speed=speed+0.2 Delete f EndIf Next ; draw rocks and check for roadkill Color 255,0,255 For r.rock=Each rock Rect r\x,r\y,10,10 If RectsOverlap(x,y,10,10,r\x,r\y,10,10) status=0 EndIf Next End Function Function Restart_Game() For f.food=Each food anzahl=anzahl+1 Next If anzahl=0 ClearScreens() Repeat Cls Text 20,20, "Congratulations!" Text 20,40, "You have finished the Game! :)" Text 20,60,"Press Enter to start again. If KeyHit(28) InitGame() Flip Forever EndIf End Function Function ClearScreens() Delete Each food Delete Each rock End Function |
||
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden. |
Chansi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Erstmal vielen, herzlichen Danke für deine Hilfe ![]() Aber da tut sich ein neues Problem auf... Durch Drücken der Enter Taste startet man das Spiel nicht neu - Warum auch immer. Ich wäre demjenigen sehr verbunden, der mir dabei helfen könnte. |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Falls es unklar sein sollte, nur fragen
Hab die Food und Rocks auf 2 gesetzt da es so schneller geht um es zu testen ![]() mfg Code: [AUSKLAPPEN] Graphics 640,480
SetBuffer BackBuffer() Global status=0,x#=0,y#=0,speed#=1,dir=1,gamerestart=0 ; main loop Type food Field x,y End Type Type rock Field x,y End Type While Not KeyHit(1) ; refresh screen Flip Cls Color 255,255,0 Rect 0,0,640,480,0 ; select state Select status Case 0 Locate 100,100 Print "Press Enter To Start" If KeyHit(28) InitGame() Case 1 UpdatePlayer() Restart_Game() If gamerestart=1 gamerestart=0 Initgame() EndIf End Select Wend Function InitGame() x=320 y=240 speed=1 dir=1 status=1 For f.food=Each food Delete f Next For r.rock=Each rock Delete r Next For i=0 To 2 r.rock=New rock r\x=Rnd(640) r\y=Rnd(480) Next For i=0 To 2 f.food=New food f\x=Rnd(640) f\y=Rnd(480) Next End Function Function UpdatePlayer() UpdateRocksandFood() If Not RectsOverlap(x,y,10,10,0,0,630,470) status=0 ; steer player If KeyDown(200) Or JoyY()<-0.5 dir=0 If KeyDown(205) Or JoyX()>0.5 dir=1 If KeyDown(208) Or JoyY()>0.5 dir=2 If KeyDown(203) Or JoyX()<-0.5 dir=3 ; move player Select dir Case 0 y=y-speed Case 1 x=x+speed Case 2 y=y+speed Case 3 x=x-speed End Select ; draw player Color 255,255,255 Rect x,y,10,10 End Function Function UpdateRocksandFood() ; draw food and check if eaten Color 0,255,0 For f.food=Each food Rect f\x,f\y,10,10 If RectsOverlap(x,y,10,10,f\x,f\y,10,10) speed=speed+0.2 Delete f EndIf Next ; draw rocks and check for roadkill Color 255,0,255 For r.rock=Each rock Rect r\x,r\y,10,10 If RectsOverlap(x,y,10,10,r\x,r\y,10,10) status=0 EndIf Next End Function Function Restart_Game() For f.food=Each food anzahl=anzahl+1 Next If anzahl=0 ClearScreens() Repeat Cls Text 20,20, "Congratulations!" Text 20,40, "You have finished the Game! :)" Text 20,60,"Press Enter to start again. If KeyHit(28) gamerestart=1 Flip Until gamerestart=1 EndIf End Function Function ClearScreens() Delete Each food Delete Each rock End Function |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Chansi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich bin euch wirklich unendlich dankbar, alles funktioniert jetzt wie es soll ![]() |
||
DjDETE |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
np ![]() Du musst nachdem Enter gedrückt wurde, auch wieder in die Hauptschleife zurückkehren, das machst du mit Return ![]() Code: [AUSKLAPPEN] Function Restart_Game() For f.food=Each food anzahl=anzahl+1 Next If anzahl=13 ClearScreens() Repeat Cls Text 20,20, "Congratulations!" Text 20,40, "You have finished the Game! :)" Text 20,60,"Press Enter to start again. If KeyHit(28) InitGame() : Return Flip Forever EndIf End Function Mist da war ich wohl zu langsam, aber ich glaube meine Methode ist besser ![]() |
||
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden. |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja deine is ... eleganter;) | ||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group