Schwarm-Simulation
Übersicht

Gehe zu Seite Zurück 1, 2, 3, 4, 5 Weiter
CodeMaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich finde es ein wenig schade, dass dasjenige, worauf ich eigentlich am meisten stolz war, nämlich der Schwanz, in der jetzigen Simulation etwas zu hintergründig ist. Ich fänds besser, wenn du den wieder ein wenig hervorheben (und vor allem bei den weiblichen Organismen wieder anbauen [auch wenn's keine große Schwierigkeit darstellt, das selbst zu machen]) könntest.
Ansonsten wunderbar! Musst nur drauf achten, dass die Übersichtstabelle den eigentlichen Augenmerk, also die Organismen, nicht zu sehr überdeckt - sonst hat man ja nix davon ![]() |
||
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 ![]() |
|
---|---|---|
@wunderkind: Das stimmt leider. Bin mit BB auch noch nicht vertraut.
Wie müßte die berechnungen von der Zeit entkoppeln. Gleichzeitig muß es aber eine max. Geschwindigkeit geben, da man sonst am Anfang gar nichts sehen würde. Da müsst Ihr mir schon etwas Unterstützung geben. Trotzdem mal wieder eine Änderung. Anzeige für Nachkommen/Org. ist da, geht aber nicht richtig (bei kleiner 2 sollte die Zahl der Organismen ja abnehmen). Mit F1-F4 könnt Ihr verschiedene Sachen ausblenden (Birthplaces, Food, ...), um den Ablauf etwas zu beschleunigen. Code: [AUSKLAPPEN] Graphics 800,600,0,2
SetBuffer BackBuffer() SeedRnd MilliSecs() AppTitle "Schwarm-Simulation 2" Const StartingPop = 100 Const Lifetime = 30 Const Lifetimediffer# = 2 Const PotentAge = 6 Const ImpotentPeriod = 6 Const NoPleasurePeriod = 2 Const twinprob# = 0.012 Const tripletprob# = 0.00014 Const satisfiedtime = 5 Global ShowRelationships = True Global ShowBirthplaces = False Global ShowOrganisms = True Global isFood = False 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# Global avAge# Global avchildren# Global avLifetime# Global LivingfemOrganisms Global LivingmaleOrganisms Global Organisms = Startpop 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# Field children End Type Type Birthplace Field x# Field y# Field expiry End Type CreateSwarm(StartingPop) While Not KeyHit(1) If KeyHit(59) Then ShowRelationships = Not ShowRelationships If KeyHit(60) Then ShowBirthplaces = Not ShowBirthplaces If KeyHit(61) Then isFood = Not isFood If KeyHit(62) Then ShowOrganisms = Not ShowOrganisms 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#) Temp\children = 0 Temp2.Birthplace = New Birthplace Temp2\x# = x# Temp2\y# = y# Organisms = Organisms + 1 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 Temp\children = Temp\children + 1 Partner\children = Partner\children + 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 Temp\children = Temp\children + 1 Partner\children = Partner\children + 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 Temp\children = Temp\children + 1 Partner\children = Partner\children + 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,(255-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() avAge# = 0 avLifetime# = 0 avchildren# = 0 LivingfemOrganisms = 0 LivingmaleOrganisms = 0 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) If clr < 0 Then clr = 0 Color 0,0,clr If Temp\gender% = 1 Then Color clr,0,0 If ShowOrganisms Then DrawOrganism(Temp\x#,Temp\y#,Temp\dir#,age(Temp\birthtime)*10/(Lifetime*1000)+5,Temp\movement,Temp\gender%) avAge# = avAge# + age(Temp\birthtime) / 1000 avchildren# = avchildren# + Temp\children 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 avAge# = avAge# / (LivingfemOrganisms+LivingmaleOrganisms) avchildren# = avchildren# / Organisms Text 300,45," durchschn.Alter: " + avAge# Text 300,60," Nachkommen/Org.: " + avchildren# 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 "Schwarm Simulation 2 - 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 PS: mein ältester Organismus war vohin mal über 40s (bei Startwert von 30s) |
||
bommelid |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@CodeMaster: ok, der Schwanz kommt wieder rein (sicher in Stufen ausblendbar).
Dabei ging es mir nur um die Geschwindigkeit des Programms. Nicht böse sein ![]() Das ganze Sin/Cos Zeug braucht halt immer arg viel Rechenzeit. Die Statistik sollte die Organismen eigentlich nicht mehr überdecken. Gruß bommelid |
||
![]() |
BigSnake |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine Lösung wäre es schlicht für die 360° die sin/cos Werte am Anfang des Programms vorzuberechnen und in einem Array zu speichern. | ||
![]() |
Mandrason |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das sit so genial!!! | ||
Irren ist menschlich, und manche Menschen sind Irre
Albert Einstein |
bommelid |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@CodeMaster: Bitte nicht schlagen aber da ich ein wenig mit dem vererben von Eigenschaften experimentieren will, wollte ich den Frauen doch keine Schwänze mehr geben. Ich wollte die NoPleasurePeriod von der Länge abhängig machen (also je länger, desto kürzer die NoPleasurePeriod). Gibt es einen männlichen Nachkommen, wird die Länge mitvererbt (+/- ein Faktor, wie bei der Lebenserwartung).
Gleichzeitig sinkt mit zunehmender Länge aber die max. Geschwindigkeit des Männchens (kann ja nicht nur Vorteile geben!). Wenn Du damit nicht einverstanden bist, benutze ich dafür halt ein anderes Merkmal. @all: Bitte macht mal Vorschläge, was man noch so an "Genen" einbauen könnte. z.B. max. Geschwindigkeit, NoPleasurePeriod, vermehrte Häufigkeit von Mehrlingsgeburten usw. Oder auch eine Mutationsrate, die unabhängig von den Genen der Eltern, die Eigenschaften start verändern kann (die dürfte natürlich nur minimal sein, sonst rennen da nur noch Mutanten über den Bildschirm). Gruß bommelid |
||
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
genetisch sollten die viecher immer zwei werte transportieren, wovon einer halt inaktiv ist. hatte sowas in der schule zwar noch nicht, aber ich denke, das wäre besser.
die parungsgeschwindigkeit sowie die -reichweite sollte auch vererbbar sein. wenn man lust hat, kann man ja auch noch machen, dass sich die farbe etwas verändert und man mit einer bestimmten farbtönungsrichtung auf der einen bildschirmseite höhere überlebenschancen hat ![]() ich weiß nicht, ob es das im code schon gibt, aber evtl auch soetwas wie eine weibchenzielsuche, die genetisch ihre quallität verändern kann. ein bereich des bildschirms, in dem mutationen verstärkt vorkommen wäre übrigens lustig ![]() |
||
MrKeks.net |
bommelid |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Inarie hat Folgendes geschrieben: genetisch sollten die viecher immer zwei werte transportieren, wovon einer halt inaktiv ist. hatte sowas in der schule zwar noch nicht, aber ich denke, das wäre besser.
Wieso denkst Du, das wäre besser? Zitat: die parungsgeschwindigkeit sowie die -reichweite sollte auch vererbbar sein. wenn man lust hat, kann man ja auch noch machen, dass sich die farbe etwas verändert und man mit einer bestimmten farbtönungsrichtung auf der einen bildschirmseite höhere überlebenschancen hat
![]() Finde ich sehr gut. Besonders das mit der vorteilhaften Farbe in bestimmten Bereichen (sowas wie mit dunklerer Haut nicht so sonnenempfindlich zu sein). Zitat: ich weiß nicht, ob es das im code schon gibt, aber evtl auch soetwas wie eine weibchenzielsuche, die genetisch ihre quallität verändern kann.
Interessant, aber das werde ich wohl nach hinten schieben. Kann ja gerne jemand übernehmen. Zitat: ein bereich des bildschirms, in dem mutationen verstärkt vorkommen wäre übrigens lustig
![]() Finde ich auch sehr gut. Bereiche mit verstärkter Mutationsrate, verringerter Beweglichkeit, erhöhter Parungsdauer usw. Aber die Viecher müßten dann auch lernen und das Wissen weitervererben können. Gruß bommelid |
||
Buddah |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hab da noch nen paar ideen:
1. Wählerische weibchen.. es ist in der natur so das Weibchen auf die größten, buntesten. stärksten, mächtigesten etc Männchen stehen.. das hieße z.b. das weibchen mit einer sehr geringeren wahrscheinlichkeit Mutanten nehmen zur paarung. 2. wie wäre es mit einem Feind ?! der im grunde genauso "funktioniert" wie die kleinen racker.. nur das sie die kleinen racker als nahrungsquelle haben ![]() 3. so art umwelt katastrophen.. plötzlicher nahrungs mangel... vergiftete nahrung mit auswirkung auf mutations rate und/oder lebenszeit des nachwuchses etc. |
||
Alles ist gut so wie es ist und bald wird alles anders. |
bommelid |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Habe den Organismen mal noch die Eigenschaft "Attraktivität" gegeben.
Je attraktiver das Männchen, desto kürzer die Dauer der Paarung. Die Attraktivität des Weibchens wird dabei noch nicht berücksichtigt, fließt allerdings in die des Nachwuchses mit ein. Langfristig sollte die durchschnittliche Attraktivität steigen. Das konnte ich zwar auch nachvollziehen, allerdings ist es durch den zusätzlichen Zeitfaktor bei der Paarung nicht so leicht, wieder ein Gleichgewicht zu finden. Selbst bei 50 Startorganismen und 35 Jahren Lebenserwartung war die Population nach kurzer Zeit ausgestorben. Gruß bommelid |
||
bommelid |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
wieder ein Update, diesmal mit Raubtier. Das Vieh sucht sich immer den Organismus, der ihm am nächsten ist und bewegt sich in die Richtung. Ist ein ganzes Rudel in der Nähe, bringt das den Räuber durcheinander und er weiß nicht, welches Opfer er sich aussuchen soll (also fast wie im richtigen Leben). Ab einer gewissen Distanz fliehen die Organismen in die dem Räuber entgegengesetzte Richtung. Der ist aber etwas schneller. Sterben kann das Teil übrigens noch nicht (zwar kein Problem aber ich wollte erstmal testen). Code: [AUSKLAPPEN] AppTitle "Schwarm-Simulation 2"
Const StartingPop = 50 Const Lifetime = 35 Const Lifetimediffer# = 2 Const PotentAge = 6 Const ImpotentPeriod = 5 Const NoPleasurePeriod = 2 Const twinprob# = 0.012 Const tripletprob# = 0.00014 Const satisfiedtime = 10 Const coupletime# = 0.5 Const Normattractivity = 1 Global ShowRelationships = True Global ShowBirthplaces = False Global ShowOrganisms = True Global isFood = False 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# Global avAge# Global avchildren# Global avLifetime# Global LivingfemOrganisms Global LivingmaleOrganisms Global Organisms = Startpop Global Lasttic Global tail = 1 Global maxspeed# = 4 Global escapedist = 50 Global PredSize = 15 Global predvictums = 0 Dim costab#(360) Dim sintab#(360) Type FoodSource Field x# Field y# Field foodpoints Field origintime End Type Type Predator Field x# Field y# Field dir# Field size# Field speed# Field speedfactor# Field movement End Type Type Organism Field x# Field y# Field dir# Field speed# Field speedfactor# Field movement Field birthtime Field partner Field lastchild Field gender% Field lastfood Field lifeexpectancy# Field children Field attractivity# Field startcouple Field maxspeed# End Type Type Birthplace Field x# Field y# Field expiry End Type Function init() Graphics 800,600,0,2 SetBuffer BackBuffer() SeedRnd MilliSecs() For counter=0 To 360 costab#(counter) = Cos(counter) sintab#(counter) = Sin(counter) Next CreateSwarm(StartingPop) CreatePredator(Rnd(800),Rnd(540)+100) End Function Function CreateSwarm(OrganismCount) For i = 1 To OrganismCount CreateOrganism(Rnd(GraphicsWidth()),Rnd(GraphicsHeight()),Lifetime,Normattractivity) 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 CreatePredator(x#,y#) Temp.Predator = New Predator Temp\x# = x# Temp\y# = y# Temp\dir# = Rand(360) temp\size = PredSize Temp\speed# = 3 Temp\speedfactor# = 1 Temp\movement = Rand(360) End Function Function CreateOrganism(x#,y#,Lifetimetemp#,attractivity#) Temp.Organism = New Organism Temp\x# = x# Temp\y# = y# Temp\dir# = Rand(360) Temp\speed = 0 Temp\speedfactor = 1 temp\maxspeed# = maxspeed + Rnd(-1,1) 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#) Temp\children = 0 Temp\attractivity# = attractivity# + Rnd(-0.2,0.2) Temp\startcouple = MilliSecs() + Temp\lifeexpectancy# * 1000 Temp2.Birthplace = New Birthplace Temp2\x# = x# Temp2\y# = y# Organisms = Organisms + 1 End Function Function UpdatePredator() For Temp.Predator = Each Predator Temp\Speed# = Temp\speed# + Rnd(-1,1) If Temp\Speed# < 0 Then Temp\speed# = 0 If Temp\Speed# > 6 Then Temp\speed# = 6 Temp\movement = (Temp\movement + Temp\speed# * 10 * Temp\speedfactor#) Mod 360 nearest# = 1000 For tmporg.Organism = Each Organism If distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) < PredSize Then Delete tmporg deaths = deaths + 1 predvictums = predvictums + 1 ElseIf distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) < nearest# Then nearest# = distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) dirtofood# = ATan((Temp\y# - tmporg\y#) / (Temp\x# - tmporg\x#)) If dirtofood# < 0 Then dirtofood# = dirtofood# + 360 If tmporg\x# < Temp\x# Then dirtofood# = (dirtofood# + 180) Mod 360 Temp\dir# = (dirtofood#) Mod 360 EndIf Next Temp\dir# = (Temp\dir# + Rnd(-2,2) + 360) Mod 360 Temp\x# = Temp\x# + Cos(Temp\dir#) * Temp\speed# * Temp\speedfactor# Temp\y# = Temp\y# + Sin(Temp\dir#) * Temp\speed# * Temp\speedfactor# 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 Next 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 (ReadPixel(Temp\x, Temp\y) And $FFFFFF) = $408040 Then Temp\speedfactor# = 0.5 ElseIf (ReadPixel(Temp\x, Temp\y) And $FFFFFF) = $000000 Then Temp\speedfactor# = 1 EndIf If Temp\Speed# < 0 Then Temp\speed# = 0 If Temp\Speed# > Temp\maxspeed# Then Temp\speed# = Temp\maxspeed# Temp\movement = (Temp\movement + Temp\speed# * 10 * Temp\speedfactor#) 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 * Temp\speedfactor# 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 If (Temp\gender = 1) And (age(Temp\startcouple) > (coupletime# / Partner\attractivity#) * 1000) Then ElseIf (Temp\gender = 0) And (age(Partner\startcouple) > (coupletime# / Temp\attractivity#) * 1000) Then births = births + 1 Temp\children = Temp\children + 1 Partner\children = Partner\children + 1 multibirth# = Rnd(0, 1) CreateOrganism(Temp\x#,Temp\y#,(Temp\lifeexpectancy#+Partner\lifeexpectancy#)/2,(Temp\attractivity#+Partner\attractivity#)/2) If multibirth# <= twinprob# Then births = births + 1 twins = twins + 1 Temp\children = Temp\children + 1 Partner\children = Partner\children + 1 CreateOrganism(Temp\x#,Temp\y#,(Temp\lifeexpectancy#+Partner\lifeexpectancy#)/2,(Temp\attractivity#+Partner\attractivity#)/2) EndIf If multibirth# <= tripletprob# Then twins = twins - 1 births = births + 1 triplets = triplets + 1 Temp\children = Temp\children + 1 Partner\children = Partner\children + 1 CreateOrganism(Temp\x#,Temp\y#,(Temp\lifeexpectancy#+Partner\lifeexpectancy#)/2,(Temp\attractivity#+Partner\attractivity#)/2) EndIf Temp\lastchild = MilliSecs() Partner\lastchild = MilliSecs() Temp\partner = 0 Partner\partner = 0 EndIf 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) Temp\startcouple = MilliSecs() NewPartner\partner = Handle(Temp) NewPartner\startcouple = MilliSecs() EndIf EndIf EndIf EndIf EndIf Next Temp\dir# = (Temp\dir# + Rnd(-2,2) + 360) Mod 360 EndIf For tmppred.Predator = Each Predator If distance#(Temp\x#,Temp\y#,tmppred\x#,tmppred\y#) < escapedist Then dirtopred# = ATan((Temp\y# - tmppred\y#) / (Temp\x# - tmppred\x#)) If dirtopred# < 0 Then dirtopred# = dirtopred# + 360 If tmppred\x# < Temp\x# Then dirtopred# = (dirtopred# + 180) Mod 360 Temp\speed# = Temp\maxspeed# Temp\dir# = (dirtopred# + 180) Mod 360 EndIf Next Temp\x# = Temp\x# + Cos(Temp\dir#) * Temp\speed# * Temp\speedfactor# Temp\y# = Temp\y# + Sin(Temp\dir#) * Temp\speed# * Temp\speedfactor# 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,(255-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 ShowPredator() For Temp.Predator = Each Predator DrawPredator(Temp\x#,Temp\y#,Temp\size,Temp\dir#,Temp\movement) Next End Function Function ShowSwarm() minattractivity# = 5 LivingfemOrganisms = 0 LivingmaleOrganisms = 0 For Temp.Organism = Each Organism If Temp\lifeexpectancy# > maxlifeexpectancy# Then maxlifeexpectancy# = Temp\lifeexpectancy# If Temp\lifeexpectancy# < minlifeexpectancy# Then minlifeexpectancy# = Temp\lifeexpectancy# If Temp\attractivity# < minattractivity# Then minattractivity# = Temp\attractivity# If Temp\attractivity# > maxattractivity# Then maxattractivity# = Temp\attractivity# avLifetime# = avLifetime# + Temp\lifeexpectancy# avattractivity# = avattractivity# + Temp\attractivity# 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) If clr < 0 Then clr = 0 Color 0,0,clr If Temp\gender% = 1 Then Color clr,0,0 If ShowOrganisms Then DrawOrganism(Temp\x#,Temp\y#,Temp\dir#,age(Temp\birthtime)*10/(Temp\lifeexpectancy*1000)+5,Temp\movement,Temp\gender%,Temp\attractivity) avAge# = avAge# + age(Temp\birthtime) / 1000 avchildren# = avchildren# + Temp\children Next Color 255,0,0 Text 1,1,"Lebendige weibliche Organismen: " + LivingfemOrganisms Color 0,0,255 Text 1,12,"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 Text 300,45,"max. Attraktivität: " + maxattractivity Text 300,60,"min. Attraktivität: " + minattractivity avattractivity# = avattractivity# / (LivingfemOrganisms+LivingmaleOrganisms) Text 300,75,"durchschn.Attrakt.: " + avattractivity If LivingfemOrganisms+LivingmaleOrganisms > maxpop Then maxpop = LivingfemOrganisms+LivingmaleOrganisms ElseIf LivingfemOrganisms+LivingmaleOrganisms < minpop Then minpop = LivingfemOrganisms+LivingmaleOrganisms EndIf Text 550,0," natürl. Todesfälle: " + (deaths - predvictums) Text 550,15," Raubtieropfer: " + predvictums Text 550,30,"maximale Population: " + maxpop Text 550,45,"minimale Population: " + minpop avAge# = avAge# / (LivingfemOrganisms+LivingmaleOrganisms) avchildren# = avchildren# / Organisms Text 550,45,"durchschn.Alter: " + avAge# Text 550,60,"Nachkommen/Org.: " + avchildren# AppTitle "Schwarm Simulation 2 - 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 DrawPredator(x#,y#,size#,dir#,anim) Color 128,128,128 Oval x#-size#/2,y#-size#/2,size#,size#,1 nx1# = x# + Cos(dir#-5) * size# / 2 ny1# = y# + Sin(dir#-5) * size# / 2 nx2# = x# + Cos(dir#+5) * size# / 2 ny2# = y# + Sin(dir#+5) * size# / 2 For i = 1 To size# / 2 ox1# = nx1# oy1# = ny1# ox2# = nx2# oy2# = ny2# nx1# = x# + Cos(180 + dir# - 5) * (size# / 2 + i*4) + Cos(180+dir#+85) * Sin(anim - i * (360 / size#)) * i * .75 ny1# = y# + Sin(180 + dir# - 5) * (size# / 2 + i*4) + Sin(180+dir#+85) * Sin(anim - i * (360 / size#)) * i * .75 nx2# = x# + Cos(180 + dir# + 5) * (size# / 2 + i*4) + Cos(180+dir#+95) * Sin(anim - i * (360 / size#)) * i * .75 ny2# = y# + Sin(180 + dir# + 5) * (size# / 2 + i*4) + Sin(180+dir#+95) * Sin(anim - i * (360 / size#)) * i * .75 Line ox1#,oy1#,nx1#,ny1# Line ox2#,oy2#,nx2#,ny2# Next Color 255,255,255 End Function Function DrawOrganism(x#,y#,dir#,size#,anim,gender%,attractivity) Oval x#-size#/2,y#-size#/2,size#,size#,1 If gender% = 0 And tail < 5 Then nx# = x# + Cos(dir#) * size# / 2 ny# = y# + Sin(dir#) * size# / 2 For i = 1 To size# * attractivity / tail 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 Function UpdateSpecialAreas() Color 64, 128, 64 Rect 150, 150, 200, 120, True Color 255, 255, 255 End Function init() While Not KeyHit(1) If KeyHit(59) Then ShowRelationships = Not ShowRelationships If KeyHit(60) Then ShowBirthplaces = Not ShowBirthplaces If KeyHit(61) Then isFood = Not isFood If KeyHit(62) Then ShowOrganisms = Not ShowOrganisms If KeyHit(78) And tail > 1 Then tail = tail - 1 If KeyHit(74) And tail < 5 Then tail = tail + 1 If MilliSecs() - Lasttic >= 40 Then Lasttic = MilliSecs() Cls ; UpdateSpecialAreas UpdatePredator UpdateSwarm UpdateBirthplaces ShowPredator ShowSwarm If isFood Then ShowFood Flip EndIf Wend FreeFont deffont End Gruß bommelid |
||
bommelid |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
da der Code immer unübersichtlicher wurde (besonders hier im Thread), habe ich das Programm mal aufgeteilt. So behält man doch eher den Überblick und wenn jemand was updatet, muß nicht immer das ganze Programm gepostet werden. Ich hoffe auch, daß dadurch mehr Leute Vorschläge einbringen (in Form von Code). hier also nun die Teile: main.bbCode: [AUSKLAPPEN] AppTitle "Schwarm-Simulation 3"
Include "variablen.bb" Include "createthings.bb" Include "math.bb" Include "simpleai.bb" Include "show.bb" Function init() Graphics 800,600,0,2 SetBuffer BackBuffer() SeedRnd MilliSecs() CreateSwarm(StartingPop) CreatePredator(Rnd(800),Rnd(540)+100) End Function init() While Not KeyHit(1) If KeyHit(59) Then ShowRelationships = Not ShowRelationships If KeyHit(60) Then ShowBirthplaces = Not ShowBirthplaces If KeyHit(61) Then isFood = Not isFood If KeyHit(62) Then ShowOrganisms = Not ShowOrganisms If KeyHit(78) And tail > 1 Then tail = tail - 1 If KeyHit(74) And tail < 5 Then tail = tail + 1 If MilliSecs() - Lasttic >= 40 Then Lasttic = MilliSecs() Cls ; UpdateSpecialAreas UpdatePredator UpdateSwarm UpdateBirthplaces ShowPredator ShowSwarm If isFood Then ShowFood Flip EndIf Wend End variablen.bbCode: [AUSKLAPPEN] Const StartingPop = 50
Const Lifetime = 35 Const Lifetimediffer# = 2 Const PotentAge = 6 Const ImpotentPeriod = 5 Const NoPleasurePeriod = 2 Const twinprob# = 0.012 Const tripletprob# = 0.00014 Const satisfiedtime = 10 Const coupletime# = 0.5 Const Normattractivity = 1 Const nostarvingtime = 4 Global ShowRelationships = True Global ShowBirthplaces = False Global ShowOrganisms = True Global isFood = False 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# Global avAge# Global avchildren# Global avLifetime# Global LivingfemOrganisms Global LivingmaleOrganisms Global Organisms = Startpop Global Lasttic Global tail = 1 Global maxspeed# = 4 Global escapedist = 40 Global PredSize = 15 Global predvictums = 0 Type FoodSource Field x# Field y# Field foodpoints Field origintime End Type Type Predator Field x# Field y# Field dir# Field size# Field speed# Field speedfactor# Field movement Field lastfood End Type Type Organism Field x# Field y# Field dir# Field speed# Field speedfactor# Field movement Field birthtime Field partner Field lastchild Field gender% Field lastfood Field lifeexpectancy# Field children Field attractivity# Field startcouple Field maxspeed# Field social# End Type Type Birthplace Field x# Field y# Field expiry End Type createthings.bbCode: [AUSKLAPPEN] Function CreateSwarm(OrganismCount)
For i = 1 To OrganismCount CreateOrganism(Rnd(GraphicsWidth()),Rnd(GraphicsHeight()),Lifetime,Normattractivity,1) Next End Function Function CreateFoodSource(x#, y#) Temp.FoodSource = New FoodSource Temp\x# = x# Temp\y# = y# Temp\foodpoints = 10 Temp\origintime = MilliSecs() End Function Function CreatePredator(x#,y#) Temp.Predator = New Predator Temp\x# = x# Temp\y# = y# Temp\dir# = Rand(360) temp\size = PredSize Temp\speed# = 3 Temp\speedfactor# = 1 Temp\movement = Rand(360) Temp\lastfood = MilliSecs() End Function Function CreateOrganism(x#,y#,Lifetimetemp#,attractivity#,social#) Temp.Organism = New Organism Temp\x# = x# Temp\y# = y# Temp\dir# = Rand(360) Temp\speed = 0 Temp\speedfactor = 1 temp\maxspeed# = maxspeed * Rnd(0.75, 1.25) 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#) Temp\children = 0 Temp\attractivity# = attractivity# * Rnd(0.8, 1.2) Temp\startcouple = MilliSecs() + Temp\lifeexpectancy# * 1000 Temp\social# = social# * Rnd(0.9, 1.1) Temp2.Birthplace = New Birthplace Temp2\x# = x# Temp2\y# = y# Organisms = Organisms + 1 End Function math.bbCode: [AUSKLAPPEN] 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 simpleai.bbCode: [AUSKLAPPEN] Function UpdatePredator()
For Temp.Predator = Each Predator Temp\Speed# = Temp\speed# + Rnd(-1,1) If Temp\Speed# < 0 Then Temp\speed# = 0 If Temp\Speed# > 6 Then Temp\speed# = 6 Temp\movement = (Temp\movement + Temp\speed# * 10 * Temp\speedfactor#) Mod 360 If age(Temp\lastfood) / 1000 > nostarvingtime Then nearest# = 1000 For tmporg.Organism = Each Organism If distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) < PredSize Then Delete tmporg deaths = deaths + 1 predvictums = predvictums + 1 Temp\lastfood = MilliSecs() ElseIf distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) < nearest# - 5 Then nearest# = distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) dirtofood# = ATan((Temp\y# - tmporg\y#) / (Temp\x# - tmporg\x#)) If dirtofood# < 0 Then dirtofood# = dirtofood# + 360 If tmporg\x# < Temp\x# Then dirtofood# = (dirtofood# + 180) Mod 360 Temp\dir# = (dirtofood#) Mod 360 EndIf Next If Temp\Speed# < 4 Then Temp\Speed = 4 EndIf Temp\dir# = (Temp\dir# + Rnd(-2,2) + 360) Mod 360 Temp\x# = Temp\x# + Cos(Temp\dir#) * Temp\speed# * Temp\speedfactor# Temp\y# = Temp\y# + Sin(Temp\dir#) * Temp\speed# * Temp\speedfactor# 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 Next End Function Function UpdateSwarm() For Temp.Organism = Each Organism If age(Temp\birthtime) > Temp\lifeexpectancy#*1000 Then CreateFoodSource(Temp\x#,Temp\y#) Delete Temp deaths = deaths + 1 Else Temp\Speed# = Temp\speed# + Rnd(-1,1) If (ReadPixel(Temp\x, Temp\y) And $FFFFFF) = $408040 Then Temp\speedfactor# = 0.5 ElseIf (ReadPixel(Temp\x, Temp\y) And $FFFFFF) = $000000 Then Temp\speedfactor# = 1 EndIf If Temp\Speed# < 0 Then Temp\speed# = 0 If Temp\Speed# > Temp\maxspeed# Then Temp\speed# = Temp\maxspeed# Temp\movement = (Temp\movement + Temp\speed# * 10 * Temp\speedfactor#) 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 * Temp\speedfactor# 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 If (Temp\gender = 1) And (age(Temp\startcouple) > (coupletime# / Partner\attractivity#) * 1000) Then ElseIf (Temp\gender = 0) And (age(Partner\startcouple) > (coupletime# / Temp\attractivity#) * 1000) Then births = births + 1 Temp\children = Temp\children + 1 Partner\children = Partner\children + 1 multibirth# = Rnd(0, 1) CreateOrganism(Temp\x#,Temp\y#,(Temp\lifeexpectancy#+Partner\lifeexpectancy#)/2,(Temp\attractivity#+Partner\attractivity#)/2,(Temp\social#+Partner\social#)/2) If multibirth# <= twinprob# Then births = births + 1 twins = twins + 1 Temp\children = Temp\children + 1 Partner\children = Partner\children + 1 CreateOrganism(Temp\x#,Temp\y#,(Temp\lifeexpectancy#+Partner\lifeexpectancy#)/2,(Temp\attractivity#+Partner\attractivity#)/2,(Temp\social#+Partner\social#)/2) EndIf If multibirth# <= tripletprob# Then twins = twins - 1 births = births + 1 triplets = triplets + 1 Temp\children = Temp\children + 1 Partner\children = Partner\children + 1 CreateOrganism(Temp\x#,Temp\y#,(Temp\lifeexpectancy#+Partner\lifeexpectancy#)/2,(Temp\attractivity#+Partner\attractivity#)/2,(Temp\social#+Partner\social#)/2) EndIf Temp\lastchild = MilliSecs() Partner\lastchild = MilliSecs() Temp\partner = 0 Partner\partner = 0 EndIf 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) Temp\startcouple = MilliSecs() NewPartner\partner = Handle(Temp) NewPartner\startcouple = MilliSecs() EndIf EndIf EndIf EndIf EndIf Next Temp\dir# = (Temp\dir# + Rnd(-2,2) + 360) Mod 360 EndIf issocial = False For tmporg.Organism = Each Organism If (distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) < 100*Temp\social#) And (distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) <> 0) Then issocial = True Next If Not issocial Then nearest# = 1000 For tmporg.Organism = Each Organism If (distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) < nearest# - 5) And (distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) <> 0) Then nearest# = distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) dirtoorg# = ATan((Temp\y# - tmporg\y#) / (Temp\x# - tmporg\x#)) If dirtoorg# < 0 Then dirtoorg# = dirtoorg# + 360 If tmporg\x# < Temp\x# Then dirtoorg# = (dirtofood# + 180) Mod 360 Temp\dir# = (dirtoorg#) Mod 360 EndIf Next EndIf For tmppred.Predator = Each Predator If distance#(Temp\x#,Temp\y#,tmppred\x#,tmppred\y#) < escapedist Then dirtopred# = ATan((Temp\y# - tmppred\y#) / (Temp\x# - tmppred\x#)) If dirtopred# < 0 Then dirtopred# = dirtopred# + 360 If tmppred\x# < Temp\x# Then dirtopred# = (dirtopred# + 180) Mod 360 Temp\speed# = Temp\maxspeed# Temp\dir# = (dirtopred# + 180) Mod 360 EndIf Next Temp\x# = Temp\x# + Cos(Temp\dir#) * Temp\speed# * Temp\speedfactor# Temp\y# = Temp\y# + Sin(Temp\dir#) * Temp\speed# * Temp\speedfactor# 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 show.bbCode: [AUSKLAPPEN] Function ShowFood()
For Temp.FoodSource = Each FoodSource If age(Temp\origintime) > 10*1000 Then Delete Temp Else Color 0,(255-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 ShowPredator() For Temp.Predator = Each Predator DrawPredator(Temp\x#,Temp\y#,Temp\size,Temp\dir#,Temp\movement,Temp\lastfood) Next End Function Function ShowSwarm() minattractivity# = 5 LivingfemOrganisms = 0 LivingmaleOrganisms = 0 For Temp.Organism = Each Organism If Temp\lifeexpectancy# > maxlifeexpectancy# Then maxlifeexpectancy# = Temp\lifeexpectancy# If Temp\lifeexpectancy# < minlifeexpectancy# Then minlifeexpectancy# = Temp\lifeexpectancy# If Temp\attractivity# < minattractivity# Then minattractivity# = Temp\attractivity# If Temp\attractivity# > maxattractivity# Then maxattractivity# = Temp\attractivity# avLifetime# = avLifetime# + Temp\lifeexpectancy# avattractivity# = avattractivity# + Temp\attractivity# hunger = (MilliSecs() - Temp\lastfood)/1000 If Temp\gender% = 1 Then LivingfemOrganisms = LivingfemOrganisms + 1 Else LivingmaleOrganisms = LivingmaleOrganisms + 1 EndIf clr = 255 - (200 / Temp\lifeexpectancy#) * (age(Temp\birthtime) / 1000) If clr < 0 Then clr = 0 Color 0,0,clr If Temp\gender% = 1 Then Color clr,0,0 If ShowOrganisms Then DrawOrganism(Temp\x#,Temp\y#,Temp\dir#,age(Temp\birthtime)*10/(Temp\lifeexpectancy*1000)+5,Temp\movement,Temp\gender%,Temp\attractivity) avAge# = avAge# + age(Temp\birthtime) / 1000 avchildren# = avchildren# + Temp\children Next Color 255,0,0 Text 1,1," weibl.Org.: " + LivingfemOrganisms Color 0,0,255 Text 1,12," männl.Org.: " + LivingmaleOrganisms Color 255,255,255 Text 1,30," Org.insg.: " + (LivingfemOrganisms+LivingmaleOrganisms) Text 1,45,"Geb.insgesamt: " + births Text 1,60,"Zwillingsgeb.: " + twins Text 1,75,"Drillingsgeb.: " + triplets Text 170,1,"max.Lebenserw.: " + maxlifeexpectancy# Text 170,15,"min.Lebenserw.: " + minlifeexpectancy# avLifetime# = avLifetime# / (LivingfemOrganisms+LivingmaleOrganisms) Text 170,30,"avr Lebenserw.: " + avLifetime# Text 170,45," max.Attrakt.: " + maxattractivity Text 170,60," min.Attrakt.: " + minattractivity avattractivity# = avattractivity# / (LivingfemOrganisms+LivingmaleOrganisms) Text 170,75," avr Attrakt.: " + avattractivity If LivingfemOrganisms+LivingmaleOrganisms > maxpop Then maxpop = LivingfemOrganisms+LivingmaleOrganisms ElseIf LivingfemOrganisms+LivingmaleOrganisms < minpop Then minpop = LivingfemOrganisms+LivingmaleOrganisms EndIf Text 400,0,"nat.Todesfälle: " + (deaths - predvictums) Text 400,15," Raubtieropfer: " + predvictums Text 400,30,"max.Population: " + maxpop Text 400,45,"min.Population: " + minpop avAge# = avAge# / (LivingfemOrganisms+LivingmaleOrganisms) avchildren# = avchildren# / (LivingfemOrganisms+LivingmaleOrganisms) Text 400,60," avr Alter: " + avAge# Text 400,75," Nachk./Org.: " + avchildren# AppTitle "Schwarm Simulation 3 - 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 DrawPredator(x#,y#,size#,dir#,anim,lastfood) Color 128,128,128 Oval x#-size#/2,y#-size#/2,size#,size#,1 nx1# = x# + Cos(dir#-5) * size# / 2 ny1# = y# + Sin(dir#-5) * size# / 2 nx2# = x# + Cos(dir#+5) * size# / 2 ny2# = y# + Sin(dir#+5) * size# / 2 For i = 1 To size# / 2 ox1# = nx1# oy1# = ny1# ox2# = nx2# oy2# = ny2# nx1# = x# + Cos(180 + dir# - 5) * (size# / 2 + i*4) + Cos(180+dir#+85) * Sin(anim - i * (360 / size#)) * i * .75 ny1# = y# + Sin(180 + dir# - 5) * (size# / 2 + i*4) + Sin(180+dir#+85) * Sin(anim - i * (360 / size#)) * i * .75 nx2# = x# + Cos(180 + dir# + 5) * (size# / 2 + i*4) + Cos(180+dir#+95) * Sin(anim - i * (360 / size#)) * i * .75 ny2# = y# + Sin(180 + dir# + 5) * (size# / 2 + i*4) + Sin(180+dir#+95) * Sin(anim - i * (360 / size#)) * i * .75 Line ox1#,oy1#,nx1#,ny1# Line ox2#,oy2#,nx2#,ny2# Next If age(lastfood) / 1000 < nostarvingtime Then Color 0,255,0 Else Color 255,0,0 EndIf Oval x#-size#/4,y#-size#/4,size#/2,size#/2,1 Color 255,255,255 End Function Function DrawOrganism(x#,y#,dir#,size#,anim,gender%,attractivity) Oval x#-size#/2,y#-size#/2,size#,size#,1 If gender% = 0 And tail < 5 Then nx# = x# + Cos(dir#) * size# / 2 ny# = y# + Sin(dir#) * size# / 2 For i = 1 To size# * attractivity / tail 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 Function UpdateSpecialAreas() Color 64, 128, 64 Rect 150, 150, 200, 120, True Color 255, 255, 255 End Function Ein paar kleine Änderungen zur Vorversion sind auch drin. Hat der Räuber gefressen, ist er für einige Zeit satt (grüner Punkt). Hat er wieder Hunger, wird der Punkt auf dem Körper rot. Die Organismen haben ein social-"Gen". Sind in einem bestimmten Umkreis keine anderen Organismen, suchen sie den nächsten und laufen hin. Gruß bommelid |
||
IonPainter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
schwarm ist nach ca 180 sekunden abgenippelt | ||
bommelid |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, ist bei mir im Moment auch so. Durch die Änderungen stimmen die Parameter nicht mehr. Wenn jemand gut Werte für die einzelnen Parameter findet, bitte posten ![]() Gruß bommelid |
||
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi.....
ist echt klasse. Jetzt das ganze noch in 3D in einem Würfel...... |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
littleRabbit |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dieser Orga(ni)smus ist zwar süß aber irgendwie fehlt da noch was...
Vielleicht etwas mehr Farbe? |
||
Eisrabe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
leute, dieser Thread und das gemeinschaftsprojekt (super ![]() da ich gamedesigner bin (wenn auch NOCH nicht beruflich) hätte ich bestimmt einige Anregungen. besonders, wie man daraus ein game machen kann. aber leider konnte ich bis auf die ersten beiden listings die anderen nicht ansehen. ich bekomme bei ALLEN anderen listings bei DER zeile den Fehler: Function not found Code: [AUSKLAPPEN] Partner.Organism = Object.Organism(Temp\partner)
sobald ich es mal sehe, kommen auch Vorschläge von mir, was design und spielbarkeit betrifft. mit dem coden hab ich es nicht so. habe auch grad erst mit BB angefangen. ich bin eh mehr der kreative visionär als der ausführende. wie kann ich den fehler beheben? oder liegts an meinem BB2D ? |
||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
bommelid |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi Eisrabe,
kann mir nicht vorstellen, daß der Fehler was mit Blitz2d zu tun hat. Ich poste einfach mal die Dateien, wie sie jetzt sind. Leider habe ich fast alle verändert, muß also doch wieder viel posten. Das ist zwar etwas umständlich für Euch aber wesentlich übersichtlicher für mich, sorry. Gibt nicht viel Neues (habe kaum Zeit im Moment). Farben werden vererbt, wie genau steht in genetics.bb. Falls es trotzdem nicht funzt, kann ich dir auch die .exe packen und mailen. main.bb: Code: [AUSKLAPPEN] AppTitle "Schwarm-Simulation 3"
Include "variablen.bb" Include "createthings.bb" Include "math.bb" Include "simpleai.bb" Include "show.bb" Include "genetics.bb" Function init() Graphics 800,600,0,2 SetBuffer BackBuffer() ClsColor 32,32,128 SeedRnd MilliSecs() CreateSwarm(StartingPop) CreatePredator(Rnd(800),Rnd(540)+100) Timetics = 0 End Function init() While Not KeyHit(1) If KeyHit(59) Then ShowRelationships = Not ShowRelationships If KeyHit(60) Then ShowBirthplaces = Not ShowBirthplaces If KeyHit(61) Then isFood = Not isFood If KeyHit(62) Then ShowOrganisms = Not ShowOrganisms If KeyHit(78) And tail > 1 Then tail = tail - 1 If KeyHit(74) And tail < 5 Then tail = tail + 1 If MilliSecs() - Lasttic >= 40 Then Lasttic = MilliSecs() Cls ; UpdateSpecialAreas UpdatePredator UpdateSwarm UpdateBirthplaces ShowPredator ShowSwarm If isFood Then ShowFood Flip EndIf Wend End simpleai.bb: Code: [AUSKLAPPEN] Function UpdatePredator()
For Temp.Predator = Each Predator Temp\Speed# = Temp\speed# + Rnd(-1,1) If Temp\Speed# < 0 Then Temp\speed# = 0 If Temp\Speed# > 6 Then Temp\speed# = 6 Temp\movement = (Temp\movement + Temp\speed# * 10 * Temp\speedfactor#) Mod 360 If age(Temp\lastfood) / 1000 > nostarvingtime Then nearest# = 1000 For tmporg.Organism = Each Organism If distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) < PredSize Then Delete tmporg deaths = deaths + 1 predvictums = predvictums + 1 Temp\lastfood = MilliSecs() ElseIf distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) < nearest# - 5 Then nearest# = distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) dirtofood# = ATan((Temp\y# - tmporg\y#) / (Temp\x# - tmporg\x#)) If dirtofood# < 0 Then dirtofood# = dirtofood# + 360 If tmporg\x# < Temp\x# Then dirtofood# = (dirtofood# + 180) Mod 360 Temp\dir# = (dirtofood#) Mod 360 EndIf Next If Temp\Speed# < 4 Then Temp\Speed = 4 EndIf Temp\dir# = (Temp\dir# + Rnd(-2,2) + 360) Mod 360 Temp\x# = Temp\x# + Cos(Temp\dir#) * Temp\speed# * Temp\speedfactor# Temp\y# = Temp\y# + Sin(Temp\dir#) * Temp\speed# * Temp\speedfactor# If (Temp\x# < 0) And (Temp\dir# > 90) And (Temp\dir# < 270) Then Temp\dir# = (360-(Temp\dir#-180)) Mod 360 ;Temp\x# = Temp\x# + GraphicsWidth() If (Temp\x# > GraphicsWidth()) And ((Temp\dir# < 90) Or (Temp\dir# > 270)) Then Temp\dir# = (360-(Temp\dir#-180)) Mod 360 ;Temp\x# = Temp\x# - GraphicsWidth() If (Temp\y# < 100) And (Temp\dir# > 180) Then Temp\dir# = (360-Temp\dir#) Mod 360 ;Temp\y# = Temp\y# + GraphicsHeight() - 100 If (Temp\y# > GraphicsHeight()) And (Temp\dir# < 180) Then Temp\dir# = (360-Temp\dir#) Mod 360 ;Temp\y# = Temp\y# - GraphicsHeight() + 100 Next End Function Function UpdateSwarm() For Temp.Organism = Each Organism If age(Temp\birthtime) > Temp\lifeexpectancy#*1000 Then CreateFoodSource(Temp\x#,Temp\y#) Delete Temp deaths = deaths + 1 Else Temp\Speed# = Temp\speed# + Rnd(-1,1) If (ReadPixel(Temp\x, Temp\y) And $FFFFFF) = $408040 Then Temp\speedfactor# = 0.5 ElseIf (ReadPixel(Temp\x, Temp\y) And $FFFFFF) = $000000 Then Temp\speedfactor# = 1 EndIf If Temp\Speed# < 0 Then Temp\speed# = 0 If Temp\Speed# > Temp\maxspeed# Then Temp\speed# = Temp\maxspeed# Temp\movement = (Temp\movement + Temp\speed# * 10 * Temp\speedfactor#) 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 * Temp\speedfactor# 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 If (Temp\gender = 1) And (age(Temp\startcouple) > (coupletime# / Partner\attractivity#) * 1000) Then ElseIf (Temp\gender = 0) And (age(Partner\startcouple) > (coupletime# / Temp\attractivity#) * 1000) Then births = births + 1 Temp\children = Temp\children + 1 Partner\children = Partner\children + 1 multibirth# = Rnd(0, 1) CreateOrganism(Temp\x#,Temp\y#,(Temp\lifeexpectancy#+Partner\lifeexpectancy#)/2,(Temp\attractivity#+Partner\attractivity#)/2,(Temp\social#+Partner\social#)/2,Temp\red,Temp\green,Temp\blue,Partner\red,Partner\green,Partner\blue,True) If multibirth# <= twinprob# Then births = births + 1 twins = twins + 1 Temp\children = Temp\children + 1 Partner\children = Partner\children + 1 CreateOrganism(Temp\x#,Temp\y#,(Temp\lifeexpectancy#+Partner\lifeexpectancy#)/2,(Temp\attractivity#+Partner\attractivity#)/2,(Temp\social#+Partner\social#)/2,Temp\red,Temp\green,Temp\blue,Partner\red,Partner\green,Partner\blue,True) EndIf If multibirth# <= tripletprob# Then twins = twins - 1 births = births + 1 triplets = triplets + 1 Temp\children = Temp\children + 1 Partner\children = Partner\children + 1 CreateOrganism(Temp\x#,Temp\y#,(Temp\lifeexpectancy#+Partner\lifeexpectancy#)/2,(Temp\attractivity#+Partner\attractivity#)/2,(Temp\social#+Partner\social#)/2,Temp\red,Temp\green,Temp\blue,Partner\red,Partner\green,Partner\blue,True) EndIf Temp\lastchild = MilliSecs() Partner\lastchild = MilliSecs() Temp\partner = 0 Partner\partner = 0 EndIf 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) Temp\startcouple = MilliSecs() NewPartner\partner = Handle(Temp) NewPartner\startcouple = MilliSecs() EndIf EndIf EndIf EndIf EndIf Next Temp\dir# = (Temp\dir# + Rnd(-2,2) + 360) Mod 360 EndIf issocial = False For tmporg.Organism = Each Organism If (distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) < 60/Temp\social#) And (distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) <> 0) Then issocial = True Next If Not issocial Then nearest# = 1000 For tmporg.Organism = Each Organism If (distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) < nearest# - 5) And (distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) <> 0) Then nearest# = distance#(Temp\x#,Temp\y#,tmporg\x#,tmporg\y#) dirtoorg# = ATan((Temp\y# - tmporg\y#) / (Temp\x# - tmporg\x#)) If dirtoorg# < 0 Then dirtoorg# = dirtoorg# + 360 If tmporg\x# < Temp\x# Then dirtoorg# = (dirtofood# + 180) Mod 360 Temp\dir# = (dirtoorg#) Mod 360 EndIf Next EndIf For tmppred.Predator = Each Predator If distance#(Temp\x#,Temp\y#,tmppred\x#,tmppred\y#) < escapedist Then dirtopred# = ATan((Temp\y# - tmppred\y#) / (Temp\x# - tmppred\x#)) If dirtopred# < 0 Then dirtopred# = dirtopred# + 360 If tmppred\x# < Temp\x# Then dirtopred# = (dirtopred# + 180) Mod 360 Temp\speed# = Temp\maxspeed# Temp\dir# = (dirtopred# + 180) Mod 360 EndIf Next Temp\x# = Temp\x# + Cos(Temp\dir#) * Temp\speed# * Temp\speedfactor# Temp\y# = Temp\y# + Sin(Temp\dir#) * Temp\speed# * Temp\speedfactor# If (Temp\x# < 0) And (Temp\dir# > 90) And (Temp\dir# < 270) Then Temp\dir# = (360-(Temp\dir#-180)) Mod 360 ;Temp\x# = Temp\x# + GraphicsWidth() If (Temp\x# > GraphicsWidth()) And ((Temp\dir# < 90) Or (Temp\dir# > 270)) Then Temp\dir# = (360-(Temp\dir#-180)) Mod 360 ;Temp\x# = Temp\x# - GraphicsWidth() If (Temp\y# < 100) And (Temp\dir# > 180) Then Temp\dir# = (360-Temp\dir#) Mod 360 ;Temp\y# = Temp\y# + GraphicsHeight() - 100 If (Temp\y# > GraphicsHeight()) And (Temp\dir# < 180) Then Temp\dir# = (360-Temp\dir#) Mod 360 ;Temp\y# = Temp\y# - GraphicsHeight() + 100 EndIf Next End Function show.bb: Code: [AUSKLAPPEN] Function ShowFood() For Temp.FoodSource = Each FoodSource If age(Temp\origintime) > 10*1000 Then Delete Temp Else Color 0,(255-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 ShowPredator() For Temp.Predator = Each Predator DrawPredator(Temp\x#,Temp\y#,Temp\size,Temp\dir#,Temp\movement,Temp\lastfood) Next End Function Function ShowSwarm() minattractivity# = 5 LivingfemOrganisms = 0 LivingmaleOrganisms = 0 LivingPredators = 0 For Temp.Organism = Each Organism If Temp\lifeexpectancy# > maxlifeexpectancy# Then maxlifeexpectancy# = Temp\lifeexpectancy# If Temp\lifeexpectancy# < minlifeexpectancy# Then minlifeexpectancy# = Temp\lifeexpectancy# If Temp\attractivity# < minattractivity# Then minattractivity# = Temp\attractivity# If Temp\attractivity# > maxattractivity# Then maxattractivity# = Temp\attractivity# avLifetime# = avLifetime# + Temp\lifeexpectancy# avattractivity# = avattractivity# + Temp\attractivity# hunger = (MilliSecs() - Temp\lastfood)/1000 If Temp\gender% = 1 Then LivingfemOrganisms = LivingfemOrganisms + 1 Else LivingmaleOrganisms = LivingmaleOrganisms + 1 EndIf clr% = 255 - (200 / Temp\lifeexpectancy#) * (age(Temp\birthtime) / 1000) If clr < 0 Then clr = 0 Color Floor(Temp\red / 3)*clr, Floor(Temp\green / 3)*clr, Floor(Temp\blue / 3)*clr If ShowOrganisms Then DrawOrganism(Temp\x#,Temp\y#,Temp\dir#,age(Temp\birthtime)*10/(Temp\lifeexpectancy*1000)+5,Temp\movement,Temp\gender%,Temp\attractivity) avAge# = avAge# + age(Temp\birthtime) / 1000 avchildren# = avchildren# + Temp\children Next torg = First Organism torg2 = Last Organism For Temp2.Predator = Each Predator LivingPredators = LivingPredators+1 Next If (LivingfemOrganisms+LivingmaleOrganisms) / LivingPredators > 25 Then CreatePredator(Rnd(800),Rnd(540)+100) ElseIf ((LivingfemOrganisms+LivingmaleOrganisms) / LivingPredators < 15) And (LivingPredators > 1) Then Temp2.Predator = Last Predator Delete Temp2 EndIf ; Infos anzeigen Color 0,0,0 Rect 0,0,799,99,1 Color 255,0,0 Text 1,1," weibl.Org.: " + LivingfemOrganisms Color 0,0,255 Text 1,12," männl.Org.: " + LivingmaleOrganisms Color 255,255,255 Text 1,30," Org.insg.: " + (LivingfemOrganisms+LivingmaleOrganisms) Text 1,45,"Geb.insgesamt: " + births Text 1,60,"Zwillingsgeb.: " + twins Text 1,75,"Drillingsgeb.: " + triplets Text 170,1,"max.Lebenserw.: " + dec(maxlifeexpectancy#, 3) Text 170,15,"min.Lebenserw.: " + dec(minlifeexpectancy#, 3) avLifetime# = avLifetime# / (LivingfemOrganisms+LivingmaleOrganisms) Text 170,30,"avr Lebenserw.: " + dec(avLifetime#, 3) Text 170,45," max.Attrakt.: " + dec(maxattractivity#, 3) Text 170,60," min.Attrakt.: " + dec(minattractivity#, 3) avattractivity# = avattractivity# / (LivingfemOrganisms+LivingmaleOrganisms) Text 170,75," avr Attrakt.: " + dec(avattractivity#, 3) If LivingfemOrganisms+LivingmaleOrganisms > maxpop Then maxpop = LivingfemOrganisms+LivingmaleOrganisms ElseIf LivingfemOrganisms+LivingmaleOrganisms < minpop Then minpop = LivingfemOrganisms+LivingmaleOrganisms EndIf Text 400,0,"nat.Todesfälle: " + (deaths - predvictums) Text 400,15," Raubtieropfer: " + predvictums Text 400,30,"max.Population: " + maxpop Text 400,45,"min.Population: " + minpop avAge# = avAge# / (LivingfemOrganisms+LivingmaleOrganisms) avchildren# = avchildren# / (LivingfemOrganisms+LivingmaleOrganisms) Text 400,60," avr Alter: " + dec(avAge#, 3) ; Text 400,75," Nachk./Org.: " + avchildren# AppTitle "Schwarm Simulation 3 - 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 DrawPredator(x#,y#,size#,dir#,anim,lastfood) Color 128,128,128 Oval x#-size#/2,y#-size#/2,size#,size#,1 nx1# = x# + Cos(dir#-5) * size# / 2 ny1# = y# + Sin(dir#-5) * size# / 2 nx2# = x# + Cos(dir#+5) * size# / 2 ny2# = y# + Sin(dir#+5) * size# / 2 For i = 1 To size# / 2 ox1# = nx1# oy1# = ny1# ox2# = nx2# oy2# = ny2# nx1# = x# + Cos(180 + dir# - 5) * (size# / 2 + i*4) + Cos(180+dir#+85) * Sin(anim - i * (360 / size#)) * i * .75 ny1# = y# + Sin(180 + dir# - 5) * (size# / 2 + i*4) + Sin(180+dir#+85) * Sin(anim - i * (360 / size#)) * i * .75 nx2# = x# + Cos(180 + dir# + 5) * (size# / 2 + i*4) + Cos(180+dir#+95) * Sin(anim - i * (360 / size#)) * i * -.75 ny2# = y# + Sin(180 + dir# + 5) * (size# / 2 + i*4) + Sin(180+dir#+95) * Sin(anim - i * (360 / size#)) * i * -.75 Line ox1#,oy1#,nx1#,ny1# Line ox2#,oy2#,nx2#,ny2# Next If age(lastfood) / 1000 < nostarvingtime Then Color 0,255,0 Else Color 255,0,0 EndIf Oval x#-size#/4,y#-size#/4,size#/2,size#/2,1 Color 255,255,255 End Function Function DrawOrganism(x#,y#,dir#,size#,anim,gender%,attractivity) Oval x#-size#/2,y#-size#/2,size#,size#,1 If gender% = 0 And tail < 5 Then nx# = x# + Cos(dir#) * size# / 2 ny# = y# + Sin(dir#) * size# / 2 For i = 1 To size# * attractivity / tail 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 Color ColorRed()/2,ColorGreen()/2,ColorBlue()/2 Oval x#-size#/2,y#-size#/2,size#,size#,0 End Function Function UpdateSpecialAreas() Color 64, 128, 64 Rect 150, 150, 200, 120, True Color 255, 255, 255 End Function createthings.bb Code: [AUSKLAPPEN] Function CreateSwarm(OrganismCount)
For i = 1 To OrganismCount CreateOrganism(Rnd(GraphicsWidth()),100+Rnd(GraphicsHeight()-100),Lifetime,Normattractivity,1,Rand(0,1),Rand(0,1),Rand(0,1),0,0,0, False) Next End Function Function CreateFoodSource(x#, y#) Temp.FoodSource = New FoodSource Temp\x# = x# Temp\y# = y# Temp\foodpoints = 10 Temp\origintime = MilliSecs() End Function Function CreatePredator(x#,y#) Temp.Predator = New Predator Temp\x# = x# Temp\y# = y# Temp\dir# = Rand(360) temp\size = PredSize Temp\speed# = 3 Temp\speedfactor# = 1 Temp\movement = Rand(360) Temp\lastfood = MilliSecs() End Function Function CreateOrganism(x#,y#,Lifetimetemp#,attractivity#,social#,red1,green1,blue1,red2,green2,blue2,child) Temp.Organism = New Organism Temp\x# = x# Temp\y# = y# Temp\dir# = Rand(360) Temp\speed = 0 Temp\speedfactor = 1 temp\maxspeed# = maxspeed * Rnd(0.75, 1.25) 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#) Temp\children = 0 Temp\attractivity# = attractivity# * Rnd(0.8, 1.2) Temp\startcouple = MilliSecs() + Temp\lifeexpectancy# * 1000 Temp\social# = social# * Rnd(0.9, 1.1) If child Then tmpcolor = colorgen(red1, green1, blue1, red2, green2, blue2) Temp\red = (tmpcolor And 48) Shr 4 Temp\green = (tmpcolor And 12) Shr 2 Temp\blue = (tmpcolor And 3) Else Temp\red = red1*3 Temp\green = green1*3 Temp\blue = blue1*3 End If Temp2.Birthplace = New Birthplace Temp2\x# = x# Temp2\y# = y# Organisms = Organisms + 1 End Function genetics.bb: Code: [AUSKLAPPEN] Function rule1(gen1%, gen2%)
half1 = Rand(1,2) half2 = Rand(1,2) result1% = gen1% And (half1 + (half1 Shl 2) + (half1 Shl 4) + (half1 Shl 6)) If half1 = 2 Then result1 = result1 Shr 1 result2% = gen2% And (half2 + (half2 Shl 2) + (half2 Shl 4) + (half2 Shl 6)) If half2 = 1 Then result2 = result2 Shl 1 Return (result1 + result2) End Function Function colorgen(red1%, green1%, blue1%, red2%, green2%, blue2%) newcolor% = rule1(((red1 Shl 4) + (green1 Shl 2) + blue1), ((red2 Shl 4) + (green2 Shl 2) + blue2)) Return (newcolor) End Function math.bb: Code: [AUSKLAPPEN] 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 dec#(a#, dig%) b# = a# * 10^dig% b# = Floor(b#)/10^dig% Return (b#) End Function variablen.bb Code: [AUSKLAPPEN] Const StartingPop = 50
Const Lifetime = 30 Const Lifetimediffer# = 2 Const PotentAge = 5 Const ImpotentPeriod = 4 Const NoPleasurePeriod = 2 Const twinprob# = 0.02 Const tripletprob# = 0.0008 Const satisfiedtime = 10 Const coupletime# = 0.5 Const Normattractivity = 1 Const nostarvingtime = 6 Global ShowRelationships = True Global ShowBirthplaces = False Global ShowOrganisms = True Global isFood = False 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# Global avAge# Global avchildren# Global avLifetime# Global LivingfemOrganisms Global LivingmaleOrganisms Global Organisms = Startpop Global Lasttic Global tail = 1 Global maxspeed# = 5 Global escapedist = 50 Global PredSize = 15 Global predvictums = 0 Global torg.Organism Global torg2.Organism Type FoodSource Field x# Field y# Field foodpoints Field origintime End Type Type skincolor Field red Field green Field blue End Type Type Predator Field x# Field y# Field dir# Field size# Field speed# Field speedfactor# Field movement Field lastfood End Type Type Organism Field x# Field y# Field dir# Field speed# Field speedfactor# Field movement Field birthtime Field partner Field lastchild Field gender% Field lastfood Field lifeexpectancy# Field children Field attractivity# Field startcouple Field maxspeed# Field social# Field red Field green Field blue End Type Type Birthplace Field x# Field y# Field expiry End Type Gruß bommelid |
||
Eisrabe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke für das vollständige listing.
aber ich bekomme immernoch fehermeldungen. u.a hier: [syntax="bb":1:9faf579aeb] Partner.Organism = Object.Organism(Temp\partner)[/syntax:1:9faf579aeb] dieses problem kenne ich schon von anderen listing. und ich verstehe es auch nicht. weiso die klammern hinter dem type? ist nicht dimensioniert oder ne function. also wieso? |
||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
MENSCH EISRABE! Du nervst! Update mal dein BB und hör auf andauernd zu posten, dass irgendwas nicht funzt! Lass die finger vom Postknopf, überprüfe ob es EVENTUELL auch mal an deiner BBVersion liegen könnte und wenn es nicht an ihr liegt, dann poste!
p.s. die befehle object und handle gibt es nicht in den uraltbbversionen... |
||
MrKeks.net |
Gehe zu Seite Zurück 1, 2, 3, 4, 5 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group