Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

game of life

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 14.09.2008, 16:17    Titel: game of life Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 14.09.2008, 16:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 14.09.2008, 19:11    Titel: Antworten mit Zitat

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 zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 14.09.2008, 19:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 14.09.2008, 19:29    Titel: Antworten mit Zitat

ich wollte nicht wissen was eine schleife ist
ich wollte wissen wofür das br und das ho stehen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 14.09.2008, 19:37    Titel: Antworten mit Zitat

br=breite...
ho=höhe...
logisch? zwinkern
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 14.09.2008, 19:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 14.09.2008, 19:42    Titel: Antworten mit Zitat

ja das meinte ich

vielen dank zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz