Kollisionserkennung
In diesem Abschnitt lernst Du, wie man sehr komfortabel abprüfen kann, ob sich Spielfiguren untereinander berühren oder überschneiden.Programm zum Ausprobieren
Gib das folgende Programm ein und drücke solange irgendeine Taste, bis die beiden Raumschiffe zusammenstoßen.
WIDTH = 800
HEIGHT = 600
TITLE = "Spielfigur ändern"
raumschiff = Actor("raumschiff_gruen.png")
raumschiff.x = 400
raumschiff.y = 200
laser = Actor("laser_ohne_strahl.png")
laser.x=400
laser.y=300
def on_key_down(key):
if key==keys.RIGHT:
laser.x=laser.x+10
elif key==keys.LEFT:
laser.x=laser.x-10
else:
laser.image="laser_mit_strahl.png"
if laser.colliderect(raumschiff):
raumschiff.image="raumschiff_explosion.png"
def draw():
screen.blit("sterne.png",(0,0))
laser.draw();
raumschiff.draw()
Die Zeile
if laser.colliderect(raumschiff):
sorgt dafür, dass der folgende oder die folgenden (eingerückten) Befehle nur dann ausgeführt werden, wenn die der Laserstrahl mit dem Raumschiff zusammenstößt (kollidiert, engl.: collide). Genau genommen: Wenn die beiden Rechtecke (engl.: rectangle), die die Ränder der Bilder markieren, einander überschneiden.
In Programmierer-Ausdrucksweise: colliderect(…)
ist
dabei also eine Methode eines
Actor
-Objekts und das
Argument in den Klammern ist ein anderes
Actor
-Objekt.
Aufgabe 1: Zwei Raumschiffe
Erweitere das Programm so, dass es zwei Raumschiffe gibt, ein grünes und ein blaues, die beide mit dem Laser abgeschossen werden können.
Aufgabe 2: Auf Kollisionskurs
Schreibe ein Programm, bei dem zwei Raumschiffe zunächst zufällig im Spielfenster platziert werden, eines im linken Fensterdrittel, eines im rechten Fensterdrittel. Das erste Raumschiff soll einfach stehen bleiben. Der Spieler soll das das zweite Raumschiff mit den Pfeiltasten der Tastatur so steuern, dass es das erste Raumschiff „rammt“. Wenn das passiert ist, soll das erste Raumschiff „explodieren“.
Aufgabe 3: Dem Gegner ausweichen (SCHWER)
Schreibe ein Programm, bei dem zwei Raumschiffe zunächst zufällig im Spielfenster platziert werden, eines im linken Fensterdrittel, eines im rechten Fensterdrittel. Das erste Raumschiff soll über die Pfeiltasten (oder WASD) durch den Spieler steuerbar sein. Das andere Raumschiff soll sich bei jedem Tastendruck in jeder Richtung um 15 Pixel auf das Spieler-Raumschiff zubewegen. Wenn die beiden Raumschiffe einander berühren, sollen sie explodieren.