Von Haupt-/ Unterprogramm zu Unterprogramm springen

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

hotzenwaldsepp

Betreff: Von Haupt-/ Unterprogramm zu Unterprogramm springen

BeitragDo, Okt 05, 2006 23:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich versuch mich gerade an einem Managerspiel.
Ich habe bis jetzt ein paar Menues programmiert.

a) 1. Spiel starten --> 2. Karriere / Feste Teamauswahl
b) 1.Spiel Laden

Ich springe z.B. nach der Auswahl "Spiel Starten /Spiel Laden" mit Gosub in das Menü "Karriere/Feste Teamauswahl"

Wie kann ich es realisieren, das ich z.B über einen "Back Button" wieder ins Menü "Spiel starten / Spiel Laden

Ich hab das ganze auch schon mit Goto probiert aber das geht ja auch nicht.

Gibts eine Lösung ähnlich wie beim C64 wo ich einfach in Zeile 1090 schreiben konnte Goto 60.

Ich möchte einen Rücksprung machen. So wie ich das ganze immer interpretiere kann ich immer nur nach unten springen
 

antome

!!! gesperrt !!!

BeitragDo, Okt 05, 2006 23:38
Antworten mit Zitat
Benutzer-Profile anzeigen
.Routine1
Gosub Routine2


Return


.Routine2

If Button = true then Return

Return
antome
 

Omenaton_2

BeitragFr, Okt 06, 2006 10:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Also aus dem Spiel Starten Menü macht es durchaus Sinn mit Goto in die Hauptschleife des Spieles zu springen, nicht mit Gosub oder sonstwas.
Da sind wir schon bei einem wichtigen Punkt. Dein Spiel sollte idealer weise eine "Hauptschleife", eine Art Zentrale haben, von wo aus bei Bedarf die verschiedenen Unterprogramme mit Gosubs angesprungen werden.

Ja, in alten Basic Sprachen hatten die Zeilen eine Nummer wir 1030 und konnten so mit Goto angesprungen werden.
Das ist auch in BlitzBasic ähnlich. Hier kann man nicht jeder Zeile eine Nummer geben, aber man kann an den wenigen Stellen wo eine Subrutine beginnt einen Label setzen (Wort davor ein Punkt), was dann die gleiche Funktion erfüllt wie ehemals die Zeilennummer.

.Karriere

DerHase

BeitragFr, Okt 06, 2006 11:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde einfach ein Select Case nehmen, welches sich auf den Spielstatus bezieht. Je nach dem welchen Wert dieser Status hat, wird ein anderer Teil des Programmes ausgeführt. Mit F1 bis F4 kann man durch die verschiedenen Teile des Programmes springen und mit Esc wird das Programm beendet.

Code: [AUSKLAPPEN]
Graphics 640,480,0,2

Global SpielStatus = 1

Function SpielStatusSteuerung()
   If KeyHit (1) Then SpielStatus = 0
   If KeyHit (59) Then SpielStatus = 1
   If KeyHit (60) Then SpielStatus = 2
   If KeyHit (61) Then SpielStatus = 3
   If KeyHit (62) Then SpielStatus = 4

End Function


While Not SpielStatus = 0

Select SpielStatus
   Case 1
       SpielStatusSteuerung()
      Color 255,0,0
      Text 30,30,"Dies könnte das Menü sein"
   Case 2
       SpielStatusSteuerung()
      Color 0,255,255
      Text 30,30,"Dies könnte ein Hilfstext sein"
   Case 3
       SpielStatusSteuerung()
      Color 255,0,255
      Text 30,30,"Dies könnten die Optionen sein"
   Case 4
       SpielStatusSteuerung()
      Color 255,255,0
      Text 30,30,"Dies könnte das Spiel sein"
End Select

Flip:Cls

Wend
Play Satyr!
 

hotzenwaldsepp

BeitragFr, Okt 06, 2006 13:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
; LoadImage and DrawImage example
HidePointer ;Windows Mauszeiger wird versteckt

; Declare a variable to hold the graphic file handle


; Set a graphics mode
Graphics 800,600,16,2


