Spiel des Lebens

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Sephka

Betreff: Spiel des Lebens

BeitragDi, Jul 19, 2011 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mal gestern das Spiel des Lebens geproggt da ich schon einige Beispiele gesehn hab.
Komischerweiße ist bei mir nach kurzer Zeit alles voller Zellen...
Hier der Code:
Code: [AUSKLAPPEN]
Graphics 1024,768,0,2

SetBuffer BackBuffer()
SeedRnd MilliSecs()

;###################
Global Size% = 3
Global Raster% = 3
Global DIMG = 199
Dim Felder(DIMG+1,DIMG+1)   
For n=0 To (Dimg/3)^2   ;<----spielt hierdran rum um die Dichte der Startzellen zu verändern!
     
felder(Rand(1,DIMG),Rand(1,DIMG))=1
Next
     



;#######MAIN


Repeat
Cls

For x=0 To DIMG
 For y=0 To DIMG
If Felder(x,y) = 1 Then Color 255,255,255:Rect x*Raster,y*Raster,size,size
 Next
Next



;Nächste Generation
For x=0 To DIMG
 For y=0 To DIMG

If Felder(x,y) = 0 And AnzahlNachbarn(x,y) = 3 Then Felder(x,y) = 1:Goto End ;Neue Zelle


If Felder(x,y) = 1 And AnzahlNachbarn(x,y) < 2 Then Felder(x,y) = 0 ;Einsamkeit

If Felder(x,y) = 1 And AnzahlNachbarn(x,y) > 3 Then Felder(x,y) = 0 ;Überbevölkerung
.End
 Next
Next


Flip
Until KeyHit(1)
End

Function AnzahlNachbarn(Zx,Zy)
Local N%
If Zx<DIMG Then If Felder(Zx+1,Zy) = 1 Then N=N+1
If Zx>0 Then If Felder(Zx-1,Zy) = 1 Then N=N+1
If Zy<DIMG Then If Felder(Zx,Zy+1) = 1 Then N=N+1
If Zy>0 Then If Felder(Zx,Zy-1) = 1 Then N=N+1
If Zx<DIMG And Zy<DIMG Then If Felder(Zx+1,Zy+1) = 1 Then N=N+1
If Zy>0 And Zx<DIMG Then If Felder(Zx+1,Zy-1) = 1 Then N=N+1
If Zx>0 Then If Felder(Zx-1,Zy+1) = 1 Then N=N+1
If Zx>0 And Zy>0 Then If Felder(Zx-1,Zy-1) = 1 Then N=N+1


Return N
End Function


Danke schonmal im Vorraus...
Mein Freund und Helfer:
Win7 Home Premium SP1
AMD Athlon II X4 645 3.1GHZ
8GB Ram
64bit

Xeres

Moderator

BeitragDi, Jul 19, 2011 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Spiel des Lebens <> Conway's Game of Life
Um die nächste Generation zu berechnen, brauchst du ein zweites Feld oder eine weitere Dimension, ansonsten kannst du die Nachbarn nicht richtig berechnen, da du ja schon Nachbarn löschst/hinzufügst die für die nächste Zelle von Bedeutung sind.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Midimaster

BeitragDi, Jul 19, 2011 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gäbe auch eine Möglichkeit, die ohne zweites Feld auskommt:

Setze die neuen (Kinder) nicht als "1" sondern zunächst als "2" in dein Feld ein.

Unmittelbar vor dem FLIP gehts Du dan das gesamte Feld nochmal durch und ersetzt alle "2"er durch "1"er.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group