Frage zu Schleife im Spiel
Frage zu Schleife im Spiel
Ich weis nicht ob ich es hier richtig gepostet habe, aber ich hab da ein Problem. Ich bin gerade an einem Spiel, das Spiel hat zwei repeat schleifen. Die erste ist Das Hauptmenü, die zweite das erste Level vom spiel. Das sieht so aus:
Repeat
... ; Das Hauptmenü
Until nextlevel = 1 ; Also wenn man im Hauptmenü auf Play klickt
Repeat
... ; Das Spiel. Wenn man im Spiel auf ein bestimmtes Sprite läuft, dann eine Taste drückt, kommt man in einen anderen Raum, also eine erneute repeat schleife. ...
Until nextlevel = 2
Repeat ;der neue Raum
... ;So, hier liegt das Problem. Wenn ich jetzt aus meinem "raum" wieder hinaus will, sollte das Programm in die letzte schleife sprinden können. Also ins Level 1. Ich kenn kein Befehl den man hier anwenden könnte.
Until nextlevel = 2
Hier nochmal die erklärung zu den "räumen", also die erste schleife ist das Hauptmenü, wenn man da auf Play drückt, beendet die schleife und eine neue wird gestartet, also das Level 1, Das Level 1 ist eine Burg von innen, und wenn ich auf ein Sprite laufe (Das sprite ist immer vor einem Haus oder so) und die taste e, drücke gelange ich in den Raum. Wieder wird die schleife geschlossen und die neue gestartet. Okay jetzt das Problem: Wenn ich wieder aus dem Raum hinaus möchte, also wieder in die Burg, dann muss das Programm nach oben in die "Level 1" schleife zurückspringen, denn das ist die Burg. Kann mir jemand helfen. Ich kann euch auch mein Spiel geben, damit ihr es genauer anschauen könnt.
Repeat
... ; Das Hauptmenü
Until nextlevel = 1 ; Also wenn man im Hauptmenü auf Play klickt
Repeat
... ; Das Spiel. Wenn man im Spiel auf ein bestimmtes Sprite läuft, dann eine Taste drückt, kommt man in einen anderen Raum, also eine erneute repeat schleife. ...
Until nextlevel = 2
Repeat ;der neue Raum
... ;So, hier liegt das Problem. Wenn ich jetzt aus meinem "raum" wieder hinaus will, sollte das Programm in die letzte schleife sprinden können. Also ins Level 1. Ich kenn kein Befehl den man hier anwenden könnte.
Until nextlevel = 2
Hier nochmal die erklärung zu den "räumen", also die erste schleife ist das Hauptmenü, wenn man da auf Play drückt, beendet die schleife und eine neue wird gestartet, also das Level 1, Das Level 1 ist eine Burg von innen, und wenn ich auf ein Sprite laufe (Das sprite ist immer vor einem Haus oder so) und die taste e, drücke gelange ich in den Raum. Wieder wird die schleife geschlossen und die neue gestartet. Okay jetzt das Problem: Wenn ich wieder aus dem Raum hinaus möchte, also wieder in die Burg, dann muss das Programm nach oben in die "Level 1" schleife zurückspringen, denn das ist die Burg. Kann mir jemand helfen. Ich kann euch auch mein Spiel geben, damit ihr es genauer anschauen könnt.
Ich kenn zwar deinen Code nicht, aber schau dir doch mal den Befehl Gosub an:
edit hatte selbst noch einen Fehler gemacht....
Code: Alles auswählen
Repeat
;dein code
If level1
Gosub Level1
EndIf
If level2
Gosub Level2
EndIf
;usw....
Until GameExit=1
End
Level1:
Repeat
;dein code
Until Level1Ende=1
Return
Level2:
Repeat
;dein code
Until Level2Ende=1
Return
edit hatte selbst noch einen Fehler gemacht....

