Probleme mit Programmstruktur eines Brettspiels

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

neolein

Betreff: Probleme mit Programmstruktur eines Brettspiels

BeitragDi, Aug 21, 2007 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
mein erstes Posting an alle erweiterten Beginner oder Fortgeschrittenen. Ich habe mich ganz gut in BB eingarbeitet und befinde mich im Moment bei der Programmierung eines Brettspiels.
Ganz kurz zur Programmstruktur:

1.Am Anfang des Hauptteils steht For Runde = 1 to 60 (also 60 Runden)
Zwischen dem For…..Next soll das ganze Programm stehen

2. Hinter For… steht „Leer“ (Function): Maus bewegt sich über dem Feld bis ich klicke: (Function Leer() - Repeat...etc. – EoF).)

3.Sobald ich die Maus klicke (Programm läuft bei „Leer“ weiter) läuft ein Programmteil ab in mehreren For...Next Schleifen ab, die Select/Case Befehle enthalten.

4. sobald dieser Teil beendet ist, oder Case bestimmte Bedingungen erfüllt soll das Programm wieder in die Warteschleife, bis die Maus aktiviert wird, und das 60x.

Das hört sich sicherlich nun sehr einfach an, vielleicht ist es das auch für geübte Programmierer, das Problem ist, wie komme ich von der Function Leer wieder zum Programmteil bei 2. Denn nach EoF kehrt das Programm wieder an die Stelle zurück, wo es bei „Leer“ verlassen wurde.
- sollte ich in die Function vor EoF ‚Gosub’ einbauen, was mich zu 2. führt und die For…..Next Schleife weglassen?

Ich hoffe mein Problem verständlich umrissen zu haben. Vielen Dank für Lösungen.
Christian
 

Tombi

BeitragDi, Aug 21, 2007 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Z.b. Mit Goto o.ä. Confused

aMul

Sieger des Minimalist Compo 01/13

BeitragDi, Aug 21, 2007 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wäre es mit einer While/Repeat-Schleife?
Die kannst du so lange laufen lassen, bis der Spieler keine Lust mehr hat. Die aktuelle Runde speicherst du in einer Variable. Und wenn die Variable 60 erreicht hat setzt du sie wieder auf 0 zurück und stellst das ursprüngliche Spielfeld wieder her.

@Tombi:
Goto sollte man vermeiden. das führt nur zu unübersichtlichen Quelltexten. Und die kann man sich bei größereren Projekten nicht leisten Wink
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver
 

neolein

BeitragDi, Aug 21, 2007 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, meinst du While.....Wend statt Function? Hatte ich schon drin, ich möchte aber aus einer beliebigen Stelle im Programm in die Warteschleife, ich könnte in die Function While.......Wend statt Repeat........Until verwenden, kommt aber so ziemlich aufs Gleiche raus.
Zur Erklärung ich habe das Feld dimensioniert (Dim Feld (8,8))
Sinn des Spiels ist es das Feld mit Steinen zu füllen, am Anfang sind schon 4 vorhanden (fehlen also noch 60, darum 60 Runden).

aMul

Sieger des Minimalist Compo 01/13

BeitragDi, Aug 21, 2007 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meinte While anstatt der ersten For-Schleife. Damit das Spiel nach Runde 60 nicht beendet wird.
Ich weiß nicht ob ich das jetzt richtig verstanden habe, aber ist dein Problem, dass du aus der For-Schleife raus willst?
Wenn ja, dann kannst du einfach Exit() benutzen.
Wenn nein, dann musst du das nochmal genauer erklären oder warten bis jemand anders dir helfen kann...
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver
 

neolein

BeitragDi, Aug 21, 2007 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, ich will die gesamten 60 Runden (60 Runden bedeutet 1 Spiel) in der For...Next Schleife bleiben, jedoch am Anfang einer jeden Runde die Fuction "Leer" aufrufen.
Wenn das die Maus gedrückt wird, läuft Runde 2 usw.
In der großen For... Next Schleife sind diverse kleine For...Next Schleifen, die wiederum den Select Case Befehl enthalten.
Bei case 0 z.B. soll das Programm an den Anfang der großen Schleife, wo wiederum die Function Leer wartet.
Diese Function möchte ich aber schon hinter das case setzen: "case 0 Leer" und nach Durchlauf der Function soll das Prog and en Anfang der großen Schleife; echt schwer zu beschreiben Laughing
 

Dreamora

BeitragDi, Aug 21, 2007 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Am besten strukturierst du das ganze ein wenig um.
Aktuell scheinst du es möglichst kompliziert verschachteln zu wollen, nur damit die For - Next mit den 60 Loops möglichst leer bleibt.

Es ist nicht immer ratsam noch überhaupt sinnvoll alles auszulagern nur um des auslagerns willen Smile


Um dein Problem noch zu lösen: Was hindert sich daran rekursiv vorzugehen? "leer" kann sich auch selbst aufrufen.


Aber wie gesagt, prinzipiell den tip von aMul integrieren und eine richtige Hauptschleife einbauen die solange loopen kann wie sie will.

Und einfach einen Rundencounter nutzen, wenn der >= 60, dann ist fertig.
Und dieser Counter wird nur erhöht wenn die Runde halt vorbei ist (einfache if abfrage)

dann kannst du deine jetzige struktur nämlich sehr viel simpler gestalten. Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

neolein

BeitragMi, Aug 22, 2007 8:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank, habe Leer schon verworfen- warum einfach, wenns auch kompliziert geht Rolling Eyes ; das mit dem Runde>60 ist eine gute Idee.
Folgendes Problem bleibt aber immer noch:

Es müssen exakt 8 For/Next Schleifen in einer Runde durchlaufen werden; dazwischen wird immer eine Bedingung abgefragt, sollte diese nicht erfüllt sein, soll die Schleife übersprungen werden, dafür würde sich GOTO (nächste Schleife) eignen, was ich aber nur ungerne benutze. GOSUB (nächste Schleife.......Return) eignet sich wohl auch kaum. Was würde sich hier am Besten anbieten? Danke

Silver_Knee

BeitragMi, Aug 22, 2007 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
if?

if bedingung=erfüllt
Schleife
endif

so in der art...
 

neolein

BeitragMi, Aug 22, 2007 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Eher so:

If x <> Bedingung, gehe zur 2. Schleife (oder 3. usw.)

1.For....
Code1
Next

2.For....
Code2
Next

3.For....
Code3
Next

Wenn z.B. in Schleife 1. EXIT steht, springt das Prog zur 2. Schleife?

Danke

aMul

Sieger des Minimalist Compo 01/13

BeitragMi, Aug 22, 2007 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, tut es. Es werden alle Befehle nacheinander abgearbeitet.
Und wenn du aus Schleife 1 rausgehst, ist logischerweise als nächstes Schleife 2 dran.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group