AppTitle "F1 Grand Prix Manager"


; Set drawing operations for double buffering
SetBuffer BackBuffer()
Global mh=0


Repeat


;*****************************************Startauswahl******************************************************
;***********************************************************************************************************
;***********************************************************************************************************

.start



button_newgame=LoadImage("button1_gfx\newgame.bmp")
button_newgame_o=LoadImage("button1_gfx\newgame_o.bmp");for Mouseover
button_loadgame=LoadImage("button1_gfx\loadgame.bmp")
button_loadgame_o=LoadImage("button1_gfx\loadgame_o.bmp");for Mouseover
button_newgame_karr=LoadImage("button1_gfx\newgame_karr.bmp")
button_newgame_karr_o=LoadImage("button1_gfx\newgame_karr_o.bmp");for Mouseover
button_newgame_ausw=LoadImage("button1_gfx\newgame_ausw.bmp")
button_newgame_ausw_o=LoadImage("button1_gfx\newgame_ausw_o.bmp")
button_exit=LoadImage("button1_gfx\exit.bmp")
button_exit_o=LoadImage("button1_gfx\exit_o.bmp"); for Mouseover

gfxMouse=LoadImage("misc_gfx\Mouse.bmp")



mh = MouseHit(1);Abfrage Mousehit



Cls ; clear the screen

DrawImage button_newgame,580,100 ; Draw the image!
DrawImage button_loadgame,580,150 ; Draw the image!
DrawImage button_exit,20,575; Draw Image



;**************************Auswahl_Abfrage**********************************************************
;Newgame_abfrage
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame,580,100,0) DrawImage button_newgame_o,580,100; Mouse_Over
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame,580,100,0) And mh=0 Then newgame=0 Else
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame,580,100,0) And mh=1 Then newgame = 1


;Loadgaem_abfrage
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_loadgame,580,150,0) DrawImage button_loadgame_o,580,150; Mouse_Over
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_loadgame,580,150,0) And mh=0 Then loadgame=0 Else
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_loadgame,580,150,0) And mh=1 Then loadgame = 1

;Exit_abfrage
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_exit,20,575,0) DrawImage button_exit_o,20,575; Mouse_Over
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_exit,20,575,0) And mh=0 Then exit_game=0 Else
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_exit,20,575,0) And mh=1 Then exit_game = 1

;Draw_Mouse-->Position muss hier sein, damit es im obersten Layer steht
DrawImage gfxMouse,MouseX(),MouseY()
;***************************************Durchführung der Auswahl***********************************
If newgame=1 Then Gosub newgame_menu Else
If loadgame=1 Then Gosub loadgame_menu Else
If exit_game=1 Then Exit Else




Flip ; flip the image into view and clear the back buffer




Until KeyHit(1)
End




;****************************************************************************************************
;*************************New_Game ****************************************************
;****************************************************************************************************
; Let's do a loop where the graphic is drawn wherever the
; mouse is pointing. ESC will exit.
Repeat

.newgame_menu

mh = MouseHit(1);Abfrage Mousehit



Cls ; clear the screen

DrawImage button_newgame_karr,580,100 ; Draw the image!
DrawImage button_newgame_ausw,580,150 ; Draw the image!
DrawImage button_exit,20,575; Draw Image

DrawImage gfxMouse,MouseX(),MouseY()

;Karriere Abfrage
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame_karr,580,100,0) DrawImage button_newgame_karr_o,580,100;Mouseover
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame_karr,580,100,0) And mh=0 Then newgame_karr =0 Else
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame_karr,580,100,0) And mh=1 Then newgame_karr = 1

;Teamauswahl Abfrage
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame_ausw_o,580,150,0) DrawImage button_newgame_ausw_o,580,150
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame_ausw,580,150,0) And mh=0 Then newgame_ausw=0 Else
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame_ausw,580,150,0) And mh=1 Then newgame_ausw = 1

;Exit_abfrage
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_exit,20,575,0) DrawImage button_exit_o,20,575; Mouse_Over
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_exit,20,575,0) And mh=0 Then exit_game=0 Else
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_exit,20,575,0) And mh=1 Then exit_game = 2


