John Conway's "Game of Life"

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Waveblue

Betreff: John Conway's "Game of Life"

BeitragMi, Sep 26, 2007 23:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.

Ich hab heut in einer Zeitung von dem "Game of Life" gelesen:

Man nimmt ein Go-Brett (ein gekacheltes Brett) und platziert darauf ein paar Steine, die "Zellen".

Nun geht es wie folgt:

1. wenn 3 Zellen an ein leeres Feld angrenzen, erzeugen sie dort eine neue Zelle

2. Einsame Zellen sterben. Grenzen weniger als 2 Zellen an eine Zelle an, wird sie entfernt.

3.Zellen die in der Menge untergehen werden ebenfalls entfernt. Grenzen mehr als 3 Zellen an, wird sie gelöscht.

Nach diesen einfachen Regeln entsteht nun eine Art Mikrokosmos.
Sie erinnert allerdings mehr an einen Weltraum, man kann dort kleine Raumschiffe, Pulsare und mehr solches Zeug sehen. Very Happy

Ich hab aus reiner Neugierde dazu mal einen Code geschrieben.
Ich finds faszinierend.
Falls jemand einen Verbesserungsvorschlag hat, einfach posten bitte^^



Code: [AUSKLAPPEN]

Graphics 1024,768,32

SetBuffer BackBuffer()










Const dimens=200      ;<-----------Diesen Wert verändern um die Rasterung des Feldes zu verändern!






;Zwischenspeicher-Types

Type zellenhinzu
   Field x,y
End Type


Type zellenweg
   Field x,y
End Type




SeedRnd(MilliSecs())



Dim feld (dimens+1,dimens+1)



Global n
Global zellehinzu.zellenhinzu
Global zelleweg.zellenweg



Local x,y






   
For n=0 To (dimens/3)^2         ;<----spielt hierdran rum um die Dichte der Startzellen zu verändern!
      
   feld(Rand(1,dimens),Rand(1,dimens))=1
   Next
      
   
   
   
   Repeat
      
      simulation
      zeichne
      
   Until KeyHit(1)
   
   
   
   
   
   


















Function simulation()
   
   Local x,y
   
   
   ; zuerst wird gecheckt, ob neue Zellen entstehen können.
   For x=0 To dimens
      
      For y=0 To dimens
         
         If feld(x,y)=0 Then
            
         
            n=0
            
            If x-1>0 Then If feld(x-1,y)=1 Then n=n+1      ;links
            If x+1<dimens+1 Then If feld(x+1,y)=1 Then n=n+1      ;rechts
            
            If y-1>0 Then If feld(x,y-1)=1 Then n=n+1      ;oben
            If y+1<dimens+1 Then If feld(x,y+1)=1 Then n=n+1      ;unten
            
            If x-1>0 And y-1>0 Then If feld(x-1,y-1)=1 Then n=n+1   ;links oben
            If x+1<dimens+1 And y-1>0 Then If feld(x+1,y-1)=1 Then n=n+1   ;rechts oben
            
            If x-1>0 And y+1<dimens+1 Then If feld(x-1,y+1)=1 Then n=n+1   ;links unten
            If x+1<dimens+1 And y+1<dimens+1 Then If feld(x+1,y+1)=1 Then n=n+1   ;rechts unten
            
            
            
            If n=3 Then neuezelle(x,y)
            
         Else   ;Entfernen armer einsamer Zellen
            
            
            n=0
            
            If x-1>0 Then If feld(x-1,y)=1 Then n=n+1      ;links
            If x+1<dimens+1 Then If feld(x+1,y)=1 Then n=n+1      ;rechts
            
            If y-1>0 Then If feld(x,y-1)=1 Then n=n+1      ;oben
            If y+1<dimens+1 Then If feld(x,y+1)=1 Then n=n+1      ;unten
            
            If x-1>0 And y-1>0 Then If feld(x-1,y-1)=1 Then n=n+1   ;links oben
            If x+1<dimens+1 And y-1>0 Then If feld(x+1,y-1)=1 Then n=n+1   ;rechts oben
            
            If x-1>0 And y+1<dimens+1 Then If feld(x-1,y+1)=1 Then n=n+1   ;links unten
            If x+1<dimens+1 And y+1<dimens+1 Then If feld(x+1,y+1)=1 Then n=n+1   ;rechts unten
            
            
            
            If n<2 Or n>3 Then entfernezelle(x,y)
            
         End If
         
            
      Next
   Next
      
   
   
   For zelleweg=Each zellenweg
      feld(zelleweg\x,zelleweg\y)=0
      Delete zelleweg
   Next
   
   For zellehinzu=Each zellenhinzu
      feld(zellehinzu\x,zellehinzu\y)=1
      Delete zellehinzu
   Next
   
      
   


