Menu
CoddyTech

Edelstein unter der Kiste

Teil des Abschnitts Die Spielschleife der Pygame-Journey von Coddy. Lektion 19 von 35.

Jetzt wird die Kiste zum Spiel. Jeder Edelstein erscheint unter der Kiste: Zieh die Kiste weg und klicke auf den Edelstein, dann bewegt sich die Kiste auf den nächsten.

Ein Rect hat einen center, den Punkt in seiner Mitte. Gib einem Rect den Mittelpunkt eines anderen, und es sitzt genau darauf, unabhängig von ihrer Größe:

gem = pygame.Rect(300, 120, 30, 30)
crate = pygame.Rect(0, 0, 60, 60)
crate.center = gem.center

Nur crate bewegt sich, zu (285, 105, 60, 60). Mach das einmal vor der Schleife für den ersten Edelstein und dann jedes Mal, wenn ein Edelstein einen neuen Platz bekommt.

challenge icon

Aufgabe

Einfach

Verstecke jeden Edelstein unter der Kiste.

  1. Setze direkt nach dem Erstellen von crate crate.center = gem.center.
  2. Setze im Edelstein-Zweig nach dem neuen gem.y erneut crate.center = gem.center.

Drücke auf „Spielen“, ziehe die Kiste weg und klicke auf den Edelstein: Die Kiste springt auf den nächsten. Klicke dann auf „Prüfen“.

Probier es selbst

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Gem Hunt")
clock = pygame.time.Clock()

gem = pygame.Rect(225, 165, 30, 30)
crate = pygame.Rect(40, 230, 60, 60)
dragging = False
score = 0

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if crate.collidepoint(event.pos):
                dragging = True
            elif gem.collidepoint(event.pos):
                score += 1
                gem.x = random.randint(15, 435)
                gem.y = random.randint(55, 315)
        elif event.type == pygame.MOUSEBUTTONUP:
            dragging = False
        elif event.type == pygame.MOUSEMOTION and dragging:
            crate.move_ip(event.rel)

    screen.fill((30, 30, 46))
    gem_points = [gem.midtop, gem.midright, gem.midbottom, gem.midleft]
    pygame.draw.polygon(screen, (80, 220, 255), gem_points)
    if gem.collidepoint(pygame.mouse.get_pos()):
        pygame.draw.rect(screen, (255, 196, 0), gem.inflate(10, 10), 2)
    pygame.draw.rect(screen, (150, 100, 50), crate)
    pygame.draw.rect(screen, (110, 70, 35), crate, 3)
    for i in range(score):
        pygame.draw.rect(screen, (240, 110, 180), (10 + 10 * i, 14, 8, 8))
    mouse_x, mouse_y = pygame.mouse.get_pos()
    pygame.draw.circle(screen, (240, 240, 240), (mouse_x, mouse_y), 10, 2)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Alle Lektionen in Die Spielschleife

Übe selbstständig: Pygame-Playground