;Draw_Mouse-->Position muss hier sein, damit es im obersten Layer steht
DrawImage gfxMouse,MouseX(),MouseY()

If newgame_karr=1 Then Print"karr" Else

If newgame_ausw=1 Then Gosub Start_mit_Teamauswahl Else


If exit_game=2 Then Goto start



Flip ; flip the image into view and clear the back buffer





Until KeyHit(1)
Return





;*****************************************************************************************************
;*****************************load_Game************************************************
;*****************************************************************************************************
Repeat
.loadgame_menu
Cls
; ReadDir/NextFile$/CloseDir example

; Define what folder to start with ...
folder$="c:\user\f1ms"

myDir=ReadDir(folder$)
file$=NextFile$(myDir)

Print file$



Flip ; flip the image into view and clear the back buffer
Until KeyHit(1)
Return

;******************************************************************************************************
.Start_mit_Teamauswahl
;******************************************************************************************************

; Laden aller Teamlogos

l_arrows=LoadImage("team_gfx\arrows\teamlogo.bmp")

l_ascaron=LoadImage("team_gfx\ascaron\teamlogo.bmp")

l_bmw=LoadImage("team_gfx\bmw\teamlogo.bmp")

l_brabham=LoadImage("team_gfx\brabham\teamlogo.bmp")

l_crammond=LoadImage("team_gfx\crammond\teamlogo.bmp")

l_ferrari=LoadImage("team_gfx\ferrari\teamlogo.bmp")

l_honda=LoadImage("team_gfx\honda\teamlogo.bmp")

l_lotus=LoadImage("team_gfx\lotus\teamlogo.bmp")

l_mastra=LoadImage("team_gfx\mastra\teamlogo.bmp")

l_mclaren=LoadImage("team_gfx\mclaren\teamlogo.bmp")

l_minardi=LoadImage("team_gfx\minardi\teamlogo.bmp")

l_prodrive=LoadImage("team_gfx\prodrive\teamlogo.bmp")

l_redbull=LoadImage("team_gfx\redbull\teamlogo.bmp")

l_renault=LoadImage("team_gfx\renault\teamlogo.bmp")

l_software2000=LoadImage("team_gfx\software2000\teamlogo.bmp")

l_spyker=LoadImage("team_gfx\spyker\teamlogo.bmp")

l_stratec=LoadImage("team_gfx\stratec\teamlogo.bmp")

l_superaguri=LoadImage("team_gfx\superaguri\teamlogo.bmp")

l_tororosso=LoadImage("team_gfx\tororosso\teamlogo.bmp")

l_toyota=LoadImage("team_gfx\toyota\teamlogo.bmp")

l_williams=LoadImage("team_gfx\williams\teamlogo.bmp")

Repeat


mh = MouseHit(1);Abfrage Mousehit



Cls ; clear the screen

DrawImage l_arrows,20,100 ; Draw the image!
DrawImage l_ascaron,80,100 ; Draw the image!
DrawImage l_bmw,140,100 ; Draw the image!
DrawImage l_brabham,200,100 ; Draw the image!
DrawImage l_crammond,260,100 ; Draw the image!
DrawImage l_ferrari,320,100 ; Draw the image!
DrawImage l_honda,380,100 ; Draw the image!
DrawImage l_lotus,440,100 ; Draw the image!
DrawImage l_mastra,500,100 ; Draw the image!
DrawImage l_mclaren,560,100 ; Draw the image!
DrawImage l_minardi,20,160 ; Draw the image!
DrawImage l_prodrive,80,160 ; Draw the image!
DrawImage l_redbull,140,160 ; Draw the image!
DrawImage l_renault,200,160 ; Draw the image!
DrawImage l_software2000,260,160 ; Draw the image!
DrawImage l_spyker,320,160 ; Draw the image!
DrawImage l_stratec,380,160 ; Draw the image!
DrawImage l_superaguri,440,160 ; Draw the image!
DrawImage l_tororosso,500,160 ; Draw the image!
DrawImage l_toyota,560,160 ; Draw the image!
DrawImage l_williams,20,240 ; Draw the image!




