Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
lehrkraefte:blc:informatik:glf20:gameloop [2020/12/04 09:57] Ivo Blöchliger created |
lehrkraefte:blc:informatik:glf20:gameloop [2020/12/11 07:34] (current) Ivo Blöchliger [Animationen] |
||
---|---|---|---|
Line 7: | Line 7: | ||
# Initialisierung aller Variablen, die den Zustand es Spiels beschreiben. | # Initialisierung aller Variablen, die den Zustand es Spiels beschreiben. | ||
# Initialisierung weiterer Dinge, wie z.B. der Beschleunigungssensor | # Initialisierung weiterer Dinge, wie z.B. der Beschleunigungssensor | ||
+ | # Anzeige für Start des Spiel initialisieren | ||
while True: | while True: | ||
Line 15: | Line 16: | ||
</ | </ | ||
Dabei ist es wichtig, dass jeder einzelne Durchlauf möglichst wenig Zeit in Anspruch nimmt, damit das Spiel sofort auf Benutzereingaben reagieren kann. | 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 [[https:// | ||
+ | |||
+ | ===== 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: | 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: | ||
Line 27: | Line 32: | ||
| | ||
</ | </ | ||
+ | |||
+ | Eine ausführlichere Erklärung mit minimalen Beispiel gibt es in diesem [[https:// | ||
+ | und für Datenspender auf [[https:// | ||
+ | |||
+ | ===== Kleines (Bei)Spiel ===== | ||
+ | <WRAP todo> | ||
+ | Studieren und testen Sie folgenden Code. | ||
+ | |||
+ | <hidden game0.py> | ||
+ | <code python game0.py> | ||
+ | from oxocard import * | ||
+ | from ivobuttons import * | ||
+ | from random import randrange | ||
+ | |||
+ | ivobuttons.delay=800 | ||
+ | ivobuttons.repeat_delay=400 | ||
+ | |||
+ | #Zustand vom Spiel | ||
+ | # Koordinaten vom Spieler initialisieren | ||
+ | x,y = 3,3 | ||
+ | |||
+ | # Unterprogramm um die aktuelle Position zu loeschen. Wird erst aufgeführt, | ||
+ | def loeschen(): | ||
+ | global x,y # Zugriff auf Variablen ausserhalb | ||
+ | fastDot(x, | ||
+ | |||
+ | # Unterprogramm um die aktuelle Position zu zeichnen. | ||
+ | def zeichnen(): | ||
+ | global x,y | ||
+ | fastDot(x, | ||
+ | fastRepaint() | ||
+ | |||
+ | fastDot(x, | ||
+ | fastRepaint() | ||
+ | |||
+ | # Game loop | ||
+ | while True: | ||
+ | s = ivobuttons.states() | ||
+ | if s & IVO_R2 and x< | ||
+ | loeschen() | ||
+ | x+=1 # Abkürzung für x=x+1 | ||
+ | zeichnen() | ||
+ | if s & IVO_L2 and x>0: | ||
+ | loeschen() | ||
+ | x-=1 # Abkürzung für x=x-1 | ||
+ | zeichnen() | ||
+ | | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Zustand des Spiels: x-Kooordinate des Spielers | ||
+ | |||
+ | Aktionen: Links, Rechts: Falls Verschiebung überhaupt möglich, wird der alte Punkte mit Schwarz überschrieben, | ||
+ | </ | ||
+ | |||
+ | |||
+ | <WRAP todo> | ||
+ | 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:// | ||
+ | </ |