 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
qbay
Anmeldungsdatum: 08.06.2008 Beiträge: 84
|
Verfasst am: 14.09.2008, 16:17 Titel: game of life |
|
|
hallo
also ihr kennt doch sicher alle das "Game of Life"
ich wollte wissen wie man es in QBASIC hinkriegt
das nachdem sagen wir mal 100 Felder in zufälliger haufigkeit und zufälliger Anordnung "gefüllt" wurden sie sich gegenseitig beeinflussen.
Also z.B. wenn ein Feld das "leer" ist aber von drei "vollen" Nachbarn umzingelt ist selber "gefüllt" wird, usw. |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 14.09.2008, 16:51 Titel: |
|
|
Hallo
Für ein "Game of Life" erstellst du zwei gleiche Arrays, eins für die aktuelle Belegung des Spielfeldes, ein zweites für die nächste. Zu Beginn setzt du beliebig "Zellen" in das erste Array. Dann prüfst du in jeder Runde alle Feldelemente des ersten Arrays auf die Zahl seiner besetzten Nachbarfelder und setzt bzw. löscht das Element im anderen Array für die nächste Runde. Hast du das für alle Elemente gemacht, kopierst du einfach das zweite in das erste Array und dann immer so weiter.
In der Regel macht man es dabei so, dass der linke Rand wieder an den rechten anschließt und umgekehrt und das Gleiche mit dem oberen und unteren Rand.
EDIT: Hier ein kleines Beispiel:
Code: | SCREEN 12
CLS
DEFINT A-Z
br = 40 'Breite des Spielfelds
ho = 30 'Hoehe des Spielfelds
startzahl = 500 'Anzahl der beim Start belegten Zellen
DIM aktuell(1 TO br, 1 TO ho)
DIM naechste(1 TO br, 1 TO ho)
RANDOMIZE TIMER
FOR a = 1 TO br 'Spielfeld zeichnen
x = (a - 1) * 10 + 20
FOR B = 1 TO ho
y = (B - 1) * 10 + 20
LINE (x, y)-(x + 10, y + 10), 7, B
NEXT
NEXT
PRINT "Runde:"
FOR z = 1 TO startzahl 'Anfangszellen zufaellig setzen
DO
a = FIX(RND * br) + 1
B = FIX(RND * ho) + 1
LOOP WHILE aktuell(a, B) = 1
aktuell(a, B) = 1
x = (a - 1) * 10 + 21
y = (B - 1) * 10 + 21
LINE (x, y)-(x + 8, y + 8), 2 * aktuell(a, B), BF
NEXT
DO 'Hauptschleife
FOR a = 1 TO br
FOR B = 1 TO ho
nachbarn = 0
FOR anachbar = -1 TO 1 'Nachbarfelder pruefen
FOR bnachbar = -1 TO 1
IF (anachbar <> 0) OR (bnachbar <> 0) THEN
atest = a + anachbar
IF atest = 0 THEN atest = br
IF atest = br + 1 THEN atest = 1
btest = B + bnachbar
IF btest = 0 THEN btest = ho
IF btest = ho + 1 THEN btest = 1
nachbarn = nachbarn + aktuell(atest, btest)
END IF
NEXT
NEXT
SELECT CASE nachbarn
CASE 2
naechste(a, B) = aktuell(a, B) 'Bei 2 Nachbarn bleibt das Feld wie es ist
CASE 3
naechste(a, B) = 1 'Bei 3 Nachbarn wird eine Zelle geboren
CASE ELSE
naechste(a, B) = 0 'Ansonsten stirbt die Zelle
END SELECT
NEXT
NEXT
FOR a = 1 TO br 'Das neue Array in das alte kopieren
x = (a - 1) * 10 + 21
FOR B = 1 TO ho
y = (B - 1) * 10 + 21
aktuell(a, B) = naechste(a, B)
LINE (x, y)-(x + 8, y + 8), 2 * aktuell(a, B), BF 'und zeichnen
NEXT
NEXT
runde = runde + 1
LOCATE 1, 7
PRINT runde
LOOP WHILE INKEY$ = "" 'Ende mit einer Beliebigen Taste |
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de !
Zuletzt bearbeitet von Skilltronic am 13.11.2008, 00:41, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
 |
qbay
Anmeldungsdatum: 08.06.2008 Beiträge: 84
|
Verfasst am: 14.09.2008, 19:11 Titel: |
|
|
vielen dank erstmal
aber ich hätte da noch eine frage
die Befehle in der ersten und in der zweiten Zeile
FOR a = 1 TO br
und
FOR b = 1 TO ho
was genau macht es?
gruss  |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 14.09.2008, 19:21 Titel: |
|
|
Wenn du schon nachfragen musst, was eine FOR-Schleife ist, solltest du dir vielleicht erst einmal ein paar Tutorials durchlesen... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
qbay
Anmeldungsdatum: 08.06.2008 Beiträge: 84
|
Verfasst am: 14.09.2008, 19:29 Titel: |
|
|
ich wollte nicht wissen was eine schleife ist
ich wollte wissen wofür das br und das ho stehen |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 14.09.2008, 19:37 Titel: |
|
|
br=breite...
ho=höhe...
logisch?  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 14.09.2008, 19:41 Titel: |
|
|
Hallo nochmal,
ich habe gerade gemerkt, dass ich beim Kopieren des Codes die ersten Zeilen vergessen hatte. Habe ich nun noch eingefügt, siehe oben. Da steht auch, was br und ho bedeutet...
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
qbay
Anmeldungsdatum: 08.06.2008 Beiträge: 84
|
Verfasst am: 14.09.2008, 19:42 Titel: |
|
|
ja das meinte ich
vielen dank  |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|