Probleme mit Programmstruktur eines Brettspiels
Übersicht

neoleinBetreff: Probleme mit Programmstruktur eines Brettspiels |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Z.b. Mit Goto o.ä. ![]() |
||
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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). |
||
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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. ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
neolein |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank, habe Leer schon verworfen- warum einfach, wenns auch kompliziert geht ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
if?
if bedingung=erfüllt Schleife endif so in der art... |
||
neolein |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group