Der Game-Loop
Der Game-Loop ist meistens eine while True:
-Schleife in der das Spiel läuft. Die Grundidee des Programms ist wie folgt:
from oxocard import * from ivobuttons import * # Initialisierung aller Variablen, die den Zustand es Spiels beschreiben. # Initialisierung weiterer Dinge, wie z.B. der Beschleunigungssensor # Anzeige für Start des Spiel initialisieren while True: # Tasten etc. auslesen # Entscheiden, was für Aktionen nötig sind # Spielzustand aktualisieren, evtl. neu zeichnen
Dabei ist es wichtig, dass jeder einzelne Durchlauf möglichst wenig Zeit in Anspruch nimmt, damit das Spiel sofort auf Benutzereingaben reagieren kann.
Das obige gibt es auch noch als Video und für Datenspender auch auf Stream.
Animationen
Wenn es Dinge gibt, die über eine längere Zeit ablaufen, muss mit Zeitstempeln gearbeitet werden, z.B. so wird eine Aktion jede Sekunde einmal ausgeführt:
letztens = getms() #Anzahl Millisekunden jetzt while True: jetzt = getms() if jetzt-letztens>1000: # Eine Sekunde ist vergangen, also ausführen letztens=jetzt # Aktion ausführen, Spielzustand aktualisieren
Eine ausführlichere Erklärung mit minimalen Beispiel gibt es in diesem Video und für Datenspender auf Stream.
Kleines (Bei)Spiel
Studieren und testen Sie folgenden Code.
Zustand des Spiels: x-Kooordinate des Spielers
Aktionen: Links, Rechts: Falls Verschiebung überhaupt möglich, wird der alte Punkte mit Schwarz überschrieben, die x-Koordinate angepasst und der Punkt neu gezeichnet.
Bauen Sie das Spiel aus. Mögliche Varianten:
- Der Benutzer kann auch nach oben und unten.
- Der Benutzer kann damit zeichnen.
- Ein weiterer Punkt fällt von oben nach unten. Dieser muss gefangen werden (oder ausgewichen). Dazu müssen Sie mit timern (getms()) arbeiten.
- Mehrere Punkte fallen…
- Die Steuerung erfolgt via Beschleunigungssensor und kippen der Karte. Siehe dazu https://www.tigerjython4kids.ch/index.php?inhalt_links=robotik/navigation.inc.php&inhalt_mitte=robotik/oxocard/sensor.inc.php