Schwarm-Simulation
Übersicht

Gehe zu Seite Zurück 1, 2, 3, 4, 5 Weiter
CodeMaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der passende Titel fürs Spiel hieße dann "Evolution".
Das, was du ansprichst, boss@future, ist die zweite Möglichkeit, ein solches Spiel zu schreiben: Das gesamte Fortpflanzungssystem wieder auszubauen - diese Idee wäre tatsächlich sehr einfach umgesetzt. Was ich aber auch suche, ist eine Spielidee, die diese schon vorhandene Fortpflanzungssimulation miteinbezieht. |
||
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.
Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102 |
![]() |
theBlade |
![]() Antworten mit Zitat ![]() |
---|---|---|
oder tamagotchie mässig... er speichert die anzahl ständig ab, sodass das prog auch nach nem neustart weiterlaufen kann... und die teile sich weiter vermegren können... wär doch mal interessant zu sehen wieviel man bekommt ;D
aber cooles teil ![]() /edit: ok vergiss den vorschlag, ab 90 wird übel lahm... trotzdem cooles teil ![]() |
||
"Ich bin wie ich bin. Die einen kennen mich, die anderen können mich." (Dr. Konrad Adenauer)
UTFSB -> (use the fuckin "suchen"-button) User posted image <- link -.- |
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hört sich cool an. Vielleicht könnte man ja noch Nahrung für die Organismen einbauen, die sie essen müssen, um nicht zu sterben. Die Nahrung könnte man dann ja entweder automatisch nachwachsen lassen, oder per Eingabe einfügen, oder mit der Maus "hinmalen".
Und man könnte noch zwischen zwei Geschlechtern unterscheiden. |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
![]() |
ViciouS |
![]() Antworten mit Zitat ![]() |
---|---|---|
da das jetzt ja geschlechtliche vermehrung ist will ich männlein und weiblein..
und kämpfende männchen... wie bei anderen tieren... |
||
Skaten ist scheisse...
Bilanz: 3 Knochenbrüche in 4 Jahren... und es werden mehr ![]() |
![]() |
theBlade |
![]() Antworten mit Zitat ![]() |
---|---|---|
mal ne frage: sollen diese organismen das sein wofür man(n) sie auf den ersten blick hält, oder ist das irgendwas anderes (halt was tier-ähnliches) | ||
"Ich bin wie ich bin. Die einen kennen mich, die anderen können mich." (Dr. Konrad Adenauer)
UTFSB -> (use the fuckin "suchen"-button) User posted image <- link -.- |
CodeMaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
![]() ![]() Ein Problem bestand während der Programmierung auch in dem Wort "Organismus" - wenn man zwei bestimmte Buchstaben flüchtigerweise auslässt, erhält man Einblick in die ... ich nenne es mal "Urquelle des Sinns und Seins der Simulation" Geschlechtliche Trennung wird's demnächst geben. |
||
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.
Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102 |
bommelid |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
hab' mal versucht, den Organismen Geschlechter zuzuordnen. Das funzt auch soweit, nur kommt nach kurzer Zeit ein "memory access violation". hier mal der code (blöderweise funktioniert beim posten von code die Farbänderung nicht. darum ein --> davor): Code: [AUSKLAPPEN] Graphics 800,600,0,2
SetBuffer BackBuffer() SeedRnd MilliSecs() AppTitle "Schwar-Simulation 2" Const Lifetime = 30 Const PotentAge = 6 Const ImpotentPeriod = 6 Const NoPleasurePeriod = 2 Const ShowRelationships = True Const ShowBirthplaces = True Type Organism Field x# Field y# Field dir# Field speed# Field movement Field birthtime Field partner Field lastchild --> Field gender End Type Type Birthplace Field x# Field y# Field expiry End Type CreateSwarm(20) While Not KeyDown(1) Cls UpdateSwarm UpdateBirthplaces ShowSwarm Flip Wend End Function CreateSwarm(OrganismCount) For i = 1 To OrganismCount CreateOrganism(Rnd(GraphicsWidth()),Rnd(GraphicsHeight())) Next End Function Function CreateOrganism(x#,y#) Temp.Organism = New Organism Temp\x# = x# Temp\y# = y# Temp\dir# = Rand(360) Temp\speed = 0 Temp\movement = Rand(360) Temp\birthtime = MilliSecs() Temp\partner = 0 Temp\lastchild = MilliSecs() --> Temp\gender = Rand(2) Temp2.Birthplace = New Birthplace Temp2\x# = x# Temp2\y# = y# End Function Function UpdateSwarm() For Temp.Organism = Each Organism If age(Temp\birthtime) > Lifetime*1000 Then Delete Temp Else Temp\Speed# = Temp\speed# + Rnd(-1,1) If Temp\Speed# < 0 Then Temp\speed# = 0 If Temp\Speed# > 4 Then Temp\speed# = 4 Temp\movement = (Temp\movement + Temp\speed# * 10) Mod 360 If Temp\partner Then Partner.Organism = Object.Organism(Temp\partner) --> If Partner = Null Or Partner\gender = Temp\gender Then Temp\partner = 0 Else If distance#(Temp\x,Temp\y,Partner\x,Partner\y) > 50 Then Temp\partner = 0 Partner\partner = 0 Else If ShowRelationShips Then Line Temp\x#,Temp\y#,Partner\x#,Partner\y# Temp\dir# = Temp\dir# + Sgn(turnto(Temp\x#,Temp\y#,Partner\x#,Partner\y#,Temp\dir#)) * Temp\speed# * 2 If distance#(Temp\x#,Temp\y#,Partner\x#,Partner\y#) < 10 Then If (age(Temp\lastchild) > ImpotentPeriod * 1000) And (age(Partner\lastchild) > ImpotentPeriod * 1000) Then CreateOrganism(Temp\x#,Temp\y#) Temp\lastchild = MilliSecs() Partner\lastchild = MilliSecs() Temp\partner = 0 Partner\partner = 0 EndIf EndIf EndIf EndIf Else For NewPartner.Organism = Each Organism If (Not Handle(NewPartner) = Handle(Temp)) Then If distance#(Temp\x#,Temp\y#,NewPartner\x#,NewPartner\y#) < 30 Then If NewPartner\partner = 0 Then If (age(Temp\birthtime) > PotentAge * 1000) And (age(NewPartner\birthtime) > PotentAge * 1000) Then If (age(Temp\lastchild) > NoPleasurePeriod * 1000) And (age(NewPartner\lastchild) > NoPleasurePeriod * 1000) Then Temp\partner = Handle(NewPartner) NewPartner\partner = Handle(Temp) EndIf EndIf EndIf EndIf EndIf Next Temp\dir# = (Temp\dir# + Rnd(-2,2) + 360) Mod 360 EndIf Temp\x# = Temp\x# + Cos(Temp\dir#) * Temp\speed# Temp\y# = Temp\y# + Sin(Temp\dir#) * Temp\speed# If Temp\x# < 0 Then Temp\x# = Temp\x# + GraphicsWidth() If Temp\x# > GraphicsWidth() Then Temp\x# = Temp\x# - GraphicsWidth() If Temp\y# < 0 Then Temp\y# = Temp\y# + GraphicsHeight() If Temp\y# > GraphicsHeight() Then Temp\y# = Temp\y# - GraphicsHeight() EndIf Next End Function Function ShowSwarm() Color 255,255,255 For Temp.Organism = Each Organism LivingOrganisms = LivingOrganisms + 1 clr = 255 - age(Temp\birthtime) * 255 / (Lifetime * 1000) --> Color 0,0,clr --> If Temp\gender = 1 Then Color clr,0,0 DrawOrganism(Temp\x#,Temp\y#,Temp\dir#,age(Temp\birthtime)*10/(Lifetime*1000)+5,Temp\movement) Next Color 255,0,0 Text 1,1,"Lebendige Organismen: " + LivingOrganisms End Function Function UpdateBirthplaces() For Temp.Birthplace = Each Birthplace Temp\expiry = Temp\expiry + 1 If Temp\expiry > 100 Then Delete Temp Else If ShowBirthplaces Then clr = 255 - 255 * Temp\expiry / 100 size = 100 * Temp\expiry / 100 Color 0,clr,0 Oval Temp\x#-size/2,Temp\y#-size/2,size,size,0 EndIf EndIf Next End Function Function age(birthtime) Return MilliSecs() - birthtime End Function Function distance#(x1#,y1#,x2#,y2#) Return Sqr((x2-x1)^2+(y2-y1)^2) End Function Function turnto(x1#,y1#,x2#,y2#,dir#) Temp# = (90 - ATan2(x2#-x1#,y2#-y1#) - dir# + 360) Mod 360 If Temp# > 180 Then Temp# = Temp# - 360 Return Temp# End Function Function DrawOrganism(x#,y#,dir#,size#,anim) Oval x#-size#/2,y#-size#/2,size#,size#,1 nx# = x# + Cos(dir#) * size# / 2 ny# = y# + Sin(dir#) * size# / 2 For i = 1 To size# ox# = nx# oy# = ny# nx# = x# + Cos(180 + dir#) * (size# / 2 + i*4) + Cos(180+dir#+90) * Sin(anim - i * (360 / size#)) * i * .75 ny# = y# + Sin(180 + dir#) * (size# / 2 + i*4) + Sin(180+dir#+90) * Sin(anim - i * (360 / size#)) * i * .75 Line ox#,oy#,nx#,ny# Next End Function Gruß bommelid |
||
CodeMaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sieht schön aus!
Ich hab keinen Fehler bekommen, es allerdings auch nur etwa 20 Sekunden laufen lassen ![]() Um ehrlich zu sein, ich hab dieses "Projekt" (welches ja eigentlich gar keins ist) aufgrund von mangelnder Wichtigkeit im Vergleich zu meinen anderen momentanen Projekten erstmal auf Eis gelegt (um nicht zu sagen aufgegeben ![]() Es ist jedoch ausdrücklich erwünscht, dass ihr wenn ihr möchtet, den Code weiterentwickelt oder "entführt". |
||
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.
Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102 |
bommelid |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab' den Fehler gefunden. Durch die zusätzliche gender-Abfrage konnte es dazu kommen, daß einer der Partner beim Liebesspiel stirbt ![]() Mit den Änderungen sollte es jetzt klappen. Man könnte auch noch eine Wahrscheinlichkeit für Mehrlingsgeburten einfügen. Laßt doch mal ein paar Ideen hören. Der Thread ist ja eigentlich interessant genug. Code: [AUSKLAPPEN] Graphics 800,600,0,2
SetBuffer BackBuffer() SeedRnd MilliSecs() AppTitle "Schwar-Simulation 2" Const Lifetime = 30 Const PotentAge = 6 Const ImpotentPeriod = 6 Const NoPleasurePeriod = 2 Const ShowRelationships = True Const ShowBirthplaces = True Type Organism Field x# Field y# Field dir# Field speed# Field movement Field birthtime Field partner Field lastchild Field gender% End Type Type Birthplace Field x# Field y# Field expiry End Type CreateSwarm(30) While Not KeyDown(1) Cls UpdateSwarm UpdateBirthplaces ShowSwarm Flip Wend End Function CreateSwarm(OrganismCount) For i = 1 To OrganismCount CreateOrganism(Rnd(GraphicsWidth()),Rnd(GraphicsHeight())) Next End Function Function CreateOrganism(x#,y#) Temp.Organism = New Organism Temp\x# = x# Temp\y# = y# Temp\dir# = Rand(360) Temp\speed = 0 Temp\movement = Rand(360) Temp\birthtime = MilliSecs() Temp\partner = 0 Temp\lastchild = MilliSecs() Temp\gender% = Rand(2) Temp2.Birthplace = New Birthplace Temp2\x# = x# Temp2\y# = y# End Function Function UpdateSwarm() For Temp.Organism = Each Organism If age(Temp\birthtime) > Lifetime*1000 Then Delete Temp Else Temp\Speed# = Temp\speed# + Rnd(-1,1) If Temp\Speed# < 0 Then Temp\speed# = 0 If Temp\Speed# > 4 Then Temp\speed# = 4 Temp\movement = (Temp\movement + Temp\speed# * 10) Mod 360 If Temp\partner Then Partner.Organism = Object.Organism(Temp\partner) If Partner = Null Then Temp\partner = 0 Else If Partner\gender% = Temp\gender% Then Temp\partner = 0 Else If distance#(Temp\x,Temp\y,Partner\x,Partner\y) > 50 Then Temp\partner = 0 Partner\partner = 0 Else If ShowRelationShips Then Line Temp\x#,Temp\y#,Partner\x#,Partner\y# Temp\dir# = Temp\dir# + Sgn(turnto(Temp\x#,Temp\y#,Partner\x#,Partner\y#,Temp\dir#)) * Temp\speed# * 2 If distance#(Temp\x#,Temp\y#,Partner\x#,Partner\y#) < 10 Then If (age(Temp\lastchild) > ImpotentPeriod * 1000) And (age(Partner\lastchild) > ImpotentPeriod * 1000) Then CreateOrganism(Temp\x#,Temp\y#) Temp\lastchild = MilliSecs() Partner\lastchild = MilliSecs() Temp\partner = 0 Partner\partner = 0 EndIf EndIf EndIf EndIf EndIf Else For NewPartner.Organism = Each Organism If (Not Handle(NewPartner) = Handle(Temp)) Then If distance#(Temp\x#,Temp\y#,NewPartner\x#,NewPartner\y#) < 30 Then If NewPartner\partner = 0 Then If (age(Temp\birthtime) > PotentAge * 1000) And (age(NewPartner\birthtime) > PotentAge * 1000) Then If (age(Temp\lastchild) > NoPleasurePeriod * 1000) And (age(NewPartner\lastchild) > NoPleasurePeriod * 1000) Then Temp\partner = Handle(NewPartner) NewPartner\partner = Handle(Temp) EndIf EndIf EndIf EndIf EndIf Next Temp\dir# = (Temp\dir# + Rnd(-2,2) + 360) Mod 360 EndIf Temp\x# = Temp\x# + Cos(Temp\dir#) * Temp\speed# Temp\y# = Temp\y# + Sin(Temp\dir#) * Temp\speed# If Temp\x# < 0 Then Temp\x# = Temp\x# + GraphicsWidth() If Temp\x# > GraphicsWidth() Then Temp\x# = Temp\x# - GraphicsWidth() If Temp\y# < 0 Then Temp\y# = Temp\y# + GraphicsHeight() If Temp\y# > GraphicsHeight() Then Temp\y# = Temp\y# - GraphicsHeight() EndIf Next End Function Function ShowSwarm() Color 255,255,255 For Temp.Organism = Each Organism If Temp\gender% = 1 Then LivingfemOrganisms = LivingfemOrganisms + 1 Else LivingmaleOrganisms = LivingmaleOrganisms + 1 EndIf clr = 255 - age(Temp\birthtime) * 255 / (Lifetime * 1000) Color 0,0,clr If Temp\gender% = 1 Then Color clr,0,0 DrawOrganism(Temp\x#,Temp\y#,Temp\dir#,age(Temp\birthtime)*10/(Lifetime*1000)+5,Temp\movement) Next Color 255,0,0 Text 1,1,"Lebendige weibliche Organismen: " + LivingfemOrganisms Color 0,0,255 Text 1,15,"Lebendige männliche Organismen: " + LivingmaleOrganisms Color 255,255,255 Text 1,30,"Lebendige Organismen insgesamt: " + (LivingfemOrganisms+LivingmaleOrganisms) End Function Function UpdateBirthplaces() For Temp.Birthplace = Each Birthplace Temp\expiry = Temp\expiry + 1 If Temp\expiry > 100 Then Delete Temp Else If ShowBirthplaces Then clr = 255 - 255 * Temp\expiry / 100 size = 100 * Temp\expiry / 100 Color 0,clr,0 Oval Temp\x#-size/2,Temp\y#-size/2,size,size,0 EndIf EndIf Next End Function Function age(birthtime) Return MilliSecs() - birthtime End Function Function distance#(x1#,y1#,x2#,y2#) Return Sqr((x2-x1)^2+(y2-y1)^2) End Function Function turnto(x1#,y1#,x2#,y2#,dir#) Temp# = (90 - ATan2(x2#-x1#,y2#-y1#) - dir# + 360) Mod 360 If Temp# > 180 Then Temp# = Temp# - 360 Return Temp# End Function Function DrawOrganism(x#,y#,dir#,size#,anim) Oval x#-size#/2,y#-size#/2,size#,size#,1 nx# = x# + Cos(dir#) * size# / 2 ny# = y# + Sin(dir#) * size# / 2 For i = 1 To size# ox# = nx# oy# = ny# nx# = x# + Cos(180 + dir#) * (size# / 2 + i*4) + Cos(180+dir#+90) * Sin(anim - i * (360 / size#)) * i * .75 ny# = y# + Sin(180 + dir#) * (size# / 2 + i*4) + Sin(180+dir#+90) * Sin(anim - i * (360 / size#)) * i * .75 Line ox#,oy#,nx#,ny# Next End Function Gruß bommelid |
||
bommelid |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schon wieder ich ![]() Habe jetzt noch Zwillings- u. Drillingsgeburten hinzugefügt (alle 85 bzw. alle 85*85 Geburten) Trotzdem waren bald keine Organismen mehr da. Dann habe ich die ImpotentPeriod bei den Männlichen Organismen weggenommen (Schuldgefühle zählen nicht). Jetzt pendelt sich das hier bei etwa 50 Organismen ein. Hier mal noch der Code: Code: [AUSKLAPPEN] Graphics 800,600,0,2
SetBuffer BackBuffer() SeedRnd MilliSecs() AppTitle "Schwar-Simulation 2" Const Lifetime = 30 Const PotentAge = 6 Const ImpotentPeriod = 6 Const NoPleasurePeriod = 2 Const ShowRelationships = True Const ShowBirthplaces = True Const twinprob# = 0.012 Const tripletprob# = 0.00014 Global births = 0 Global twins = 0 Global triplets = 0 Type Organism Field x# Field y# Field dir# Field speed# Field movement Field birthtime Field partner Field lastchild Field gender% End Type Type Birthplace Field x# Field y# Field expiry End Type CreateSwarm(30) While Not KeyDown(1) Cls UpdateSwarm UpdateBirthplaces ShowSwarm Flip Wend End Function CreateSwarm(OrganismCount) For i = 1 To OrganismCount CreateOrganism(Rnd(GraphicsWidth()),Rnd(GraphicsHeight())) Next End Function Function CreateOrganism(x#,y#) Temp.Organism = New Organism Temp\x# = x# Temp\y# = y# Temp\dir# = Rand(360) Temp\speed = 0 Temp\movement = Rand(360) Temp\birthtime = MilliSecs() Temp\partner = 0 Temp\lastchild = MilliSecs() Temp\gender% = Rand(0,1) Temp2.Birthplace = New Birthplace Temp2\x# = x# Temp2\y# = y# End Function Function UpdateSwarm() For Temp.Organism = Each Organism If age(Temp\birthtime) > Lifetime*1000 Then Delete Temp Else Temp\Speed# = Temp\speed# + Rnd(-1,1) If Temp\Speed# < 0 Then Temp\speed# = 0 If Temp\Speed# > 4 Then Temp\speed# = 4 Temp\movement = (Temp\movement + Temp\speed# * 10) Mod 360 If Temp\partner Then Partner.Organism = Object.Organism(Temp\partner) If Partner = Null Then Temp\partner = 0 Else If Partner\gender% = Temp\gender% Then Temp\partner = 0 Else If distance#(Temp\x,Temp\y,Partner\x,Partner\y) > 50 Then Temp\partner = 0 Partner\partner = 0 Else If ShowRelationShips Then Line Temp\x#,Temp\y#,Partner\x#,Partner\y# Temp\dir# = Temp\dir# + Sgn(turnto(Temp\x#,Temp\y#,Partner\x#,Partner\y#,Temp\dir#)) * Temp\speed# * 2 If distance#(Temp\x#,Temp\y#,Partner\x#,Partner\y#) < 10 Then If (age(Temp\lastchild) > Temp\gender * ImpotentPeriod * 1000) And (age(Partner\lastchild) > Partner\gender * ImpotentPeriod * 1000) Then births = births + 1 multibirth# = Rnd(0, 1) CreateOrganism(Temp\x#,Temp\y#) If multibirth# <= twinprob# Then twins = twins + 1 CreateOrganism(Temp\x#,Temp\y#) EndIf If multibirth# <= tripletprob# Then twins = twins - 1 triplets = triplets + 1 CreateOrganism(Temp\x#,Temp\y#) EndIf Temp\lastchild = MilliSecs() Partner\lastchild = MilliSecs() Temp\partner = 0 Partner\partner = 0 EndIf EndIf EndIf EndIf EndIf Else For NewPartner.Organism = Each Organism If (Not Handle(NewPartner) = Handle(Temp)) Then If distance#(Temp\x#,Temp\y#,NewPartner\x#,NewPartner\y#) < 30 Then If NewPartner\partner = 0 Then If (age(Temp\birthtime) > PotentAge * 1000) And (age(NewPartner\birthtime) > PotentAge * 1000) Then If (age(Temp\lastchild) > NoPleasurePeriod * 1000) And (age(NewPartner\lastchild) > NoPleasurePeriod * 1000) Then Temp\partner = Handle(NewPartner) NewPartner\partner = Handle(Temp) EndIf EndIf EndIf EndIf EndIf Next Temp\dir# = (Temp\dir# + Rnd(-2,2) + 360) Mod 360 EndIf Temp\x# = Temp\x# + Cos(Temp\dir#) * Temp\speed# Temp\y# = Temp\y# + Sin(Temp\dir#) * Temp\speed# If Temp\x# < 0 Then Temp\x# = Temp\x# + GraphicsWidth() If Temp\x# > GraphicsWidth() Then Temp\x# = Temp\x# - GraphicsWidth() If Temp\y# < 0 Then Temp\y# = Temp\y# + GraphicsHeight() If Temp\y# > GraphicsHeight() Then Temp\y# = Temp\y# - GraphicsHeight() EndIf Next End Function Function ShowSwarm() Color 255,255,255 For Temp.Organism = Each Organism If Temp\gender% = 1 Then LivingfemOrganisms = LivingfemOrganisms + 1 Else LivingmaleOrganisms = LivingmaleOrganisms + 1 EndIf clr = 255 - age(Temp\birthtime) * 255 / (Lifetime * 1000) Color 0,0,clr If Temp\gender% = 1 Then Color clr,0,0 DrawOrganism(Temp\x#,Temp\y#,Temp\dir#,age(Temp\birthtime)*10/(Lifetime*1000)+5,Temp\movement) Next Color 255,0,0 Text 1,1,"Lebendige weibliche Organismen: " + LivingfemOrganisms Color 0,0,255 Text 1,15,"Lebendige männliche Organismen: " + LivingmaleOrganisms Color 255,255,255 Text 1,30,"Lebendige Organismen insgesamt: " + (LivingfemOrganisms+LivingmaleOrganisms) Text 400,0,"Geburten insgesamt: " + births Text 400,15," Zwillingsgeburten: " + twins Text 400,30," Drillingsgeburten: " + triplets End Function Function UpdateBirthplaces() For Temp.Birthplace = Each Birthplace Temp\expiry = Temp\expiry + 1 If Temp\expiry > 100 Then Delete Temp Else If ShowBirthplaces Then clr = 255 - 255 * Temp\expiry / 100 size = 100 * Temp\expiry / 100 Color 0,clr,0 Oval Temp\x#-size/2,Temp\y#-size/2,size,size,0 EndIf EndIf Next End Function Function age(birthtime) Return MilliSecs() - birthtime End Function Function distance#(x1#,y1#,x2#,y2#) Return Sqr((x2-x1)^2+(y2-y1)^2) End Function Function turnto(x1#,y1#,x2#,y2#,dir#) Temp# = (90 - ATan2(x2#-x1#,y2#-y1#) - dir# + 360) Mod 360 If Temp# > 180 Then Temp# = Temp# - 360 Return Temp# End Function Function DrawOrganism(x#,y#,dir#,size#,anim) Oval x#-size#/2,y#-size#/2,size#,size#,1 nx# = x# + Cos(dir#) * size# / 2 ny# = y# + Sin(dir#) * size# / 2 For i = 1 To size# ox# = nx# oy# = ny# nx# = x# + Cos(180 + dir#) * (size# / 2 + i*4) + Cos(180+dir#+90) * Sin(anim - i * (360 / size#)) * i * .75 ny# = y# + Sin(180 + dir#) * (size# / 2 + i*4) + Sin(180+dir#+90) * Sin(anim - i * (360 / size#)) * i * .75 Line ox#,oy#,nx#,ny# Next End Function Gruß bommelid |
||
CodeMaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wow, echt cool! Wird immer besser! | ||
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.
Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102 |
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, nicht schlecht. Was man jetzt noch einbauen könnte wäre eine Statistikanzeige über die minimale und die maximale Bevölkerung. Und eine Anzeige der Todesfälle. ![]() |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
bommelid |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Travis: Dein Wunsch ist mir Befehl! Min/Max-Population und Todesfälle.
In der Titelleiste stehen jetzt auch die verstrichenen Sekunden. Code: [AUSKLAPPEN] Graphics 800,600,0,2
SetBuffer BackBuffer() SeedRnd MilliSecs() AppTitle "Schwar-Simulation 2" Const StartingPop = 30 Const Lifetime = 30 Const PotentAge = 6 Const ImpotentPeriod = 6 Const NoPleasurePeriod = 2 Const ShowRelationships = True Const ShowBirthplaces = False Const twinprob# = 0.012 Const tripletprob# = 0.00014 Global births = 0 Global twins = 0 Global triplets = 0 Global deaths = 0 Global maxpop Global minpop = StartingPop Global starttime = MilliSecs() Type Organism Field x# Field y# Field dir# Field speed# Field movement Field birthtime Field partner Field lastchild Field gender% End Type Type Birthplace Field x# Field y# Field expiry End Type CreateSwarm(StartingPop) While Not KeyDown(1) Cls UpdateSwarm UpdateBirthplaces ShowSwarm Flip Wend End Function CreateSwarm(OrganismCount) For i = 1 To OrganismCount CreateOrganism(Rnd(GraphicsWidth()),Rnd(GraphicsHeight())) Next End Function Function CreateOrganism(x#,y#) Temp.Organism = New Organism Temp\x# = x# Temp\y# = y# Temp\dir# = Rand(360) Temp\speed = 0 Temp\movement = Rand(360) Temp\birthtime = MilliSecs() Temp\partner = 0 Temp\lastchild = MilliSecs() Temp\gender% = Rand(0,1) Temp2.Birthplace = New Birthplace Temp2\x# = x# Temp2\y# = y# End Function Function UpdateSwarm() For Temp.Organism = Each Organism If age(Temp\birthtime) > Lifetime*1000 Then Delete Temp deaths = deaths + 1 Else Temp\Speed# = Temp\speed# + Rnd(-1,1) If Temp\Speed# < 0 Then Temp\speed# = 0 If Temp\Speed# > 4 Then Temp\speed# = 4 Temp\movement = (Temp\movement + Temp\speed# * 10) Mod 360 If Temp\partner Then Partner.Organism = Object.Organism(Temp\partner) If Partner = Null Then Temp\partner = 0 Else If Partner\gender% = Temp\gender% Then Temp\partner = 0 Else If distance#(Temp\x,Temp\y,Partner\x,Partner\y) > 50 Then Temp\partner = 0 Partner\partner = 0 Else If ShowRelationShips Then Line Temp\x#,Temp\y#,Partner\x#,Partner\y# Temp\dir# = Temp\dir# + Sgn(turnto(Temp\x#,Temp\y#,Partner\x#,Partner\y#,Temp\dir#)) * Temp\speed# * 2 If distance#(Temp\x#,Temp\y#,Partner\x#,Partner\y#) < 10 Then If (age(Temp\lastchild) > Temp\gender * ImpotentPeriod * 1000) And (age(Partner\lastchild) > Partner\gender * ImpotentPeriod * 1000) Then births = births + 1 multibirth# = Rnd(0, 1) CreateOrganism(Temp\x#,Temp\y#) If multibirth# <= twinprob# Then births = births + 1 twins = twins + 1 CreateOrganism(Temp\x#,Temp\y#) EndIf If multibirth# <= tripletprob# Then twins = twins - 1 births = births + 1 triplets = triplets + 1 CreateOrganism(Temp\x#,Temp\y#) EndIf Temp\lastchild = MilliSecs() Partner\lastchild = MilliSecs() Temp\partner = 0 Partner\partner = 0 EndIf EndIf EndIf EndIf EndIf Else For NewPartner.Organism = Each Organism If (Not Handle(NewPartner) = Handle(Temp)) Then If distance#(Temp\x#,Temp\y#,NewPartner\x#,NewPartner\y#) < 30 Then If NewPartner\partner = 0 Then If (age(Temp\birthtime) > PotentAge * 1000) And (age(NewPartner\birthtime) > PotentAge * 1000) Then If (age(Temp\lastchild) > NoPleasurePeriod * 1000) And (age(NewPartner\lastchild) > NoPleasurePeriod * 1000) Then Temp\partner = Handle(NewPartner) NewPartner\partner = Handle(Temp) EndIf EndIf EndIf EndIf EndIf Next Temp\dir# = (Temp\dir# + Rnd(-2,2) + 360) Mod 360 EndIf Temp\x# = Temp\x# + Cos(Temp\dir#) * Temp\speed# Temp\y# = Temp\y# + Sin(Temp\dir#) * Temp\speed# If Temp\x# < 0 Then Temp\x# = Temp\x# + GraphicsWidth() If Temp\x# > GraphicsWidth() Then Temp\x# = Temp\x# - GraphicsWidth() If Temp\y# < 0 Then Temp\y# = Temp\y# + GraphicsHeight() If Temp\y# > GraphicsHeight() Then Temp\y# = Temp\y# - GraphicsHeight() EndIf Next End Function Function ShowSwarm() Color 255,255,255 For Temp.Organism = Each Organism If Temp\gender% = 1 Then LivingfemOrganisms = LivingfemOrganisms + 1 Else LivingmaleOrganisms = LivingmaleOrganisms + 1 EndIf clr = 255 - age(Temp\birthtime) * 255 / (Lifetime * 1000) Color 0,0,clr If Temp\gender% = 1 Then Color clr,0,0 DrawOrganism(Temp\x#,Temp\y#,Temp\dir#,age(Temp\birthtime)*10/(Lifetime*1000)+5,Temp\movement) Next Color 255,0,0 Text 1,1,"Lebendige weibliche Organismen: " + LivingfemOrganisms Color 0,0,255 Text 1,15,"Lebendige männliche Organismen: " + LivingmaleOrganisms Color 255,255,255 Text 1,30,"Lebendige Organismen insgesamt: " + (LivingfemOrganisms+LivingmaleOrganisms) Text 300,0,"Geburten insgesamt: " + births Text 300,15," Zwillingsgeburten: " + twins Text 300,30," Drillingsgeburten: " + triplets If LivingfemOrganisms+LivingmaleOrganisms > maxpop Then maxpop = LivingfemOrganisms+LivingmaleOrganisms ElseIf LivingfemOrganisms+LivingmaleOrganisms < minpop Then minpop = LivingfemOrganisms+LivingmaleOrganisms EndIf Text 550,0,"tragische Todesfälle: " + deaths Text 550,15," maximale Population: " + maxpop Text 550,30," minimale Population: " + minpop ; Text 550,45," Zeit: " + (MilliSecs() - starttime)/1000 + "s" AppTitle " Zeit in sek.: " + (MilliSecs() - starttime)/1000 End Function Function UpdateBirthplaces() For Temp.Birthplace = Each Birthplace Temp\expiry = Temp\expiry + 1 If Temp\expiry > 100 Then Delete Temp Else If ShowBirthplaces Then clr = 255 - 255 * Temp\expiry / 100 size = 100 * Temp\expiry / 100 Color 0,clr,0 Oval Temp\x#-size/2,Temp\y#-size/2,size,size,0 EndIf EndIf Next End Function Function age(birthtime) Return MilliSecs() - birthtime End Function Function distance#(x1#,y1#,x2#,y2#) Return Sqr((x2-x1)^2+(y2-y1)^2) End Function Function turnto(x1#,y1#,x2#,y2#,dir#) Temp# = (90 - ATan2(x2#-x1#,y2#-y1#) - dir# + 360) Mod 360 If Temp# > 180 Then Temp# = Temp# - 360 Return Temp# End Function Function DrawOrganism(x#,y#,dir#,size#,anim) Oval x#-size#/2,y#-size#/2,size#,size#,1 nx# = x# + Cos(dir#) * size# / 2 ny# = y# + Sin(dir#) * size# / 2 For i = 1 To size# ox# = nx# oy# = ny# nx# = x# + Cos(180 + dir#) * (size# / 2 + i*4) + Cos(180+dir#+90) * Sin(anim - i * (360 / size#)) * i * .75 ny# = y# + Sin(180 + dir#) * (size# / 2 + i*4) + Sin(180+dir#+90) * Sin(anim - i * (360 / size#)) * i * .75 Line ox#,oy#,nx#,ny# Next End Function Ich meinte aber eher Vorschläge zur Implementation von Nahrung oder Wasser. Danach käme dann die Unterteilung der Organismen in solche, welche die implementierte Nahrung fressen und solche, die die Nahrung fressenden Organis´men fressen. Sowas wie Pflanzen- u. Fleischfresser. Vorschläge zur Codeoptimierung sind natürlich auch willkommen. Gruß bommelid |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Cool und auch eine Laufzeitanzeige ![]() So könnte man ja mit Hilfe von Birthtime bestimmen, wann die Organismen hunger haben. Dann müsste er sich eine Futterquelle aussuchen und sie ansteuern. Wenn er eine findet, ist der hunger weg. Also braucht man wohl eine Variable dafür. Wenn er keine findet, dann stirbt er. Für die erzeugung des Futters müßte man sich überlegen, ob man feste Futterplätze einbaut, die permanent bestehenbleiben (unerschöpflich) oder immer wieder neue erzeugt. Dann muss man sich allerdings genau überlegen, wie man das anstellt, dass auch immer so viel futter da ist, dass nicht alles sterben. Letzteres wäre natürlich interessanter, aber auch schwieriger. |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
bommelid |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich dachte mir die Futterquellen einfach als Kreise. Je mehr Futter noch an der jeweiligen Quelle vorhanden ist, desto größer der Kreis.
Futtern die Organismen, nimmt der Radius logischerweise ab. Desweiteren sollte die Futterquelle noch eine Regenerationsrate besitzen. Frißt keiner, wird der Kreis wieder größer. Die Organismen fressen und können dann weitere x Sekunden überleben (natürlich nur bis zur max. Lebensdauer). Man muß versuchen, die Regenerationsrate der Futterquellen so zu wählen, daß die Zahl der Organismen sich irgendwie selbst reguliert. weniger Futter, weniger Organismen. Alles nicht so einfach aber sicher machbar. |
||
CodeMaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mir fällt was ganz böööses ein:
Die toten Organismen könnten als Futterquelle dienen ![]() Es gibt tatsächlich Tierarten, bei denen es nach diesem Prinzip verläuft. Und ganz böse Diktator-Spermien haben manchmal sogar auch Kinder zum Fressen gerne. Nur so als Anregung, dann müsste man sich auch keine Gedanken von wegen Futtergeneration machen ![]() Ich muss schon sagen: Mein Code scheint in deinen Händen gut aufgehoben zu sein, bommelid. |
||
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.
Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102 |
bommelid |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@CodeMaster: Mir gefällt Deine Denkweise! ![]() Jetzt fehlt mir nur noch die Zeit, das umzusetzen. Aber ich hoffe stark auf andere Coder aus dem Forum, da ich die Sache wirklich super interessant finde. Egal. Hier mal ein paar Gedanken zum Projekt: 1.) Wie lange sollen die Organismen eigentlich max. ohne Nahrung auskommen können? Sind 10s ok? 2.) 4s vor dem Hungertod sollten die Org. alles stehen und liegen lassen und die nächste Futterquelle aufsuchen (oder wenigstens den Versuch starten). Oder ist das doof? 3.) Soll der Hungerstatus irgendwie sichtbar sein? 4.) Für wieviel Portionen soll ein toter Organismus reichen? ![]() 5.) Verwesen die Reste irgendwann, wenn keiner sie frisst? 6.) Gibt es trotzdem noch andere Nahrungsquellen (mit weniger Energie weil keine Proteine)? 7.) Sind Jungorganismen (vor der Geschlechtsreife) als Nahrung ok? ![]() Fragen über Fragen Gruß bommelid |
||
bommelid |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
hab' wieder ein wenig gebastelt. Tote Organismen verwandeln sich in Futterquellen. Das hat aber noch keine sonstigen Auswirkungen. Gefressen wird noch nicht und auch nichts angezeigt (weil Const isFood = False). Ausserdem habe ich eine Lebenserwartung für jeden Organismus implementiert. Das wird per Zufall ermittelt über die Lifetime und eine max. Abweichung (Lifetime + Rnd(-Lifetimediffer,Lifetimediffer). Die Lebenserwartung wird ausserdem vererbt. Für den Nachwuchs wird jeweils der Durchschnitt der Lebenserwartungen der Eltern gebildet und natürlich auch wieder die Abweichung per Zufall bestimmt. Wie erwartet steigt die durchschnittliche Lebenserwartung im Laufe der Zeit an (jedenfalls in meinen Tests). Damit die Statistikanzeige etwas besser zu sehen ist, habe ich den Lebensraum der Organismen etwas beschränkt. Gibt es in BB die Möglichkeit ein zweites Fenster zu öffnen und die statistischen Angaben dort anzuzeigen? Code: [AUSKLAPPEN] Graphics 800,600,0,2
SetBuffer BackBuffer() SeedRnd MilliSecs() AppTitle "Schwar-Simulation 2" Const isFood = False Const StartingPop = 30 Const Lifetime = 30 Const Lifetimediffer# = 2 Const PotentAge = 6 Const ImpotentPeriod = 6 Const NoPleasurePeriod = 2 Const ShowRelationships = True Const ShowBirthplaces = False Const twinprob# = 0.012 Const tripletprob# = 0.00014 Const satisfiedtime = 5 Global births = 0 Global twins = 0 Global triplets = 0 Global deaths = 0 Global maxpop Global minpop = StartingPop Global starttime = MilliSecs() Global maxlifeexpectancy# = 0 Global minlifeexpectancy# = Lifetime+Lifetimediffer# Type FoodSource Field x# Field y# Field foodpoints Field origintime End Type Type Organism Field x# Field y# Field dir# Field speed# Field movement Field birthtime Field partner Field lastchild Field gender% Field lastfood Field lifeexpectancy# End Type Type Birthplace Field x# Field y# Field expiry End Type CreateSwarm(StartingPop) While Not KeyDown(1) Cls UpdateSwarm UpdateBirthplaces ShowSwarm If isFood Then ShowFood Flip Wend End Function CreateSwarm(OrganismCount) For i = 1 To OrganismCount CreateOrganism(Rnd(GraphicsWidth()),Rnd(GraphicsHeight()),Lifetime) Next End Function Function newFoodSource(x#, y#) Temp.FoodSource = New FoodSource Temp\x# = x# Temp\y# = y# Temp\foodpoints = 10 Temp\origintime = MilliSecs() End Function Function CreateOrganism(x#,y#,Lifetimetemp#) Temp.Organism = New Organism Temp\x# = x# Temp\y# = y# Temp\dir# = Rand(360) Temp\speed = 0 Temp\movement = Rand(360) Temp\birthtime = MilliSecs() Temp\partner = 0 Temp\lastchild = MilliSecs() Temp\gender% = Rand(0,1) Temp\lastfood = MilliSecs() Temp\lifeexpectancy# = Lifetimetemp# + Rnd(-Lifetimediffer#,Lifetimediffer#) Temp2.Birthplace = New Birthplace Temp2\x# = x# Temp2\y# = y# End Function Function UpdateSwarm() For Temp.Organism = Each Organism If age(Temp\birthtime) > Temp\lifeexpectancy#*1000 Then newFoodSource(Temp\x#,Temp\y#) Delete Temp deaths = deaths + 1 Else Temp\Speed# = Temp\speed# + Rnd(-1,1) If Temp\Speed# < 0 Then Temp\speed# = 0 If Temp\Speed# > 4 Then Temp\speed# = 4 Temp\movement = (Temp\movement + Temp\speed# * 10) Mod 360 If Temp\partner Then Partner.Organism = Object.Organism(Temp\partner) If Partner = Null Then Temp\partner = 0 Else If Partner\gender% = Temp\gender% Then Temp\partner = 0 Else If distance#(Temp\x,Temp\y,Partner\x,Partner\y) > 50 Then Temp\partner = 0 Partner\partner = 0 Else If ShowRelationShips Then Line Temp\x#,Temp\y#,Partner\x#,Partner\y# Temp\dir# = Temp\dir# + Sgn(turnto(Temp\x#,Temp\y#,Partner\x#,Partner\y#,Temp\dir#)) * Temp\speed# * 2 If distance#(Temp\x#,Temp\y#,Partner\x#,Partner\y#) < 10 Then If (age(Temp\lastchild) > Temp\gender * ImpotentPeriod * 1000) And (age(Partner\lastchild) > Partner\gender * ImpotentPeriod * 1000) Then births = births + 1 multibirth# = Rnd(0, 1) CreateOrganism(Temp\x#,Temp\y#,(Temp\lifeexpectancy#+Partner\lifeexpectancy#)/2) If multibirth# <= twinprob# Then births = births + 1 twins = twins + 1 CreateOrganism(Temp\x#,Temp\y#,(Temp\lifeexpectancy#+Partner\lifeexpectancy#)/2) EndIf If multibirth# <= tripletprob# Then twins = twins - 1 births = births + 1 triplets = triplets + 1 CreateOrganism(Temp\x#,Temp\y#,(Temp\lifeexpectancy#+Partner\lifeexpectancy#)/2) EndIf Temp\lastchild = MilliSecs() Partner\lastchild = MilliSecs() Temp\partner = 0 Partner\partner = 0 EndIf EndIf EndIf EndIf EndIf Else For NewPartner.Organism = Each Organism If (Not Handle(NewPartner) = Handle(Temp)) Then If distance#(Temp\x#,Temp\y#,NewPartner\x#,NewPartner\y#) < 30 Then If NewPartner\partner = 0 Then If (age(Temp\birthtime) > PotentAge * 1000) And (age(NewPartner\birthtime) > PotentAge * 1000) Then If (age(Temp\lastchild) > NoPleasurePeriod * 1000) And (age(NewPartner\lastchild) > NoPleasurePeriod * 1000) Then Temp\partner = Handle(NewPartner) NewPartner\partner = Handle(Temp) EndIf EndIf EndIf EndIf EndIf Next Temp\dir# = (Temp\dir# + Rnd(-2,2) + 360) Mod 360 EndIf Temp\x# = Temp\x# + Cos(Temp\dir#) * Temp\speed# Temp\y# = Temp\y# + Sin(Temp\dir#) * Temp\speed# If Temp\x# < 0 Then Temp\x# = Temp\x# + GraphicsWidth() If Temp\x# > GraphicsWidth() Then Temp\x# = Temp\x# - GraphicsWidth() If Temp\y# < 100 Then Temp\y# = Temp\y# + GraphicsHeight() - 100 If Temp\y# > GraphicsHeight() Then Temp\y# = Temp\y# - GraphicsHeight() + 100 EndIf Next End Function Function ShowFood() For Temp.FoodSource = Each FoodSource If age(Temp\origintime) > 10*1000 Then Delete Temp Else Color 0,(256-25*age(Temp\origintime)/1000),0 Oval Temp\x#,Temp\y#,5+Temp\foodpoints,5+Temp\foodpoints,1 EndIf Next Color 255,255,255 End Function Function ShowSwarm() For Temp.Organism = Each Organism If Temp\lifeexpectancy# > maxlifeexpectancy# Then maxlifeexpectancy# = Temp\lifeexpectancy# If Temp\lifeexpectancy# < minlifeexpectancy# Then minlifeexpectancy# = Temp\lifeexpectancy# avLifetime# = avLifetime# + Temp\lifeexpectancy# hunger = (MilliSecs() - Temp\lastfood)/1000 If Temp\gender% = 1 Then LivingfemOrganisms = LivingfemOrganisms + 1 Else LivingmaleOrganisms = LivingmaleOrganisms + 1 EndIf clr = 255 - age(Temp\birthtime) * 255 / (Temp\lifeexpectancy# * 1000) Color 0,0,clr If Temp\gender% = 1 Then Color clr,0,0 DrawOrganism(Temp\x#,Temp\y#,Temp\dir#,age(Temp\birthtime)*10/(Lifetime*1000)+5,Temp\movement,Temp\gender%) Next Color 255,0,0 Text 1,1,"Lebendige weibliche Organismen: " + LivingfemOrganisms Color 0,0,255 Text 1,15,"Lebendige männliche Organismen: " + LivingmaleOrganisms Color 255,255,255 Text 1,30,"Lebendige Organismen insgesamt: " + (LivingfemOrganisms+LivingmaleOrganisms) Text 1,45," höchste Lebenserwartung: " + maxlifeexpectancy# Text 1,60,"geringste Lebenserwartung: " + minlifeexpectancy# avLifetime = avLifetime# / (LivingfemOrganisms+LivingmaleOrganisms) Text 1,75,"durchschn.Lebenserwartung: " + avLifetime# Text 300,0,"Geburten insgesamt: " + births Text 300,15," Zwillingsgeburten: " + twins Text 300,30," Drillingsgeburten: " + triplets If LivingfemOrganisms+LivingmaleOrganisms > maxpop Then maxpop = LivingfemOrganisms+LivingmaleOrganisms ElseIf LivingfemOrganisms+LivingmaleOrganisms < minpop Then minpop = LivingfemOrganisms+LivingmaleOrganisms EndIf Text 550,0,"tragische Todesfälle: " + deaths Text 550,15," maximale Population: " + maxpop Text 550,30," minimale Population: " + minpop AppTitle " Zeit in sek.: " + (MilliSecs() - starttime)/1000 Color 255,255,255 End Function Function UpdateBirthplaces() For Temp.Birthplace = Each Birthplace Temp\expiry = Temp\expiry + 1 If Temp\expiry > 100 Then Delete Temp Else If ShowBirthplaces Then clr = 255 - 255 * Temp\expiry / 100 size = 100 * Temp\expiry / 100 Color 0,clr,0 Oval Temp\x#-size/2,Temp\y#-size/2,size,size,0 EndIf EndIf Next End Function Function age(birthtime) Return MilliSecs() - birthtime End Function Function distance#(x1#,y1#,x2#,y2#) Return Sqr((x2-x1)^2+(y2-y1)^2) End Function Function turnto(x1#,y1#,x2#,y2#,dir#) Temp# = (90 - ATan2(x2#-x1#,y2#-y1#) - dir# + 360) Mod 360 If Temp# > 180 Then Temp# = Temp# - 360 Return Temp# End Function Function DrawOrganism(x#,y#,dir#,size#,anim,gender%) Oval x#-size#/2,y#-size#/2,size#,size#,1 If gender% = 0 Then nx# = x# + Cos(dir#) * size# / 2 ny# = y# + Sin(dir#) * size# / 2 For i = 1 To size#/2 ox# = nx# oy# = ny# nx# = x# + Cos(180 + dir#) * (size# / 2 + i*4) + Cos(180+dir#+90) * Sin(anim - i * (360 / size#)) * i * .75 ny# = y# + Sin(180 + dir#) * (size# / 2 + i*4) + Sin(180+dir#+90) * Sin(anim - i * (360 / size#)) * i * .75 Line ox#,oy#,nx#,ny# Next EndIf End Function Gruß bommelid |
||
![]() |
BigSnake |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es wäre auch interessant zu wissen, wie oft sich ein Organismus durchschnittlich paart bevor er stirbt. | ||
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohne den Sourcecode gelesen zu haben:
Nach etwa zehn Minuten waren im Schnitt 180 lebend, eine Minute später (ein wenig die Maus bewegt), alle tot. Als die 180 lebten war's arg ruckelig. |
||
Gehe zu Seite Zurück 1, 2, 3, 4, 5 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group