Einstieg in das Thema
Was braucht man an Vorwissen?
Das bisherige Wissen zu PyGame ist wichtig, vor allem
muss die Ereignisbehandlung verstanden worden sein.
Worum geht es?
Nun soll endlich etwas mehr gespielt werden und es geht darum,
wie man Daten zu Spielobjekten zusammenfasst.
Was ist das Ziel?
Du hast dein erstes kleines Spiel in PyGame realisiert.
Erarbeitung
Aufgaben
Basis ist der
Quelltext
Wenn die Leertaste gedrückt wird, dann soll ein Schuss abgefeuert werden.
Das Spiel kommt erst einmal mit nur einem Schuss-Objekt aus.
Aufgabe 1
Erstelle ein Schuss-Objekt als Dictionary. Welche Eigenschaften hast du vergeben?
Aufgabe 2
Vergib eine Eigenschaft "visible", die am Anfang False ist.
Aufgabe 3
Lasse das Schuss-Objekt nur zeichnen, wenn die Eigenschaft "visible" True ist.
Aufgabe 4
Die Leertaste hat den Code K_SPACE. Wenn diese Taste gedrückt wird, soll das Objekt sichtbar werden (die Eigenschaft also auf True gesetzt werden). Die Position soll erst einmal die Position des player-Objektes sein. Das ist nicht perfekt, aber du kannst es später anpassen.
Nun müsste das Schuss-Objekt zu sehen sein, aber es bewegt sich nicht
und es geht auch nicht wieder weg.
Aufgabe 5
Wenn das Objekt sichtbar ist, also auch gezeichnet wird, dann soll es sich nach oben bewegen. Von der y-Position muss nun also ein Wert (speed) abgezogen werden.
Aufgabe 6
Nun bewegt sich das Objekt nach oben. Wenn die y-Position kleiner ist als z.B. 10, dann soll das Objekt wieder auf unsichtbar gestellt werden.
Aufgabe 7
Nun muss nur noch eingebaut werden, dass nur dann ein Schuss abgefeuert wird, wenn das Objekt unsichtbar ist. Erweitere die Bedingung bei der Abfrage der Taste: Die Leertaste muss gedrückt sein und das Schuss-Objekt muss unsichtbar sein.
Aufgabe 8
Nun kommt noch etwas Feinschliff. Verbessere die Anfangsposition des Schuss-Objektes, passe die Geschwindigkeit an.
Der Schuss fliegt, soll aber auch etwas treffen. Zuerst bauen wir ein
unbewegliches Objekt ein.
Aufgabe 9
Erstelle ein Feindobjekt als Dictionary. Du kannst viel kopieren.
Nun muss getestet werden, ob der Schuss den Feind trifft. In processing müsste
man diese Tests selbst machen. PyGame bietet etwas Support.
Wir übergeben die Maße einer Routine, die Überschneidung und
damit die Kollision testet.
Es sieht etwas umständlich aus, weil PyGame erst eine Rechteck-Struktur
baut und dann diese beiden auf Kollision prüft. Durch die Aufteilung
sieht aber auch der Quelltext etwas schöner aus, weil nicht acht
Parameter übergeben werden müssen.
rectShot = pygame.Rect(shot["x"], shot["y"],
shot["width"], shot["height"])
rectEnemy = pygame.Rect(enemy["x"], enemy["y"],
enemy["width"], enemy["height"])
if rectShot.colliderect(rectEnemy):
print("Kollision!")
Aufgabe 10
Probiere bitte obigen Code aus. Füge ihn an passender Stelle (z.B. vor dem Zeichnen) in deine Schleife ein.
Aufgabe 11
Lasse nun den Feind immer hin und her fahren, sodass er schwerer zu treffen ist.
Zusammenfassung
Was muss man wissen / können?
Du kennst dich nun mit Steuerungen und Kollisionstests aus.
Wie geht es weiter?
Der Gegner soll nun auch explodieren. Schauen wir mal,
wie man das (auch) machen kann.