Kolonie-Simulation

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

Smily

BeitragMo, Mai 04, 2009 22:55
Antworten mit Zitat
Benutzer-Profile anzeigen
ich war mir nicht sicher, ob meine spielerei hier gut genug für das Codearchiv ist, deswegen hab ich im Codefriedhof gepostet. Wenn es im Codearchiv besser aufgehoben ist, bitte ich einen Mod, den Post dahin zu verschieben

Beim stöbern in der Wikipedia bin ich letztens auf das Fermi-Paradoxon, speziell auf Diesen Abschnitt gestossen.

Grob gesagt geht es in dem Abschnitt (Nicht im Artikel, da geht es nochmal um was anderes) darum, wie weit sich eine Intelligente Rasse, welche zur interstellaren Kolonisation fähig ist, im weltall ausbreiten würde.

Ich hatte mal Lust, das ganze in einer art Simulation umzusetzen und heraus kam diese spielerei:

quick'n'dirty:
Code: [AUSKLAPPEN]
graphics 800,600
Local galaxy:int[800,600]
'galaxy[400,300] = 1;
'WaitKey()
SeedRnd MilliSecs()
Local factor# = 0.5
Local killfactor# = 0.00
Repeat
   time1 = MilliSecs()
   'Cls
   Local newgalaxy[800,600]
   countred = 0
   countgreen = 0
   
   If KeyHit(KEY_R)
      galaxy[400,300] = 1
   End if
   
   If KeyHit(KEY_F)
      galaxy[Rand(0,799), rand(0,599)] = 1
   End if
   
   If KeyHit(key_q) or KeyDown(key_1)
       factor = factor + 0.01
   EndIf
   
   If KeyHit(key_a) or KeyDown(key_y)
       factor = factor - 0.01
   EndIf
   
   If KeyHit(key_w) or KeyDown(key_2)
      killfactor = killfactor + 0.01
   End if

   If KeyHit(key_s) or KeyDown(key_x)
      killfactor = killfactor - 0.01
   End if

   
   For x = 0 to 799
      For y = 0 to 599
         If galaxy[x,y] = 1
            countgreen = countgreen + 1
            SetColor 0,255,0
            Plot x,y
            newgalaxy[x,y] = 2
            If x>0 And galaxy[x-1,y] = 0
               If Rnd(0,1) <= factor newgalaxy[x-1,y] = 1
            End if

            If x<799 And galaxy[x+1,y] = 0
               If Rnd(0,1) <= factor newgalaxy[x+1,y] = 1
            End if   
            
            If y > 0 And galaxy[x,y-1] = 0
               If Rnd(0,1) <= factor Newgalaxy[x, y-1] = 1
            End if
            
            If y < 599 And galaxy[x, y+1] = 0
               If Rnd(0,1) <= factor Newgalaxy[x, y+1] = 1
            End if
         ElseIf galaxy[x,y] = 2
            Newgalaxy[x,y] = 2
            SetColor 255,0,0
            Plot x,y   
            newgalaxy[x,y] = 3
         ElseIf galaxy[x,y]= 3
            countred = countred+1
            If Rnd(0, 1) > killfactor
               Newgalaxy[x,y] = 3
            Else
               SetColor 0,0,0
               Plot x,y
            End if
               
         End If   
            
      Next   
   Next
   galaxy = newgalaxy
   time2  = MilliSecs()
   SetColor 255,255,255
   DrawRect 0,0,51,71
   SetColor 0,0,0
   DrawRect 0,0,50, 70
   SetColor 255,255,255
   DrawText time2-time1, 0,0
   DrawText countgreen, 0,14
   DrawText countred, 0,28
   DrawText int(floor(factor*100 + 0.5)), 0,42
   DrawText int(floor(killfactor*100 + 0.5)), 0,56
   Flip
Until KeyHit(KEY_ESCAPE)


Das Prinzip ist recht einfach: Die simulation beginnt mit einem druck auf die r-taste (Damit wird in der mitte eine kolonie zum leben erweckt)
Eine kolonie kann jedes freies anliegendes feld besiedeln. Die wahrscheinlichkeit dafür, dass ein feld besiedelt wird, wird in "factor" angegeben. Im nächsten durchlauf "stagniert" diese kolonie, besiedelt also keine neuen nachbar-kolonien, dafür haben die vorher erstellten nachbarn jetzt die möglichkeit ihrerseits wieder andere felder zu besiedeln.

Mit einer gewissen wahrscheinlichkeit (hier als "killfactor" angegeben) stirbt eine kolonie auch pro durchlauf wieder. (Die wahrscheinlichkeit beträgt im beispielcode erstmal 0)

Kurze Tastenübersicht:
q und a: wahrscheinlichkeit erhöhen/verringern, mit der neue felder besiedelt werden
1 und y: wahrscheinlichkeit für besiedeln schnell verändern
w und s: wahrscheinlichkeit erhöhen/verringern, mit der eine kolonie stirbt
2 und x: wahrscheinlichkeit für das sterben schneller ändern.
r: Neue Kolonie in der mitte erstellen
f: Neue Kolonie an einer zufälligen stelle erstellen.

Wie gesagt, ist nur eine schnelle spielerei und nichts besonderes
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
 

m a j o r

BeitragMi, Mai 06, 2009 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
gefällt mir sehr gut.. auf großem fenster und mit eingeschaltetem kolonie-sterben sieht es sehr hübsch aus Smile

sehr schöne bilder kann man auch mit einer besiedelungswahrsch. von 100 und sterbefaktor 70 oder so erreichen. immer wieder r drücken. je nachdem wie schnell man r drückt zerfällt der kern Smile oder wenn man ganz viele wellen mit r schickt und dann die besiedleungswahrsch. minimal reduziert... Smile

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group