DrawImage button_exit,20,575; Draw Image


;Draw_Mouse-->Position muss hier sein, damit es im obersten Layer steht
DrawImage gfxMouse,MouseX(),MouseY()

Flip ; flip the image into view and clear the back buffer
Until KeyHit(1)
Return




Wieso geht dass dann nicht?

Ich weiß, der Code ist jetzt schon unübersichtlich, aber ich hab jetzt auch schon viel dran rumgebastelt und probiert wie ich wieder in die Startauswahl komme

TheMatrix

BeitragFr, Okt 06, 2006 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Kp, aber ich weiß schonmal, das du Buttons, vor dem Repeat befehl laden musst, sonst lädst du bei jedem Durchgang der Schleife die Bilder neu, was irgendwann den Speicher sprengt Wink
°_° °.° °~° °v° .. -.-
 

antome

!!! gesperrt !!!

BeitragFr, Okt 06, 2006 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Proramm ist auch ansonnsten unsinnig eingeteilt, man macht keine Subroutinen in denen etwas solange geladen wird in einer Schleife und beendet die Schleife mit einem KeyHit.

Mach Lade Speicher -Routinen in Funktionen und beende sie wenn EOF erreicht ist oder eine festgelegte Anzahl Datenblöcke geladen oder gespeichert ist.


Ansonnsten hab ich dir das oben schon gezeigt zu kommst mit einem Return zurück.
antome

Schranz0r

BeitragFr, Okt 06, 2006 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Machs so wie DerHase es gesagt hat, ist die schönste, und sauberste Lösung, ohne einen Codewirrwar zu bekommen.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!HAUPTSACH et kost VIEL!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 

hotzenwaldsepp

BeitragFr, Okt 06, 2006 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
ich wollte eigentlich nur wissen warum ich mit dem Goto Befehl nicht wieder auf .start springen kann.

Ich weiß das das ganze ziemlich lausig ist. Ich befinde mich auf dem Wege der Besserung.

TheMatrix

BeitragFr, Okt 06, 2006 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist dir schonmal aufgefallen, dass dein "Back"-Button garnicht im Bildschirmbereich ist?

Code: [AUSKLAPPEN]

...
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_exit,20,575,0) And mh=1 Then exit_game = 2


x=20 : y=575. Wie willst du den da bitte anklicken wenn graphics 640,480 is?
°_° °.° °~° °v° .. -.-

BladeRunner

Moderator

BeitragFr, Okt 06, 2006 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Lass dein Programm mal mit Debugger laufen, vielleicht fällt Dir dann ja was auf...
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

hotzenwaldsepp

BeitragDi, Okt 17, 2006 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab jetzt einiges ein wenig aufgeräumt und das Gosub bzw. Goto geht teilweise auch. Nur wenn ich beispielsweise von ".start_mit_teamauswahl" mit F1 wieder ins ".start_menu" wechseln will (per goto), dann springt er nur ins ".newgame_menu".

Code: [AUSKLAPPEN]


HidePointer ;Windows Mauszeiger wird versteckt

; Declare a variable to hold the graphic file handle


; Set a graphics mode
Graphics 800,600,16,2
 

AppTitle "F1 Grand Prix Manager"


; Set drawing operations for double buffering
SetBuffer BackBuffer()
Global mh=0

button_newgame=LoadImage("button1_gfx\newgame.bmp")
button_newgame_o=LoadImage("button1_gfx\newgame_o.bmp");for Mouseover
button_loadgame=LoadImage("button1_gfx\loadgame.bmp")
button_loadgame_o=LoadImage("button1_gfx\loadgame_o.bmp");for Mouseover
button_newgame_karr=LoadImage("button1_gfx\newgame_karr.bmp")
button_newgame_karr_o=LoadImage("button1_gfx\newgame_karr_o.bmp");for Mouseover
button_newgame_ausw=LoadImage("button1_gfx\newgame_ausw.bmp")
button_newgame_ausw_o=LoadImage("button1_gfx\newgame_ausw_o.bmp")
button_exit=LoadImage("button1_gfx\exit.bmp")
button_exit_o=LoadImage("button1_gfx\exit_o.bmp"); for Mouseover
gfxMouse=LoadImage("misc_gfx\Mouse.bmp")


