Spiel des Lebens
Übersicht

![]() |
SmilyBetreff: Spiel des Lebens |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich habe mal aus langer weile versucht, das Konzept vom "Spiel des Lebens" von Conway in Blitzbasic umzusetzen, und dabei ist das Rausgekommen ^^ Für die, die es noch nicht kennen hier eine kleine Übersicht wie es funktioniert: Man hat eine 2-Dimensionale Matrix, In der jedes Feld eine Zelle Symbolisiert, welche entweder tod oder lebendig sein kann. Anfangs werden erstmal willkürlich ein paar Lebende Zellen festgelegt, der Rest ist tod. Damit hätten wir erstmal die Erste Genaration. Jede Zelle hat 8 Nachbar-zellen. Wenn eine Tode Zelle genau 3 Lebende Nachbarzellen hat, wird sie neugeboren, also ihr zustand wird auf lebend gesetzt. Wenn eine Lebende Zelle weniger als Lebende Nachbarzellen hat, stirbt sie aus Einsamkeit. Wenn eine Lebende Zelle mehr als 3 Nachbarn hat stirbt sie auch aufgrund der Überbevölkerung. Wenn Sämtliche Zellen auf diese Weise überprüft wurden hat man nun die 2. Generation. Beim Nächsten Durchlauf ist es die Dritte usw. Soweit zur Theorie. Und hier ist der Code Code: [AUSKLAPPEN] SX = 100
SY = 100 FeldS = 10 AppTitle "Spiel des Lebens" Dim World(SX,SY) Dim Oldworld(SX,SY) Local born[9] Local keepallive[9] keepallive[2]=1 keepallive[3]=1 born[3]=1 Graphics (SX+1)*FeldS,(SY+1)*FeldS,16,2 ClsColor 255,255,255 Color 0,0,0 Repeat Cls For X = 0 To SY Line X*FeldS,0,X*FeldS,(SY+1)*FeldS Next For Y = 0 To SY Line 0,Y*FeldS,(SX+1)*FeldS,Y*FeldS Next For X = 0 To Sx For Y = 0 To SY If RectsOverlap(X*FeldS,Y*FeldS,FeldS,feldS,MouseX(),MouseY(),1,1) Color 255,0,0 Rect X*FeldS,Y*FeldS,FeldS+1,FeldS+1,0 Color 0,0,0 If MouseHit(1) Then world(X,Y) = World(X,Y) Xor 1 End If If World(X,Y) = 1 Then Oval X*FeldS+2,Y*FeldS+2,feldS-4,FeldS-4 OldWorld(X,Y) = World(X,Y) Next Next If KeyHit(57) Or KeyDown(28) allive = 0 For X = 0 To SX For Y = 0 To SY Count = 0 For DX = -1 To 1 For DY = -1 To 1 If DX Or DY <> 0 NewX = X+DX NewY = Y+DY If NewX < 0 Then newX = SX If NewX > SX Then NewX = 0 If NewY < 0 Then newY = SY If NewY > SY Then NewY = 0 If oldworld(NewX,NewY) = 1 Then Count = Count + 1 End If Next Next world(x,y) = 0 If oldworld(x,y) = 1 Then If keepallive[count] Then world(x,y) = 1:allive = allive + 1 Else If born[count] Then world(X,Y) = 1: allive = allive + 1 EndIf Next Next ; Print allive End If If KeyHit(46) For X = 0 To SX For Y = 0 To SY World(X,Y) = 0 Next Next End If If KeyHit(19) For X = 0 To SX For Y = 0 To SY If Rand(0,1) = 1 Then World(X,Y) = 1 Next Next End If Flip Until KeyHit(1) Mit der Leertaste kann man zur nächsten Generation springen. Mit Enter kann man sich die Entwicklung über einen Längeren Zeitraum ansehen. Mit R Wird das Feld zufällig mit Punkten gefüllt Mit C Wird das Feld komplett gefüllt Es gibt einige formationen, welche sich recht interresant weiterentwickeln. Ganz ansehlich ist zum Beispiel auch der Glider, dieser bewegt sich auf dem Spiel Feld fort: [ ] [o] [ ] [ ] [ ] [o] [o] [o] [o] Das Spielfeld in meinem Beispielcode ist ein Torus-förmiges und es wird nach dem in den oben beschriebenen 23/3 Regelwerk gespielt. Allerdings ist der Code so ausgelegt, dass es kein Problem sein dürfte dies zu ändern, falls sich jemand weiter damit beschäftigen will. Der Code war übrigens mein erster Ansatz, es ist also noch nicht Perfekt ^^ Gruß, Smily0412 |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
Spikespine |
![]() Antworten mit Zitat ![]() |
---|---|---|
hallo,
nächstesmal bitte ql:Setbuffer ql:BackBuffer () einbauen, vermeidet Augenkrebs ![]() übrigens gab es das schonmal: https://www.blitzforum.de/foru...light=life |
||
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
An den Backbuffer hatte ich nicht gedacht, da ich mit b+ arbeite und das dort eigentlich entfällt ^^
Und wenn ich mir so einen Kommentar mal erlauben darf: imho ist mein Code etwas besser als der andere. Mein Programm sieht Grafisch besser aus und ist auch etwas Flexibler. |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group