Von einer Funktion direkt vor die Hauptschleife springen....

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Blitzkrieg Bop

Betreff: Von einer Funktion direkt vor die Hauptschleife springen....

BeitragSa, Jun 12, 2004 13:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi di ho Leute!
Folgendes Prob:
In einem kleinen Menü, was in einer Funktion abgespeist ist, soll man bei einer bestimmten Auswahl direkt vor die Hauptschleife springen. Obwohl Goto nicht das beste ist, habe ich es mit Goto versucht zu realisieren, doch das geht nicht...hier mal mein Pseudocode, wie ich das aufgebaut habe:
Code: [AUSKLAPPEN]

Graphics 800,600,16,2
Setbuffer Backbuffer()
.start
Repeat
Cls
Auswahl()
Flip
Forever

Function Auswahl()
If Keyhit(28)
Goto start
Endif
End Function

Naja, wie gesagt es erscheint beim Versuch das Prog zu starten der Fehler
Zitat:

Undefined label

Also meine Frage, was mache ich falsch oder wie kann man es eleganter lösen?
MFG
b.bop
~ Hey Ho Let's Go ~

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Jun 12, 2004 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 800,600,16,2
Setbuffer Backbuffer()
.start
Repeat
Cls
if Auswahl() then neustart = 1 : exit
Flip
Forever
if neustart then neustart = 0 :goto start

Function Auswahl()
If Keyhit(28) then return true
End Function


was ist denn beim Label start,
sind da nur variablen die eingestellt werden müssen oder was genau soll da passiereren das du rekursiv immer aus der schleife springen willst?
[BB2D | BB3D | BB+]
 

Blitzkrieg Bop

BeitragSa, Jun 12, 2004 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne also es geht darum, das am Anfang immer halt Ladezeiten vorliegen, weil Objekte gedreht werden müssen.
Und wenn man Tot ist, soll man sich aussuchen können, ob man nochmal spielt oder beendet, dein Code ,Ralli, geht net!
~ Hey Ho Let's Go ~
 

Dreamora

BeitragSa, Jun 12, 2004 15:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich sehe nicht wirklich einen Grund warum man das so extrem umständlich und schludrig lösen sollte.

Ne globale Variable, die den aktuellen Modus angibt und in der Hauptschleife ne entsprechende Select - Case variante wäre eine möglichkeit das zu machen

oder eine hauptschleife die je nach befehl funktionen aufruft, die ihrerseits hauptschleifen beinhaten. zb ne funktion MainMenu(), PlayGame(), LoadData() und so weiter.

ich empfehle goto dringendstens zu vermeiden, denn es wird das programm nicht schön machen, zum debuggen wirds noch schlimmer und es sieht einfach schludrig aus und zeigt mangelndes abstraktes denken
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Jun 12, 2004 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du die bilder doch schon geladen und gedreht hast brauchst du das doch nicht nochmal machen oder ist das soviel an Grafik das du die immer während des Spiels rausschmeissen must!?
normalerweise brauchst du nur die variablen zurücksetzten !

Übrigens der Codeschnipsel geht so wie er da steht.....

das von Dreamora ist schon ganz gut
[BB2D | BB3D | BB+]
 

Blitzkrieg Bop

BeitragSa, Jun 12, 2004 16:28
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, deshalb will ich ja springen, damit man die grafiken net nochmal laden muss!
aber irgendwie versteh ich den lösungsweg net
Rolling Eyes
~ Hey Ho Let's Go ~

Hubsi

BeitragSa, Jun 12, 2004 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann lies Robs Tut. Ich weiß nicht was daran so schwer zu verstehen sein soll Rolling Eyes
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Blitzkrieg Bop

BeitragSa, Jun 12, 2004 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, ich hab die ganze repeat/forever schleife in eine if abfrage gehüllt, ist aber auch net das wahre oder?
~ Hey Ho Let's Go ~
 

Dreamora

BeitragSa, Jun 12, 2004 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum sollte man net? Ist etwas ganz normales Smile
Das war das, was ich eigentlich mit den Funktionen die ihrerseits "Mainloops" haben versucht habe zu sagen.

Je nach situation läuft eine andere mainloop.

Umgekehrt kannst du eine "Zustandsvariable" machen und ein Select - case

und während die mainloop abläuft wird je nach programmzustand ( menu, spiel, highscore oder was weiss ich ) ein anderer teil ausgeführt sprich der jeweilige select - case block halt.

is geschmackssache welche der zwei varianten man vor zieht.

was definitiv net reingehört ist ein goto
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Blitzkrieg Bop

BeitragSa, Jun 12, 2004 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay...ich möcht die Möglcikeit wäheln, eine If Schleife um die Main-Loop
zu setzten. Wer kann das an diesem Beispiel optimieren?
(Variablen etc. sehr schnell geschrieben und ansonsten auch eventuell umständlcih gecodet, aber auf den Sinn kommt es an.)
Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()
Global auswahl_temp =  1 , start = 1 , test
Const hoch = 200 , runter = 208


If start = 1
Repeat
Cls

For i = 1 To 30 Step 2
Plot Rand(0,800),Rand(0,600)
Next

If KeyHit(57)
a = True
EndIf

If a = True
Auswahl()
EndIf

Text 0,0,"Test:"+test
Text 0,50,"start:"+start
Text (800/2),(600/2)-200,"Drücke Leer für das Menü",1

Flip
Until KeyHit(1) : End
EndIf


Function Auswahl()
start = 5
Cls
If auswahl_temp = 1
   Color 255,0,255:Rect (800/2)-50,(600/2),100,15,0
EndIf    
If auswahl_temp = 2
   Color 255,0,255:Rect (800/2)-50,(600/2)+100,100,15,0
EndIf    
If KeyHit(hoch)
   auswahl_temp = auswahl_temp - 1
EndIf
If KeyHit(runter)
   auswahl_temp = auswahl_temp + 1
EndIf
If auswahl_temp > 2 Then auswahl_temp = 1
If auswahl_temp < 1 Then auswahl_temp = 2

If KeyHit(28)
   test = 1
EndIf

If auswahl_temp = 1 And test = 1
   start = 1
EndIf

If auswahl_temp = 2 And test = 1
   End
EndIf              

   Color 255,255,255:Text (800/2),(600/2),"Start",1
   Color 255,255,255:Text (800/2),(600/2)+100,"Ende",1   
End Function


MFG
~ Hey Ho Let's Go ~

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group