Kolonie-Simulation
Übersicht

![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
gefällt mir sehr gut.. auf großem fenster und mit eingeschaltetem kolonie-sterben sieht es sehr hübsch aus ![]() 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 ![]() ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group