Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
ws2425:crowingworld:strukturiertedokumentation [2025/03/13 00:45] BenDeutrich |
ws2425:crowingworld:strukturiertedokumentation [2025/03/13 00:56] (aktuell) Smjn |
||
---|---|---|---|
Zeile 26: | Zeile 26: | ||
- | "act_pflanze()" ist das equivalent zu "act_tier()" für Pflanzen. Da aber Pflanzen nicht so viele aktionen in der Wirklichkeit haben, außer zu wachsen und sich zu vermehren. Dies geschieht in der "wachsen()"-Funktion | + | "act_pflanze()" ist das equivalent zu "act_tier()" für Pflanzen. Da aber Pflanzen nicht so viele Aktionen in der Wirklichkeit haben, außer zu wachsen und sich zu vermehren. Dies geschieht in der "wachsen()"-Funktion |
- | "wachsten()" ist die Hauptfunktion der Pflanzen. Hier wird geschaut ob die Größe der Pflanze, die die Funktion ausführt, größergleich ihrer maximaler Größe ist und wenn ja, dann versucht sich die Pflanze mit der "nearby_check()" Funktion zu vermehren. Wenn dies nicht der Fall ist, wächst die Pflanze um ihren Wachstumswert. | + | "wachsen()" ist die Hauptfunktion der Pflanzen. Hier wird geschaut ob die Größe der Pflanze, die die Funktion ausführt, größergleich ihrer maximaler Größe ist und wenn ja, dann versucht sich die Pflanze mit der "nearby_check()" Funktion zu vermehren. Wenn dies nicht der Fall ist, wächst die Pflanze um ihren Wachstumswert. |
"nearby_check()" schaut, ob zuerst neben der Pflanze horizontal platz ist und wenn ja, dann werden dort neue Pflanzen gespawnt. Wenn nicht, dann wird ebenfalls die Vertikale überprüft und dort werden pflanzen gespawnt. | "nearby_check()" schaut, ob zuerst neben der Pflanze horizontal platz ist und wenn ja, dann werden dort neue Pflanzen gespawnt. Wenn nicht, dann wird ebenfalls die Vertikale überprüft und dort werden pflanzen gespawnt. | ||
Zeile 36: | Zeile 36: | ||
"wassergrasspawn()" erstellt entweder Pflanzen oder Wasser an einem älteren Wasserfeld | "wassergrasspawn()" erstellt entweder Pflanzen oder Wasser an einem älteren Wasserfeld | ||
+ | |||
+ | |||
+ | Code Implementierung der Kamerabewegung: | ||
+ | |||
+ | In unserem Visualisierungsskript haben wir mit Hilfe von OpenGL-Matrizen die Kamerabewegung gesteuert. Dazu haben wir zuallererst bestimmten Tastenanschläge definiert, die ein Signal zur Veränderung der Kamera geben. Wir haben uns für die Pfeiltasten entschieden um die Kamera in eine bestimmte Richtig zu bewegen und die Zeichen „+“ und „-“ um die Ansicht größer oder kleiner zu skalieren. Um diese Tastenanschläge zu überprüfen haben wir If-statements genutzt, die mit der pyglet.window.key Methode überprüfen, ob eine bestimmte Taste gedrückt wurde. | ||
+ | |||
+ | if symbol == pyglet.window.key.UP: | ||
+ | |||
+ | Daraufhin wurde eine Transforamtionsmatrix generiert, die die x-, y- und Skalierungswerte beinhaltet, um die die Kamera verschoben werden soll. | ||
+ | |||
+ | view_matrix = pyglet.math.Mat4.from_translation(vector=pyglet.math.Vec3(x=0, y=-100, z=0)) | ||
+ | |||
+ | Weitergehend findet eine Matrix Multiplikation statt die die alte View-Matrix mit der Transformationsmatrix verrechnet. Heraus kommt die neue Matrix die auch eine neue Kamerabild darstellt. | ||
+ | |||
+ | window.view @ view_matrix | ||
+ | |||
+ | Um sicherzustellen das bestimmte Grenzen der Kamerabewegung eingehalten werden haben wir uns eine Funktion „valid_view“ erstellt. Diese Funktion soll die vollführte Kamerabewegung validieren und gegebenenfalls auch blockieren, falls sie nicht zulässig ist. | ||
+ | |||
+ | Um die maximal zulässige Breite und Höhe herauszufinden, berechnen wir mithilfe der Skalierung einen Wert, der die Grenze unserer Welt angibt | ||
+ | |||
+ | width_stop = -(scale*WIDTH-WIDTH) | ||
+ | height_stop = -(scale*HEIGHT-HEIGHT) | ||
+ | |||
+ | Mit weiterfolgenden if-statements werden diese Weltgrenzen überprüft, ob diese überschritten werden. Falls dies eintritt wird der entsprechenden Wert auf 0 gesetzt. | ||
+ | |||
+ | Wichtig hierbei zu erwähnen ist, dass dieser Codeabschnitt aktuell nur für die Skalierung funktioniert. Bei der Implementierung der zentrierten Skalierung haben wir leider die Funktionalität des Bewegens verloren. Leider ist es uns in der zeit nicht mehr gelungen, dort noch eine geeignete Lösung zu finden. | ||
+ | |||
+ | Und Zuletzt werden die Werte noch in eine Matrix gesetzt und diese wird OpenGL als 4x4 Matrix wieder übergeben. | ||
Zusammenfassend kann man sagen: Wir haben es geschafft, ein einigermaßen funktionierendes Ökosystem zu simulieren. Wie schon mehrmals beschrieben hatten wir keine festen Ziele, die erreicht werden konnten. Jeder hat so gut wie er konnte und auf seine Weise ohne viel Druck an unserem Projekt gearbeitet und zur „Vervollständigung“ beigetragen. Wir freuen uns, dass auf diese Weise etwas Funktionierendes und Vorzeigbares dabei entstanden ist. „Vervollständigung“ in Anführungszeichen, weil es jetzt gefühlt unendlich Möglichkeiten gibt, unsere Simulation noch zu verbessern oder zu erweitern. Wir könnten zum Beispiel noch einen Tag-Nachtrythmus und somit eine Art Uhr einführen, dann könnten wir einen Schlafrythmus für jedes Tier einführen, und ihre Tag- und Nachtaktivität beachten, indem sie sich während ihrem Schlaf verstecken. Die Lebensräume der Tiere könnten bestimmt werden, das lebensraumbezogene Konkurrenzverhalten könnte dann simuliert werden… So kann man immer weiter machen. Auch an der Visualisierung könnte man noch arbeiten: die Tiere „teleportieren“ sich in unserem jetztigen Stand jeden Simulationsschritt ein kleines Stück weiter, schöner wäre aber eine Vsualisierung der Bewegung dorthin. Auch das Laufen um Wasser herum könnte noch eingeführt werden, denn momentan laufen unsere Tiere durch das Wasser durch und werden langsamer, um das herumlaufen oder schwimmen zu simulieren. Ein weiterer Schritt, der zu Beginn auch noch ein Zeil von uns war, wäre das Einbinden einer weiteren Zeitskala, so dass man die Evolution der Lebewesen untersuchen könnte. Dann hätte man auch noch die Mutation einführen müssen…. | Zusammenfassend kann man sagen: Wir haben es geschafft, ein einigermaßen funktionierendes Ökosystem zu simulieren. Wie schon mehrmals beschrieben hatten wir keine festen Ziele, die erreicht werden konnten. Jeder hat so gut wie er konnte und auf seine Weise ohne viel Druck an unserem Projekt gearbeitet und zur „Vervollständigung“ beigetragen. Wir freuen uns, dass auf diese Weise etwas Funktionierendes und Vorzeigbares dabei entstanden ist. „Vervollständigung“ in Anführungszeichen, weil es jetzt gefühlt unendlich Möglichkeiten gibt, unsere Simulation noch zu verbessern oder zu erweitern. Wir könnten zum Beispiel noch einen Tag-Nachtrythmus und somit eine Art Uhr einführen, dann könnten wir einen Schlafrythmus für jedes Tier einführen, und ihre Tag- und Nachtaktivität beachten, indem sie sich während ihrem Schlaf verstecken. Die Lebensräume der Tiere könnten bestimmt werden, das lebensraumbezogene Konkurrenzverhalten könnte dann simuliert werden… So kann man immer weiter machen. Auch an der Visualisierung könnte man noch arbeiten: die Tiere „teleportieren“ sich in unserem jetztigen Stand jeden Simulationsschritt ein kleines Stück weiter, schöner wäre aber eine Vsualisierung der Bewegung dorthin. Auch das Laufen um Wasser herum könnte noch eingeführt werden, denn momentan laufen unsere Tiere durch das Wasser durch und werden langsamer, um das herumlaufen oder schwimmen zu simulieren. Ein weiterer Schritt, der zu Beginn auch noch ein Zeil von uns war, wäre das Einbinden einer weiteren Zeitskala, so dass man die Evolution der Lebewesen untersuchen könnte. Dann hätte man auch noch die Mutation einführen müssen…. |