.start_menu

Repeat
mh = MouseHit(1)
Cls ; clear the screen

DrawImage button_newgame,580,100 ; Draw the image!
DrawImage button_loadgame,580,150 ; Draw the image!
DrawImage button_exit,20,575; Draw Image


 
;**************************Auswahl_Abfrage**********************************************************
;Newgame_abfrage
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame,580,100,0) DrawImage button_newgame_o,580,100; Mouse_Over
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame,580,100,0) And mh=0 Then newgame=0 Else   
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame,580,100,0) And mh=1 Then newgame = 1   


;Loadgaem_abfrage
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_loadgame,580,150,0) DrawImage button_loadgame_o,580,150; Mouse_Over
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_loadgame,580,150,0) And mh=0 Then loadgame=0 Else
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_loadgame,580,150,0) And mh=1 Then loadgame = 1 

;Exit_abfrage
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_exit,20,575,0) DrawImage button_exit_o,20,575; Mouse_Over
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_exit,20,575,0) And mh=0 Then exit_game=0 Else
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_exit,20,575,0) And mh=1 Then exit_game = 1   

;Draw_Mouse-->Position muss hier sein, damit es im obersten Layer steht
DrawImage gfxMouse,MouseX(),MouseY()
;***************************************Durchführung der Auswahl***********************************
If newgame=1 Then Gosub newgame_menu Else
If loadgame=1 Then Gosub loadgame_menu Else
If exit_game=1 Then Exit Else






Print newgame
Print exitgame
Flip ; flip the image into view and clear the back buffer
Until KeyHit (1)
End




.newgame_menu
Repeat
Cls
mh = MouseHit(1);Abfrage Mousehit





DrawImage button_newgame_karr,580,100 ; Draw the image!
DrawImage button_newgame_ausw,580,150 ; Draw the image!
DrawImage button_exit,20,575; Draw Image

DrawImage gfxMouse,MouseX(),MouseY()

;Karriere Abfrage
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame_karr,580,100,0) DrawImage button_newgame_karr_o,580,100;Mouseover      
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame_karr,580,100,0) And mh=0 Then newgame_karr =0 Else   
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame_karr,580,100,0) And mh=1 Then newgame_karr = 1

;Teamauswahl Abfrage
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame_ausw_o,580,150,0) DrawImage button_newgame_ausw_o,580,150
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame_ausw,580,150,0) And mh=0 Then newgame_ausw=0 Else
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_newgame_ausw,580,150,0) And mh=1 Then newgame_ausw = 1

;Exit_abfrage
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_exit,20,575,0) DrawImage button_exit_o,20,575; Mouse_Over
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_exit,20,575,0) And mh=0 Then exit_game=0 Else
If ImagesCollide(gfxMouse,MouseX(),MouseY(),0,button_exit,20,575,0) And mh=1 Then exit_game = 1   


;Draw_Mouse-->Position muss hier sein, damit es im obersten Layer steht
DrawImage gfxMouse,MouseX(),MouseY()

If newgame_karr=1 Then Print"karr" Else

If newgame_ausw=1 Then Gosub start_mit_teamauswahl Else


If exit_game=1 Then Exit



Flip ; flip the image into view and clear the back buffer





 

Print"newgame"
If KeyHit (59) Then Return
Until KeyHit(1)
End


.loadgame_menu
Repeat
Cls
Print"loadgame"
If KeyHit (59) Then Return 
Until KeyHit(1)
End





.start_mit_teamauswahl
Repeat
Cls
Print"start_mit_teamauswahl"
If KeyHit (59) Then Goto start_menu


Until KeyHit(1)
End

Until KeyHit(1)
 

antome

!!! gesperrt !!!

