Menu
CoddyTech

Fang ihn

Lektion 12 von 41 im Kurs Spiele mit Pygame erstellen von Coddy.

Zwei Rechtecke kollidieren, wenn sie sich überlappen. a.colliderect(b) ist True, wenn sich Rect a und Rect b überlappen, auch nur um ein Pixel.

if block.colliderect(basket):
    block.y = -20
    block.x = random.randint(0, 460)

Ein gefangener Block geht genauso wie ein verfehlter zurück nach oben. Die Überlappung zu prüfen ist sicherer, als genaue Positionen zu testen: Ein Block, der sich jeweils um 3 Pixel bewegt, kann den einen y-Wert, den du testest, direkt überspringen.

challenge icon

Aufgabe

Einfach

Lass den Korb den Block auffangen.

  1. Teste nach dem Test auf verfehlte Blöcke block.colliderect(basket).
  2. Wenn das Ergebnis wahr ist, setze den Block wie bei einem verfehlten Block zurück nach oben: block.y = -20 und ein zufälliges block.x.

Drücke „Spielen“ und fange einen Block auf: Er geht zurück nach oben. Drücke dann „Prüfen“.

Probier es selbst

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()

basket = pygame.Rect(200, 330, 80, 16)
block = pygame.Rect(220, 0, 20, 20)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        basket.x -= 8
    if keys[pygame.K_RIGHT]:
        basket.x += 8
    basket.clamp_ip(screen.get_rect())

    block.y += 3
    if block.top > 360:
        block.y = -20
        block.x = random.randint(0, 460)

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.draw.rect(screen, (235, 80, 80), block)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Alle Lektionen in Spiele mit Pygame erstellen

Übe selbstständig: Pygame-Playground