2 Procedures als Hauptcode!

Anfängerfragen zum Programmieren mit PureBasic.
D4uS1
Beiträge: 268
Registriert: 02.09.2006 12:16

2 Procedures als Hauptcode!

Beitrag von D4uS1 »

Folgendes Problem. Der Code des Spiels was ich programieren möchte hat mittlerweile ca 900 Zeilen. Diesen hier zu zeigen wäre also schwachsinnig. Deshalb versuche ich es in Worten auszudrücken. Ich habe 2 Proceduren. Einmal das Menü, und einmal das Spiel. Wenn ein Spiel gestartet wird beendet sich das Menü und das Spiel startet, soweit ist alles klar. Wenn man im Spiel ist soll beim drücken von Esc das Menü wieder aktiv werden. Das kapiert der PC auch noch. Aber wenn das der Fall war und ich möchte das Spiel fortsetzen oder neu starten, dann beendet der das gesamte Programm und sieht die Programmausführung als abgeschlossen.

Im Code sieht das Grob so aus:

Code: Alles auswählen

If Menu = 1
Spiel = 0
Menu()
EndIf
If Spiel = 1
Menu = 0
Spiel()
EndIf
Was ist daran falsch das der beim fortsetzen oder neustarten des Spiel beendet. Danke im voraus.
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Variable Spiel und Menu Global?

Wird im Menu() die Variable Spiel wieder auf 1 gesetzt?
Ein fortsetzen ist so nicht möglich da die Procedure ja neu gestartet wird.
Bei beenden der Procedure werden alle Variablen die in der Procedure angelegt werden (ausser Static) wieder freigeräumt.

Vielleicht mit Threads arbeiten.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nuja, es liegt vielleicht daran, dass du keinen rücksprung drin hast.
normalerweise hat man ne hauptschleife, die nur bei nem echten exit verlassen wird.

so in dem tenor:

Code: Alles auswählen

Repeat
  ExamineMouse()
  ExamineKeyboard()
  Select Status
    Case Intro
      NextIntroFrame()
      If KeyboardPushed(#PB_Key_Space) Or KeyboardPushed(#PB_Key_Escape) Or MouseButton(1)
        Status = Menu
      EndIf
    Case Menu
      DisplayMenu()
      Select MenuButton
        Case Game
          Status = Game
        Case Exit
          EXIT = 1
      EndSelect
    Case Game
      NextGameFrame()
      If BackToMenu()
        Status = Menu
      EndIf
  EndSelect
Until EXIT = 1
das ganze soll nur mal den grundgedanken zeigen.
und außerdem ist alles eine frage des stils, andere progger strukturieren sowas anders,
man kann auch drei getrennte mainloops für intro, menu und game machen.....
is im endeffekt banane...

wenn du getrennte abschnitte hast, musst du dafür sorgen,
dass das proggi ZURÜCKSPRINGT zu dem Menu-Abschnitt,
wenn du den Game-Abschnitt beendest.
das ist der Kernpunkt, egal wie du das löst.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
D4uS1
Beiträge: 268
Registriert: 02.09.2006 12:16

Beitrag von D4uS1 »

Ok danke, ich hab das Problem dann jetzt anders gelöst und hab anstelle der Proceduren alles unter eine Schleife gepackt und Variablen nach dem Thema benannt.

Code: Alles auswählen


 Menu = 1

Repeat
ExamineKeyboard()

If Menu = 1

  Spiel = 0

  BlaBlaBla
  BildBildBild
  AblaufAblauf
  usw

 If Keyboardpushed(1)
  Spiel = 1
 endif

endif


If Spiel = 1

  Menu = 0


  BlaBlaBla
  BildBildBild
  AblaufAblauf
  usw.

 If Keyboardpushed(1)
  Menu  = 1
 endif

endif

Until Beenden = 1
Antworten