BeitragDi, Okt 17, 2006 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Return springt dahin zurück von wo du mit GoSub reingesprungen bist.
antome
 

hotzenwaldsepp

BeitragDi, Okt 17, 2006 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab Return gar nicht ausgeführt sondern mit F1
Code: [AUSKLAPPEN]
If KeyHit (59) Then Goto start_menu

BladeRunner

Moderator

BeitragDi, Okt 17, 2006 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
sowas nennt man Spaghetticode. War schon auf dem Cevi hässlich und ist es hier genauso. Weshalb ? Weil es eben unübersichtlich ist und man ruckzuck den Überblick über Variablen (und damit eventuelle Sprungziele etc.) verliert.
Ich kann Dir nur raten diesen Mischmasch sein zu lassen und auf Functions umzusteigen.
Solltst Du das nicht wollen, empfehle ich ein zweites mal den Debugger zu bemühen und das Programm Schritt für Schritt auszuführen. Wahrscheinlich ist irgendwo ne Variable noch gesetzt die den Code automatisch weiterverzweigen lässt.
Ich persönlich tu mir den Wirrwar mal nicht an.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

antome

!!! gesperrt !!!

BeitragMi, Okt 18, 2006 10:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst ein Return benutzen wenn du mit Gosub in eine Unterroutine gesprungen bist, wenn du aus dieser nun mit Goto woanders hin springst und dort ein Return einsetzt wird eben dieses Return dich zu deinem letzen Gosub-Punkt zurückbefördern.
antome
 

hotzenwaldsepp

BeitragMi, Okt 18, 2006 12:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
antome
Verfasst am: Mi Okt 18, 2006 10:30 am
Du musst ein Return benutzen wenn du mit Gosub in eine Unterroutine gesprungen bist, wenn du aus dieser nun mit Goto woanders hin springst und dort ein Return einsetzt wird eben dieses Return dich zu deinem letzen Gosub-Punkt zurückbefördern.


Das hab ich kapiert, nur dass dummerweise in ".start_menu" gar kein Return vorkommt .

Hab hier leider keinen Debugger bei der Testversion.
 

antome

!!! gesperrt !!!

BeitragMi, Okt 18, 2006 13:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast den Überblick verloren
ausserdem drückst du immer die selben Tasten um irgendwo rauszuspringen, das ist alles total unübersichtlich.
Benutze am besten erstmal gar kein Goto nur Gosub und Return oder Funktionen wenn du dir sowas angwöhnst wirst du irgendwann das Handtuch werfen weil du nicht mehr durchblickst.

Ich verwende Goto zwar auch ab und zu, aber nur wenn es unbedingt nötig ist.

Ausserdem hast du Subroutinen innerhalb einer Subroutine -> .newgame_menu
antome

DerHase

BeitragMi, Okt 18, 2006 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Es könnte eventuel daran liegen, dass new_game nicht auf 0 gesetzt wird.
Ich rate Dir aber den ganzen Code neu zu schreiben und Select Case und Funktionen zu verwenden. Alles ist bei Dir doppelt und dreifach verwendet. Den Flip befehl brauchst Du izum Beispiel in einem Programm im Allgemeinen ein einziges mal schreiben. Dies macht auch Sinn, denn wenn Du etwas diesem Flip hinzufügen willst, z.B. irgendeinen Timer oder einen vSync musst Du dies nur einmal machen. In Deinem Code aber musst Du erst alle Flips suchen und dann mühsam die Veränderung bei jedem einfügen. Auch die dreimaligen ImageCollide Abfragen solltest Du Dir sparen. Man kann natürlich alles so lösen, nur wird es für den Programmierer sehr unübersichtlich und eine Fehlersuche zur Qual.
Play Satyr!
 

hotzenwaldsepp

BeitragMi, Okt 18, 2006 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke !!! Very Happy newgame war tatsächlich nicht auf 0 gesetzt.
Du hast schon recht, der Code ist tatsächlich etwas unübersichtlich. Ich werd mich mal ranmachen und das ganze mit Funktionen und Select Case zu versuchen.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group