i

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.

Suche

v
7.4.5.3
inf-schule.de/oop/spiele-python/entscheidungen/kollisionserkennung
inf-schule.de/7.4.5.3
inf-schule.de/@/page/cTmJ46gWVxDvgcZ4

Rückmeldung geben