Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Community-Fossil
Davon hatte ich schon einiges gesehen. Ich denke ich will "plastischere" Geschöpfe, an deren Körperbau genetische Merkmale erkennbar sind.Zitat
Nun, dann hast du aber nicht sehr gründlich gesucht.
Das habe ich auf die Schnelle gefunden:
Harausforderung angenommen.Zitat
Und selbst wenn dir ein paar Programmierer helfen würden, hielt ich es
für unwahrscheinlich eine realistische Simulation, die auch noch
Nicht-Informatiker verstehen sollen, in einer Woche zum laufen zu
bringen. Halte uns aber bitte auf dem Laufenden.
Am Freitag werde ich so weit fertig sein. Und ich stelle gerne den gesamten Quellcode zur Verfügung. Dafür ist ja Anschauungsmaterial gedacht.Zitat
Achja, darf ich dich anschreiben wenn ich mit meinem Projekt anfange? Ein paar zusätzliche Informationen von einem Fachmann sind da bestimmt
nützlich.
Administrator
Zitat
Und das Verhalten der Lebewesen?
Sollte das nicht auch ein wesentlicher Aspekt sein, der durch die Evolution optimiert wird?
Klar, das kann man nicht gut visualisieren. Aber bei "Räuber-Beute" kommt es doch stark auf das Verhalten an.
Sowas könnte man durch neuronale Netze realisieren, die das Verhalten steuern. Diese könnte man zufällig mutieren lassen oder die Netze zweier Lebewesen "kreuzen".
C#-Quelltext |
|
1 2 3 4 5 6 7 |
int[,] Gen_0_Zell_Typ = new int[AnzahlId, 5]; bool[,] Gen_0_Zell_Enabled = new bool[AnzahlId, 5]; int[,] Gen_1_Zell_Typ = new int[AnzahlId, 4]; bool[,] Gen_1_Zell_Enabled = new bool[AnzahlId, 4]; int[,] Gen_2_Zell_Typ = new int[AnzahlId, 3]; bool[,] Gen_2_Zell_Enabled = new bool[AnzahlId, 3]; int[] Gen_ZellenGesamt = new int[AnzahlId]; |
Genua so ist es.Zitat
Kreuzung wäre nicht sonderlich schwer umzusetzen. Vom Prinzip willst du doch eigentlich sowas hier grafisch umsetzen oder nicht?
Habe ich mir schon angeguckt.Zitat
die Wator-Simulation die David angesprochen hat sicherlich mal einen Blick wert
Administrator
In der 2. Schleife zähle ich ab dem Index der ersten Schleife dadurch lässt sich das bereits etwas reduzieren. Aber im Prinzip hast du recht.Zitat
Wenn du 500 Zellen hast, musst du (500*499)/2 Paare testen, das sind knapp 125000!
Wenn du nun 1000 Zellen hast, sind es nicht doppelt so viele Paare, sondern 4x so viele.
Aha, ja das klingt logisch.Zitat
Um richtig viele Partikel zu simulieren, musst du eine räumliche
Datenstruktur benutzen. Ein reguläres Gitter täte es hier. Im Prinzip
teilst du den Raum in kleine Quadrate auf (wie Rechenkästchen). In jedem
führst du eine Liste über die Partikel, die darin enthalten sind. Nun
kannst du diese Struktur benutzen, um schnell eine Liste potenzieller
Kollisionen zu erhalten, nämlich können Partikel nur dann kollidieren,
wenn sie sich im selben Kästchen oder in benachbarten Kästchen befinden.
Deshalb bin ich hier.Zitat
Hier siehst du schon, dass der Teufel im Detail steckt.
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
for (n1 = 0; n1 < MaxZellenGesamt; n1++) { if (Z_Typ[n1] >-1)//Zellen mit dem Typ -1 sind deaktiviert { AnzZellen++;//Zellen Zählen Update_ZellEngine_ZellAktivität(n1);//Zellaktivitäten for (n2 = n1; n2 < MaxZellenGesamt; n2++) { if (Z_Typ[n2] >-1) { Z_Distanz[n1, n2]--;//Lineare Distanzoperation zur Einsparung von Rechenleistung if (Z_Distanz[n1, n2] < 14)//(Die Größe aller Zellen ist 8) { Z_Distanz[n1, n2] = Vector2.Distance(Z_Position[n1], Z_Position[n2]); if (Z_Distanz[n1, n2] < (float)9.6) { //Zellkontakt Update_ZellEngine_Physik(n1, n2);//Hier dann der Pythagoras sowie der Austausch von Nahrung und Baumaterial if (Z_Schlafen[n1] == 1)//Zellen sind nur alle 10 Frames aktiv beim Zellkontakt. { Update_ZellEngine_Zellkontakt(n1, n2); Update_ZellEngine_Zellkontakt(n2, n1); }; }; }; }; }; }; }; |
Administrator
Werbeanzeige