Üblicherweise werden in der Programmierung die Positionen von Spielobjekten (wie zum Beispiel bei uns von den Ufos) oder von grafischen Elementen wie Kreisen oder Rechtecken entweder durch die x- und y-Koordinaten des Mittelpunktes angegenen, oder von den x- und y-Koordinaten der unteren linken Ecke.

Manchmal interessiert uns beim Programmieren aber nur die y-Koordinate der oberen Kante (um zu prüfen, ob das Ufo das Programmfenster komplett durchquert hat...) oder die x- und y-Koordinaten der Mitte der unteren Kante (um das Schiff zu Beginn des Spiels genau auf der Mitte der Unterkante des Programmfensters zu positionieren)

Das gute an Pygame Zero ist, dass wir diese und noch viele weitere Koordinaten eines Spielobjekts abfragen und auch ändern können.

Die folgenden beiden Grafiken zeigen alle dabei möglichen Koordinaten:

Zwei Beispiele aus dem PGZ Blaster

Hier wird die Unterkante des Schiffs auf die Unterkante des Programmfensters gesetzt. (self.bottom = HEIGHT)
Und die horizontale Mitte auf die Horizontale Mitte des Programmfensters. (self.centerx = WIDTH / 2)

class Schiff(Actor):
    def __init__(self):
        Actor.__init__(self, 'schiff')
        self.bottom = HEIGHT
        self.centerx = WIDTH / 2
        self.geschwindigkeit = 6

Bei der Aktualisierung des Ufos wird abgefragt, ob dessen Oberkante unter der Unterkante des Programmfensters sich befindet

Mit anderen Worten: Ob das Ufo den Bildschirm komplett überquert hat. 

Ist dies der Fall, wird das Ufo inaktiv gesetzt.

if self.top > HEIGHT:
    self.aktiv = False

Ein komplettes Programmbeispiel

Dieses Programm gibt entsprechende Textnachrichten aus, wenn Programmfensterränder vom Ufo überschritten wurden.

Achtung: Dieses Beispiel funktioniert nur, wenn es im selben Ordner liegt wie die PGZ Blaster Dateien!

import pgzrun

WIDTH, HEIGHT = 500, 700

class Schiff(Actor):
    def __init__(self):
        Actor.__init__(self, 'schiff')
        self.bottom = HEIGHT
        self.centerx = WIDTH / 2
        self.geschwindigkeit = 6

    def aktualisiere(self):
        if keyboard.left:
            self.x -= self.geschwindigkeit
        if keyboard.right:
            self.x += self.geschwindigkeit
        if keyboard.up:
            self.y -= self.geschwindigkeit
        if keyboard.down:
            self.y += self.geschwindigkeit

schiff = Schiff()


def update():
    schiff.aktualisiere()

def draw():
    screen.fill((255, 255, 255))
    
    if schiff.left < 0:
        screen.draw.text("linke Bildschirmkante überschritten!",
                         center=(WIDTH/2, HEIGHT/2 - 20),
                         fontsize=30,
                         color="black")
    if schiff.right > WIDTH:
        screen.draw.text("rechte Bildschirmkante überschritten!",
                         center=(WIDTH/2, HEIGHT/2 - 20),
                         fontsize=30,
                         color="black")
    if schiff.top < 0:
        screen.draw.text("obere Bildschirmkante überschritten!",
                         center=(WIDTH/2, HEIGHT/2 + 20),
                         fontsize=30,
                         color="black")
    if schiff.bottom > HEIGHT:
        screen.draw.text("untere Bildschirmkante überschritten!",
                         center=(WIDTH/2, HEIGHT/2 + 20),
                         fontsize=30,
                         color="black")
    
    screen.draw.filled_rect(schiff._rect, "red")
    schiff.draw()


pgzrun.go( )

Zuletzt geändert: Donnerstag, 13. März 2025, 07:28