Das funktioniert nicht, oder ich mach was falsch. Weil der Gosub Bafehl muss auf eine Sprungmarke weiter oben imm code zugreifen, das geht nicht.
Aber hier ist mein code:
Aber hier ist mein code:
Code: Alles auswählen
; Hier werden die folgenden sachen getestet
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitSound() = 0 Or InitMouse() = 0
End
EndIf
;Hier werden die einzelnen sachen wie Sound Decoder usw. geladen
UseOGGSoundDecoder()
; Hier wird das Scren für das ganze spiel gestartet
If OpenScreen(800, 600, 32, "noname")
;---------------------------------------------------------------------------
; --------HAUPTMENÜ----------
;---------------------------------------------------------------------------
; HIER ERDEN DIE DATEIEN FÜR DAS HAUPTMENÜ GELADEN
LoadSprite(0, "Gfx\mainback.bmp", 0)
LoadSprite(1, "Gfx\play.bmp", 0)
LoadSprite(4, "Gfx\exit.bmp", 0)
LoadSprite(5, "Gfx\pointer.bmp", 0)
; Hier wird der Hintergrund sound des Hauptmenüs geladen
LoadSound(0, "Sfx\background.ogg")
SoundVolume(0, 50)
PlaySound(0, 1)
Delay(2000)
; Hier fängt das Hauptmenü an
Repeat
ExamineKeyboard()
ExamineMouse()
FlipBuffers()
ClearScreen(0, 0, 0)
DisplaySprite(0, 0, 0)
DisplayTransparentSprite(1, 550, 150)
DisplayTransparentSprite(4, 550, 250)
; der Mauszeider wird eingeblendet
mx = MouseX()
my = MouseY()
DisplayTransparentSprite(5, mx, my)
If MouseButton(1) And SpritePixelCollision(5, mx, my, 1, 550, 150)
play = 1
EndIf
If MouseButton(1) And SpritePixelCollision(5, mx, my, 4, 550, 250)
exit = 1
EndIf
Until exit = 1 Or play = 1
If exit = 1
End
EndIf
If play = 1
;^^ Das EndIF für das Play ist ganz unten im Programm beschrieben
;----------------------------------------------------------
; Kapitel 1 Die Freilassung aus dem Kerker
;-----------------------------------------------------------
FreeSprite(0)
FreeSprite(4)
FreeSprite(5)
FreeSound(0)
LoadSprite(0, "Gfx\schlossboden.bmp", 0)
LoadSprite(1, "Gfx\schlossmauerquer1.bmp", 0)
LoadSprite(2, "Gfx\schlossmauerlang1.bmp", 0)
LoadSprite(3, "Gfx\schlossmauerquer2.bmp", 0)
LoadSprite(4, "Gfx\schlossmauerlang2.bmp", 0)
LoadSprite(5, "Gfx\up.bmp", 0)
LoadSprite(6, "Gfx\down.bmp", 0)
LoadSprite(7, "Gfx\left.bmp", 0)
LoadSprite(8, "Gfx\right.bmp", 0)
LoadSprite(9, "Gfx\stand.bmp", 0)
LoadSprite(10, "Gfx\sichtfenster.bmp", 0)
LoadSprite(11, "Gfx\stopquer.bmp", 0)
LoadSprite(12, "Gfx\stoplang.bmp", 0)
LoadSprite(13, "Gfx\turm.bmp", 0)
LoadSprite(14, "Gfx\burgtor.bmp", 0)
LoadSprite(15, "Gfx\brunnen.bmp", 0)
LoadSprite(16, "Gfx\stopkleinlang.bmp", 0)
LoadSprite(17, "Gfx\stepin.bmp", 0)
LoadSprite(18, "Gfx\incomplete.bmp", 0)
; Der Ritter 1
LoadSprite(19, "Gfx\ritter2left.bmp", 0) ; Der Ritter kann nur nach rechts oder links laufen
LoadSprite(20, "Gfx\ritter2right.bmp", 0)
LoadSound(0, "Sfx\leute.wav")
SoundVolume(0, 50)
PlaySound(0, 1)
x = 372
y = 272
direction = up
;Das erste Trainingslevel
ritter2x = 500
ritterx = 200
Repeat
ExamineKeyboard()
FlipBuffers()
ClearScreen(0, 0, 0)
DisplaySprite(0, wx, wy) ;Den Booden darstellen
; Die Burgmauern anzeigen
;Oben
For m1=0 To 720 Step 80
DisplaySprite(1, wx+m1, wy)
Next
DisplaySprite(11, wx, wy+80)
; Unten
For m2=0 To 720 Step 80
DisplaySprite(3, wx+m2, wy+520)
Next
DisplaySprite(11, wx, wy+520)
; Links
For m3=0 To 520 Step 80
DisplaySprite(2, wx, wy+m3)
Next
DisplaySprite(12, wx+80, wy)
;Rechts wirn Manuell gemacht
; Die zwei Mauern über- und unterhalb vom tor manuel anzeigen
;oben
DisplaySprite(4, wx+720, wy+80)
;unten
DisplaySprite(4, wx+720, wy+440)
; Die Kollisionen
DisplaySprite(16, wx+720, wy+80)
DisplaySprite(16, wx+720, wy+440)
; HIER WERDEN GEBÄUDE WIE EIN TURM ANGEZEIGT
; Die vier Wachtürme
DisplayTransparentSprite(13, wx-12, wy-15)
DisplayTransparentSprite(13, wx-10, wy+510)
DisplayTransparentSprite(13, wx+710, wy-15)
DisplayTransparentSprite(13, wx+710, wy+510)
; Das Burgtor
DisplayTransparentSprite(14, wx+735, wy+160)
; Der Brunnen
DisplayTransparentSprite(15, wx+400, wy+256)
;Hier noch die Stepp inns
DisplaySprite(17, wx+710, wy+270)
If KeyboardPushed(#PB_Key_Up) = 0 And KeyboardPushed(#PB_Key_Down) = 0 And KeyboardPushed(#PB_Key_Left) = 0 And KeyboardPushed(#PB_Key_Right) = 0
DisplayTransparentSprite(9, x, y)
EndIf
; DIE TASTEN ZUR BEWEGUNG
If KeyboardPushed(#PB_Key_W)
If SpritePixelCollision(5, x, y, 11, wx, wy+80) Or SpriteCollision(5, x, y, 16, wx+720, wy+80) Or SpriteCollision(5, x, y, 16, wx+720, wy+440) Or SpriteCollision(5, x, y, 14, wx+725, wy+160) Or SpriteCollision(5, x, y, 15, wx+400, wy+256)
wy-4
EndIf
wy+2
DisplayTransparentSprite(5, x, y)
EndIf
If KeyboardPushed(#PB_Key_S)
If SpritePixelCollision(6, x, y, 11, wx, wy+520) Or SpriteCollision(6, x, y, 16, wx+720, wy+80) Or SpriteCollision(6, x, y, 16, wx+720, wy+440) Or SpriteCollision(6, x, y, 14, wx+725, wy+160) Or SpriteCollision(6, x, y, 15, wx+400, wy+256)
wy+4
EndIf
wy-2
DisplayTransparentSprite(6, x, y)
EndIf
If KeyboardPushed(#PB_Key_A)
If SpritePixelCollision(7, x, y, 12, wx+80, wy) Or SpriteCollision(7, x, y, 16, wx+720, wy+80) Or SpriteCollision(7, x, y, 16, wx+720, wy+440) Or SpriteCollision(7, x, y, 14, wx+725, wy+160) Or SpriteCollision(7, x, y, 15, wx+400, wy+256)
wx-4
EndIf
wx+2
DisplayTransparentSprite(7, x, y)
EndIf
If KeyboardPushed(#PB_Key_D)
If SpriteCollision(8, x, y, 16, wx+720, wy+80) Or SpriteCollision(8, x, y, 16, wx+720, wy+440) Or SpriteCollision(8, x, y, 14, wx+725, wy+160) Or SpriteCollision(8, x, y, 15, wx+400, wy+256)
wx+4
EndIf
wx-2
DisplayTransparentSprite(8, x, y)
EndIf
If KeyboardPushed(#PB_Key_E) And SpritePixelCollision(9, x, y, 17, wx+710, wy+270) And done = 3
nextlevel = 1
Else
DisplaySprite(18, 0, 0)
EndIf
; Hier wird der Ritter1 bewegt
If SpritePixelCollision(19, ritterx+wx, wy+40, 13, wx+710, wy-15)
back = 1
EndIf
If SpritePixelCollision(20, ritterx+wx, wy+40, 13, wx-12, wy-15)
back = 0
EndIf
If back = 1
ritterx-1
DisplayTransparentSprite(19, ritterx+wx, wy+40)
EndIf
If back = 0
ritterx+1
DisplayTransparentSprite(20, ritterx+wx, wy+40)
EndIf
; Hier ein Cheat das das Sichtfenster weggeht!!! :D
If KeyboardPushed(#PB_Key_P)
cheat = 1
EndIf
If KeyboardPushed(#PB_Key_O)
cheat = 0
EndIf
If cheat = 0
DisplayTransparentSprite(10, 0, 0) ; Damit man nich die gesammte Insel im Blick hat! :D Wird vorerst noch weggelassenDisplayTransparentSprite(5, 0, 0) ; Damit man nich die gesammte Insel im Blick hat! :D Wird vorerst noch weggelassen
EndIf
; Die abfrage ins nächste Level
If KeyboardPushed(#PB_Key_E) And SpritePixelCollision(9, x, y, 17, wx+710, wy+270)
; Hier kommt rein was passieren soll wenn man vor dem Burgtor in das rote feld reinläuft
EndIf
Until KeyboardPushed(#PB_Key_Escape)
EndIf
; Dieses End if gilt dem "play" nach dem Hauptmenü
EndIf
Ich weis nicht, ich hab es so gemacht wie du es beschrieben hast.
mit z.B. Gosub Hauptmenü.
Also:
Hauptmenu:
Repeat ;Hauptmenü
...
Until
Repeat ; Spiel
Until hauptmenu = 1
Gosub Hauptmenu
Irgentwie geht das nicht. Weis ich auch nicht, ich schreibs am besten in meinen Code hinein damit du dir das besser vorstellen kannst.
mit z.B. Gosub Hauptmenü.
Also:
Hauptmenu:
Repeat ;Hauptmenü
...
Until
Repeat ; Spiel
Until hauptmenu = 1
Gosub Hauptmenu
Irgentwie geht das nicht. Weis ich auch nicht, ich schreibs am besten in meinen Code hinein damit du dir das besser vorstellen kannst.
Code: Alles auswählen
; Hier werden die folgenden sachen getestet
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitSound() = 0 Or InitMouse() = 0
End
EndIf
;Hier werden die einzelnen sachen wie Sound Decoder usw. geladen
UseOGGSoundDecoder()
; Hier wird das Scren für das ganze spiel gestartet
If OpenScreen(800, 600, 32, "noname")
;---------------------------------------------------------------------------
; --------HAUPTMENÜ----------
;---------------------------------------------------------------------------
Hauptmenu: ; Die SPRUNGMARKE ----------------------------------------
; HIER ERDEN DIE DATEIEN FÜR DAS HAUPTMENÜ GELADEN
LoadSprite(0, "Gfx\mainback.bmp", 0)
LoadSprite(1, "Gfx\play.bmp", 0)
LoadSprite(4, "Gfx\exit.bmp", 0)
LoadSprite(5, "Gfx\pointer.bmp", 0)
; Hier wird der Hintergrund sound des Hauptmenüs geladen
LoadSound(0, "Sfx\background.ogg")
SoundVolume(0, 50)
PlaySound(0, 1)
Delay(2000)
; Hier fängt das Hauptmenü an
Repeat
ExamineKeyboard()
ExamineMouse()
FlipBuffers()
ClearScreen(0, 0, 0)
DisplaySprite(0, 0, 0)
DisplayTransparentSprite(1, 550, 150)
DisplayTransparentSprite(4, 550, 250)
; der Mauszeider wird eingeblendet
mx = MouseX()
my = MouseY()
DisplayTransparentSprite(5, mx, my)
If MouseButton(1) And SpritePixelCollision(5, mx, my, 1, 550, 150)
play = 1
EndIf
If MouseButton(1) And SpritePixelCollision(5, mx, my, 4, 550, 250)
exit = 1
EndIf
Until exit = 1 Or play = 1
If exit = 1
End
EndIf
If play = 1
;^^ Das EndIF für das Play ist ganz unten im Programm beschrieben
;----------------------------------------------------------
; Kapitel 1 Die Freilassung aus dem Kerker
;-----------------------------------------------------------
FreeSprite(0)
FreeSprite(4)
FreeSprite(5)
FreeSound(0)
LoadSprite(0, "Gfx\schlossboden.bmp", 0)
LoadSprite(1, "Gfx\schlossmauerquer1.bmp", 0)
LoadSprite(2, "Gfx\schlossmauerlang1.bmp", 0)
LoadSprite(3, "Gfx\schlossmauerquer2.bmp", 0)
LoadSprite(4, "Gfx\schlossmauerlang2.bmp", 0)
LoadSprite(5, "Gfx\up.bmp", 0)
LoadSprite(6, "Gfx\down.bmp", 0)
LoadSprite(7, "Gfx\left.bmp", 0)
LoadSprite(8, "Gfx\right.bmp", 0)
LoadSprite(9, "Gfx\stand.bmp", 0)
LoadSprite(10, "Gfx\sichtfenster.bmp", 0)
LoadSprite(11, "Gfx\stopquer.bmp", 0)
LoadSprite(12, "Gfx\stoplang.bmp", 0)
LoadSprite(13, "Gfx\turm.bmp", 0)
LoadSprite(14, "Gfx\burgtor.bmp", 0)
LoadSprite(15, "Gfx\brunnen.bmp", 0)
LoadSprite(16, "Gfx\stopkleinlang.bmp", 0)
LoadSprite(17, "Gfx\stepin.bmp", 0)
LoadSprite(18, "Gfx\incomplete.bmp", 0)
; Der Ritter 1
LoadSprite(19, "Gfx\ritter2left.bmp", 0) ; Der Ritter kann nur nach rechts oder links laufen
LoadSprite(20, "Gfx\ritter2right.bmp", 0)
LoadSound(0, "Sfx\leute.wav")
SoundVolume(0, 50)
PlaySound(0, 1)
x = 372
y = 272
direction = up
;Das erste Trainingslevel
ritter2x = 500
ritterx = 200
Repeat
ExamineKeyboard()
FlipBuffers()
ClearScreen(0, 0, 0)
DisplaySprite(0, wx, wy) ;Den Booden darstellen
; Die Burgmauern anzeigen
;Oben
For m1=0 To 720 Step 80
DisplaySprite(1, wx+m1, wy)
Next
DisplaySprite(11, wx, wy+80)
; Unten
For m2=0 To 720 Step 80
DisplaySprite(3, wx+m2, wy+520)
Next
DisplaySprite(11, wx, wy+520)
; Links
For m3=0 To 520 Step 80
DisplaySprite(2, wx, wy+m3)
Next
DisplaySprite(12, wx+80, wy)
;Rechts wirn Manuell gemacht
; Die zwei Mauern über- und unterhalb vom tor manuel anzeigen
;oben
DisplaySprite(4, wx+720, wy+80)
;unten
DisplaySprite(4, wx+720, wy+440)
; Die Kollisionen
DisplaySprite(16, wx+720, wy+80)
DisplaySprite(16, wx+720, wy+440)
; HIER WERDEN GEBÄUDE WIE EIN TURM ANGEZEIGT
; Die vier Wachtürme
DisplayTransparentSprite(13, wx-12, wy-15)
DisplayTransparentSprite(13, wx-10, wy+510)
DisplayTransparentSprite(13, wx+710, wy-15)
DisplayTransparentSprite(13, wx+710, wy+510)
; Das Burgtor
DisplayTransparentSprite(14, wx+735, wy+160)
; Der Brunnen
DisplayTransparentSprite(15, wx+400, wy+256)
;Hier noch die Stepp inns
DisplaySprite(17, wx+710, wy+270)
If KeyboardPushed(#PB_Key_Up) = 0 And KeyboardPushed(#PB_Key_Down) = 0 And KeyboardPushed(#PB_Key_Left) = 0 And KeyboardPushed(#PB_Key_Right) = 0
DisplayTransparentSprite(9, x, y)
EndIf
; DIE TASTEN ZUR BEWEGUNG
If KeyboardPushed(#PB_Key_W)
If SpritePixelCollision(5, x, y, 11, wx, wy+80) Or SpriteCollision(5, x, y, 16, wx+720, wy+80) Or SpriteCollision(5, x, y, 16, wx+720, wy+440) Or SpriteCollision(5, x, y, 14, wx+725, wy+160) Or SpriteCollision(5, x, y, 15, wx+400, wy+256)
wy-4
EndIf
wy+2
DisplayTransparentSprite(5, x, y)
EndIf
If KeyboardPushed(#PB_Key_S)
If SpritePixelCollision(6, x, y, 11, wx, wy+520) Or SpriteCollision(6, x, y, 16, wx+720, wy+80) Or SpriteCollision(6, x, y, 16, wx+720, wy+440) Or SpriteCollision(6, x, y, 14, wx+725, wy+160) Or SpriteCollision(6, x, y, 15, wx+400, wy+256)
wy+4
EndIf
wy-2
DisplayTransparentSprite(6, x, y)
EndIf
If KeyboardPushed(#PB_Key_A)
If SpritePixelCollision(7, x, y, 12, wx+80, wy) Or SpriteCollision(7, x, y, 16, wx+720, wy+80) Or SpriteCollision(7, x, y, 16, wx+720, wy+440) Or SpriteCollision(7, x, y, 14, wx+725, wy+160) Or SpriteCollision(7, x, y, 15, wx+400, wy+256)
wx-4
EndIf
wx+2
DisplayTransparentSprite(7, x, y)
EndIf
If KeyboardPushed(#PB_Key_D)
If SpriteCollision(8, x, y, 16, wx+720, wy+80) Or SpriteCollision(8, x, y, 16, wx+720, wy+440) Or SpriteCollision(8, x, y, 14, wx+725, wy+160) Or SpriteCollision(8, x, y, 15, wx+400, wy+256)
wx+4
EndIf
wx-2
DisplayTransparentSprite(8, x, y)
EndIf
If KeyboardPushed(#PB_Key_E) And SpritePixelCollision(9, x, y, 17, wx+710, wy+270) And done = 3
nextlevel = 1
Else
DisplaySprite(18, 0, 0)
EndIf
; Hier wird der Ritter1 bewegt
If SpritePixelCollision(19, ritterx+wx, wy+40, 13, wx+710, wy-15)
back = 1
EndIf
If SpritePixelCollision(20, ritterx+wx, wy+40, 13, wx-12, wy-15)
back = 0
EndIf
If back = 1
ritterx-1
DisplayTransparentSprite(19, ritterx+wx, wy+40)
EndIf
If back = 0
ritterx+1
DisplayTransparentSprite(20, ritterx+wx, wy+40)
EndIf
; Hier ein Cheat das das Sichtfenster weggeht!!! :D
If KeyboardPushed(#PB_Key_P)
cheat = 1
EndIf
If KeyboardPushed(#PB_Key_O)
cheat = 0
EndIf
If cheat = 0
DisplayTransparentSprite(10, 0, 0) ; Damit man nich die gesammte Insel im Blick hat! :D Wird vorerst noch weggelassenDisplayTransparentSprite(5, 0, 0) ; Damit man nich die gesammte Insel im Blick hat! :D Wird vorerst noch weggelassen
EndIf
; Die abfrage ins nächste Level
If KeyboardPushed(#PB_Key_E) And SpritePixelCollision(9, x, y, 17, wx+710, wy+270)
; Hier kommt rein was passieren soll wenn man vor dem Burgtor in das rote feld reinläuft
EndIf
Until KeyboardPushed(#PB_Key_Escape)
Gosub Hauptmenu ; Hier sollte das Programm zur Sprungm. ganz oben im Code gelangen!!
EndIf
; Dieses End if gilt dem "play" nach dem Hauptmenü
EndIf
Du hast es ganz anders gemacht! Ich will sagen, dass du die einzelnen
Programmteile in Subroutinen zusammenfasst:
mit Name der Routine und einem Return! Sonst gehts nicht.
Nur der Aufruf erfolgt mit Gosub. (goto würde ich nicht verwenden)
In der PB Hilfe kannst du auch nachsehen wie man Gosub verwendet.
In deinem Programm hast du gar keine Return verwendet.
Programmteile in Subroutinen zusammenfasst:
mit Name der Routine und einem Return! Sonst gehts nicht.
Nur der Aufruf erfolgt mit Gosub. (goto würde ich nicht verwenden)
In der PB Hilfe kannst du auch nachsehen wie man Gosub verwendet.
In deinem Programm hast du gar keine Return verwendet.
Code: Alles auswählen
Level1:
Repeat
;dein code
Until Level1Ende=1
Return
Wieso machst du überhaupt verschiedene Schleifen für die Level? Mach doch einfach eine Schleife und beim Verlassen und Betreten der Level wird einfach eine neue Grafik eingeladen und das nächste level angezeigt. Dabei braucht man doch keine neue Schleife.
Pseudocode:
Ich weiß zwar nun nicht genau wie du die Level darstellst, aber wenn es dir so wie oben beschrieben zu viel Code in der Hauptschleife wäre, und dadurch zu unübersichtlich, lagere doch einfach die Grafiken in Prozeduren aus (Ist viel besser als Gosub und so ein Zeug). Dann sieht es etwa so aus:
Pseudocode:
Dabei könnten die Prozeduren dann in anderen Dateien ausgelagert werden und würden nicht in der Hauptschleife für zu viele Zeilen sorgen. 
Aber von Gosub und Goto würd ich die Finger lassen, dass ist imo keine gute Lösung. Da springt man zu sehr hin und her, da sind Prozeduren die ideale Möglichkeit etwas auszulagern.
Pseudocode:
Code: Alles auswählen
if level = 1
displaysprite(level1, 0, 0)
elseif level = 2
displaysprite(level2, 0, 0)
endif
Pseudocode:
Code: Alles auswählen
if level = 1
displaylevel_1()
elseif level = 2
displaylevel_2()
endif
procedure displaylevel_1()
displaysprite(level1, 0, 0)
...
...
endprocedure
procedure displaylevel_2()
displaysprite(level2, 0, 0)
...
...
endprocedure

Aber von Gosub und Goto würd ich die Finger lassen, dass ist imo keine gute Lösung. Da springt man zu sehr hin und her, da sind Prozeduren die ideale Möglichkeit etwas auszulagern.
-
- Beiträge: 57
- Registriert: 04.10.2004 10:20
Ich komm in meinem Code ganz durcheinander wenn ich das mit Proceduren usw mache.
Ich weis ich mach das alles sehr umständlich, aber ich komm zurecht.
Ich hab da eine neue Idee:
Repeat
Repeat ;Level 1
Until level2 = 1 or backtolevel1 = 1
If backtolevel1 = 1
Gosub ; (oder Goto) Level1! Das müsste doch eigentlich funktionieren. weil das ganze Programm in einer Hauptschleife läuft!
Repeat ;Level 2
Until level3 = 1
...
Until completeexit = 1
End
Ich versuchs gleich mal...
Ich weis ich mach das alles sehr umständlich, aber ich komm zurecht.
Ich hab da eine neue Idee:
Repeat
Repeat ;Level 1
Until level2 = 1 or backtolevel1 = 1
If backtolevel1 = 1
Gosub ; (oder Goto) Level1! Das müsste doch eigentlich funktionieren. weil das ganze Programm in einer Hauptschleife läuft!
Repeat ;Level 2
Until level3 = 1
...
Until completeexit = 1
End
Ich versuchs gleich mal...