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"

meteorit = Actor("meteorit.png")
meteorit.x = 400
meteorit.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(meteorit):
            meteorit.image="meteorit_explosion.png"


def draw():
    screen.blit("sterne.png",(0,0))
    laser.draw();
    meteorit.draw()

Die Zeile

if laser.colliderect(meteorit):
sorgt dafür, dass der folgende oder die folgenden (eingerückten) Befehle nur dann ausgeführt werden, wenn die der Laserstrahl mit dem Meteoriten 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 Meteoriten

Erweitere das Programm so, dass es zwei Meteoriten gibt, die beide mit dem Laser abgeschossen werden können.

Aufgabe 2: Auf Kollisionskurs

Schreibe ein Programm, bei dem ein Meteorit und eine Sonde (sonde.png) zunächst zufällig im Spielfenster platziert werden, der Meteorit im linken Fensterdrittel, die Sonde im rechten Fensterdrittel. Der Meteorit soll einfach stehen bleiben. Der Spieler soll die Sonde mit den Pfeiltasten der Tastatur so steuern, dass sie den Meteoriten „rammt“. Wenn das passiert ist, soll der Meteorit „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