Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ws1718:visualisierungscode [2018/04/07 23:44] lenarost [Funktionen...] |
ws1718:visualisierungscode [2018/04/18 18:53] (aktuell) lenarost [Game loop] |
||
---|---|---|---|
Zeile 133: | Zeile 133: | ||
Anschließend ordnen wir jeder Kreatur ein **Spezies abhängiges Bild zu **( "''self.image = all_images[spec]''"). Somit erreichen wir zusätzlich einen visuellen Unterschied der Kreaturen gemäß ihrer Art. \\ | Anschließend ordnen wir jeder Kreatur ein **Spezies abhängiges Bild zu **( "''self.image = all_images[spec]''"). Somit erreichen wir zusätzlich einen visuellen Unterschied der Kreaturen gemäß ihrer Art. \\ | ||
Die Zeilen, die mit ''self.rect''beginnen, umgeben das **Bild mit einem rectangle** und positionieren dieses. Das Prinzip ist das selbe, wie in den Klassen der Hindernisse. \\ | Die Zeilen, die mit ''self.rect''beginnen, umgeben das **Bild mit einem rectangle** und positionieren dieses. Das Prinzip ist das selbe, wie in den Klassen der Hindernisse. \\ | ||
- | Für die nächste Funktion der Klasse ist die letzte Zeile der ''<nowiki>__init__</nowiki>''-Funktion wichtig. Sie liefert uns eine Variable, die später einen Index- Counter bildet. Um diese genauer nach zu vollziehen werfen wir einen Blick auf die update-Funktion der CREA-Klasse. \\ | + | Für die nächste Funktion der Klasse ist die letzte Zeile der ''<nowiki>__init__</nowiki>''-Funktion wichtig. Sie liefert uns eine Variable, die später einen Index- Counter bildet. Um diese genauer nach zuvollziehen werfen wir einen Blick auf die update-Funktion der CREA-Klasse. \\ |
Die **update-Funktion** der CREA-Klasse ist vor allem wichtig für die **Bewegung unserer erzeugten Kreaturen**. Hier kommt der ''self.block_index'' -Counter zum Einsatz. Zunächst stellen wir hier eine Bedingung auf. Sie bewirkt, dass die Bewegung der Kreatur nur solange von statten geht, wie Schritte (gespeichert im briefing) vorhanden sind. Ansonsten stirbt die Kreatur.\\ | Die **update-Funktion** der CREA-Klasse ist vor allem wichtig für die **Bewegung unserer erzeugten Kreaturen**. Hier kommt der ''self.block_index'' -Counter zum Einsatz. Zunächst stellen wir hier eine Bedingung auf. Sie bewirkt, dass die Bewegung der Kreatur nur solange von statten geht, wie Schritte (gespeichert im briefing) vorhanden sind. Ansonsten stirbt die Kreatur.\\ | ||
Auf Grund der Strukturierung des ** briefings **arbeiten wir hier mit zwei Indizier. Das briefing besteht aus einer **Liste von Blocks**. Ein Block beschreibt einen Schritt. Die Blocks enthalten Informationen über die Richtung und Schrittlänge. \\ | Auf Grund der Strukturierung des ** briefings **arbeiten wir hier mit zwei Indizier. Das briefing besteht aus einer **Liste von Blocks**. Ein Block beschreibt einen Schritt. Die Blocks enthalten Informationen über die Richtung und Schrittlänge. \\ | ||
Zeile 153: | Zeile 153: | ||
====Funktionen...==== | ====Funktionen...==== | ||
===...zum Erstellen der restlichen Objekte === | ===...zum Erstellen der restlichen Objekte === | ||
- | Wolke, Plattformen und Tropfen werden alle gleich erstellt. Jedes Objekt wird durch **Aufrufen der Klasse** und **Angabe der Koordinaten** erstellt. Daraufhin wird es zunächst der allgemeinen **Sprite_Gruppe** und der **Hinderniss-Gruppe** zu geordnet. | + | Wolke, Plattformen und Tropfen werden alle gleich erstellt. Jedes Objekt wird durch **Aufrufen der Klasse** und **Angabe der Koordinaten** erstellt. Daraufhin wird es zunächst der allgemeinen **Sprite_Gruppe** und der **Hinderniss-Gruppe** zugeordnet. |
===...für die Kreaturen=== | ===...für die Kreaturen=== | ||
Zeile 165: | Zeile 165: | ||
Beide Counter werden im laufendem Programm am rechten Bildrand angezeigt. Somit kann man mit den fortschreitenden Generationen, die **Entwicklung unserer Evolution** erkennen. \\ | Beide Counter werden im laufendem Programm am rechten Bildrand angezeigt. Somit kann man mit den fortschreitenden Generationen, die **Entwicklung unserer Evolution** erkennen. \\ | ||
- | Um nun eine neue Generation zu erstellen, nutzen wir zunächst die angekündigte ''.sort()''-Funktion. Durch sortieren der **creatures-Liste**, wird uns eine absteigende Reihenfolge der **Ratings** der Kreaturen ausgegeben. \\ | + | Um nun eine neue Generation zuerstellen, nutzen wir zunächst die angekündigte ''.sort()''-Funktion. Durch sortieren der **creatures-Liste**, wird uns eine absteigende Reihenfolge der **Ratings** der Kreaturen ausgegeben. \\ |
- | Für die neu erstellte Liste nutzen wir eine erste Schleife mit dem ''enumerate''-Befehl. Mit ihm gelingt es uns sowohl durch den **Index i**, als auch durch das **Element c** von ''creatures'' geteilt durch n zu gehen. **n** beschreibt hier den Selektionsdruck und legt somit fest, wie viele Kreaturen vererben dürfen.\\ | + | Für die neu erstellte Liste nutzen wir eine erste Schleife mit dem ''enumerate''-Befehl. Mit ihm gelingt es uns sowohl durch den **Index i**, als auch durch das **Element c** von ''creatures'' geteilt durch n zugehen. **n** beschreibt hier den Selektionsdruck und legt somit fest, wie viele Kreaturen vererben dürfen.\\ |
In der **ersten Schleife** speichern wir unter der Variable ''spec'' die jeweilige Spezie jedes Elementes der Liste. \\ | In der **ersten Schleife** speichern wir unter der Variable ''spec'' die jeweilige Spezie jedes Elementes der Liste. \\ | ||
Es folgt eine **zweite Schleife**, die durch eine von **n-anhängige Liste**geht. Dabei wird für jedes n-tel eine neue Kreatur **abhängig der vererbten Eigenschaften** erstellt ( ''cr.procreation(c.c1)''). Anschließend wird mit der ''appendWay()''- Funktion für die neue Kreatur ein neuer Weg erstellt (abnhängig von den vererbten Eigenschaften). Zu guter Letzt wird jeder neu erstellten Kratur ihre **alte Spezie** durch die Variable ''spec'' zugeordnet und ein **dazu passendes Bild**. \\ | Es folgt eine **zweite Schleife**, die durch eine von **n-anhängige Liste**geht. Dabei wird für jedes n-tel eine neue Kreatur **abhängig der vererbten Eigenschaften** erstellt ( ''cr.procreation(c.c1)''). Anschließend wird mit der ''appendWay()''- Funktion für die neue Kreatur ein neuer Weg erstellt (abnhängig von den vererbten Eigenschaften). Zu guter Letzt wird jeder neu erstellten Kratur ihre **alte Spezie** durch die Variable ''spec'' zugeordnet und ein **dazu passendes Bild**. \\ | ||
Zeile 286: | Zeile 286: | ||
====Game loop==== | ====Game loop==== | ||
- | Damit wir am Ende auch alles darstellen können, kommen wir jetzt zum eigentlichen "''Game loop''". \\ | + | Damit wir am Ende auch alles darstellen können, kommen wir jetzt zum eigentlichen ''Game loop''. \\ |
- | Hier greifen wir auf das bekannte Skeleton von Pygame zu, welches wir schon am anfangs verlinkten. \\ | + | Hier greifen wir auf das bekannte Skeleton von Pygame zu, welches wir schon anfangs verlinkten. \\ |
- | Wir setzen also running auf "''True''", rufen alle **Sprites** (außer die Kreaturen) mit der "''defSprites()''" auf und gehen dann in die obligatorsiche **while-Schleife**. \\ | + | Wir setzen running auf "''True''", rufen alle **Sprites** (außer die Kreaturen) mit der ''defSprites()'' auf und gehen dann in die obligatorsiche **while-Schleife**. \\ |
<code python> | <code python> | ||
""" Game loop """ | """ Game loop """ | ||
Zeile 303: | Zeile 303: | ||
</code> | </code> | ||
- | Wir rufen zunächst die Kollisionsfunktion "''bubbly()''" auf. | + | Wir rufen zunächst die Kollisionsfunktion ''bubbly()'' auf. |
- | Anschließend überprüfen wir mit einer for-Schleife durch die creatures-list, ob alle Kreaturen tot sind. Sollte dies der Fall sein, erstellen wir eine neue Generation mit der "''newGen()''"-Funktion. Zusätzlich rufen wir an dieser Stelle "''stats()''" ab, um die Spezienanzahl der neuen Generation zu zählen. \\ | + | Anschließend überprüfen wir mit einer for-Schleife durch die creatures-list, ob alle Kreaturen tot sind. Sollte dies der Fall sein, erstellen wir eine neue Generation mit der ''newGen()''-Funktion. Zusätzlich rufen wir an dieser Stelle ''stats()'' ab, um die Spezienanzahl der neuen Generation zuzählen. \\ |
<code python> | <code python> | ||
Zeile 321: | Zeile 321: | ||
</code> | </code> | ||
- | Nach diesem Schritt kommen wir zu unserer Update-section. Hier werden zunächst alle Sprites mit dem Befehl "''all_sprites.update()''" aktualisiert. Der "''finpergencnt''"-Counter zählt alle Kreaturen, die das Ziel erreicht haben. Dieser wird nach jeder Generation wieder genullt. \\ | + | Nach diesem Schritt kommen wir zu unserer Update-section. Hier werden zunächst alle Sprites mit dem Befehl ''all_sprites.update()'' aktualisiert. Der ''finpergencnt''-Counter zählt alle Kreaturen, die das Ziel erreicht haben. Dieser wird nach jeder Generation wieder genullt. \\ |
<code python> | <code python> | ||
Zeile 335: | Zeile 335: | ||
</code> | </code> | ||
- | Abschließend wird in der draw-section unsere "''draw()''"-Funktion aufgerufen. Hiermit zeichnen wir alles in den screen und aktualisieren diesen mit der "''pygame.display.flip()''"-Funktion. | + | Abschließend wird in der draw-section unsere ''draw()''-Funktion aufgerufen, in der wir alle zu zeichnenden Objekte finden. Um den screen regelmäßig zu aktualisieren, nutzen wir die ''pygame.display.flip()''-Funktion. Somit sind wir am Ende unseres Programmes angekommen. |
<code python> | <code python> |