End Function

   
Function zeichne()
   
   Local x,y
   
   Cls
   
   ;Rect 1,1,700,700,0
   
   
   
   For x=0 To dimens
      
      For y=0 To dimens
         
         If feld(x,y)=1 Then Oval x*700/dimens,y*700/dimens,700/dimens,700/dimens,1
         
      Next
   Next
   
   
   Text 512,740,"John Conway's GAME OF LIFE, coded by Felix Müller aka. Wave",1
   Flip
   
End Function


Function neuezelle(x,y)
   zellehinzu=New zellenhinzu
   zellehinzu\x=x
   zellehinzu\y=y
End Function

Function entfernezelle(x,y)
   zelleweg=New zellenweg
   zelleweg\x=x
   zelleweg\y=y
End Function
This is 10% luck
20% skill
15% concentrated power of will
5% pleasure, 50% pain
and 100% reason to remember the name
  • Zuletzt bearbeitet von Waveblue am Do, Sep 27, 2007 15:51, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragMi, Sep 26, 2007 23:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Nichts hochgradig neues, aber -trotz viel Freifläche im code- gut mit Types umgesetzt, es fehlt aber noch gezielte Benutzereingabe Wink
Nachdem ich mein conway soweit hatte, hab ich auch gleich mit Wireworld weitergemacht - auch sehr interessant, vor allem kann man mit einem genügend großen Aufbau Primzahlen berechnen lassen.
Arrow http://www.quinapalus.com/wi-java.html
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)

Waveblue

BeitragDo, Sep 27, 2007 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres hat Folgendes geschrieben:
Nichts hochgradig neues, aber -trotz viel Freifläche im code- gut mit Types umgesetzt, es fehlt aber noch gezielte Benutzereingabe Wink


Naja, hab aber im Code die Stellen mit Kommentaren markiert, an denen man Einstellungen vornehmen kann. Sieht man nur nicht so gut, wo ist eigentlich das Blitzbasic-Code Feld hin?
This is 10% luck
20% skill
15% concentrated power of will
5% pleasure, 50% pain
and 100% reason to remember the name

Silver_Knee

BeitragDo, Sep 27, 2007 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
da isses doch
BlitzBasic: [AUSKLAPPEN]
 [ syntax="bb" ]  [ /syntax ] 
Print "Hello"

lässt sich nur net ausklappen und von syntaxhighlighting ist auch nix mehr zu sehen

BladeRunner

Moderator

BeitragDo, Sep 27, 2007 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
bb-Syntax wurde wegen massiver Performanceprobleme eingestampft.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Rone

BeitragDo, Sep 27, 2007 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Schick..Schick...

Sowas hab ich auch mal gemacht...allerdings kann man bei mir S/W - Bitmaps für die Anfangsstellung auswählen...werde es nach Feierabend auch mal posten

Smily

BeitragFr, Sep 28, 2007 10:41
Antworten mit Zitat
Benutzer-Profile anzeigen
joa sieht nicht schlecht aus.. vielleich kannst du es ja ausbauen und interaktiver machen.

Ich hatte auch mal einem Spiel des Lebesn gearbeitet.. bei mir sah das ganze so aus:
http://phpprogger.ph.funpic.de/uploads/SDL.zip (ist in Blitzplus gemacht)


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

Tankbuster

BeitragFr, Sep 28, 2007 11:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir ist grad ne Idee gekommen. Das ganze kann man doch auch 3 dimensional umsetzen! Wink
Dann braucht man zwar noch ein paar regeln mehr, aber das dürfte ja kein problem sein
Naja... ich hab aber keine Zeit dafür. War nur ne Idee damit euch nicht mehr so langweilig ist Laughing

PS: Sieht lustig aus =)
Twitter
Download Jewel Snake!
Windows|Android

Waveblue

BeitragFr, Sep 28, 2007 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
3D wär nicht schlecht, aber ich glaub das gibt Probleme vor allem mit der Kamera (wie stellst du die ein um einen Haufen zu beobachten der sich dauernd unkontrolliert verändert, wächst und sich selbst verdeckt)und der Performance, schließlich kostet ein Cube mehr Leistung als ein Oval.

Ich finds ja erstmal gut, das keiner was an meinem Codestil zu bemängeln hat^^ Bis auf die Freiflächen, aber die find ich persönlich notwendig zur üersichtlichkeit.
This is 10% luck
20% skill
15% concentrated power of will
5% pleasure, 50% pain
and 100% reason to remember the name

Tankbuster

BeitragFr, Sep 28, 2007 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt. das ist natürlich ein Prob^^ aber wenn man sich alles im Wireframe modus ansehen würde, sähe das sicher geil aus xD
Twitter
Download Jewel Snake!
Windows|Android

SpionAtom

BeitragFr, Sep 28, 2007 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Idee ist nicht unbedingt neu.
<<Link>>

Bin mal gespannt, wer die erste Blitzumsetzung liefert.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group