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.centerNur 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.
Aufgabe
EinfachVerstecke jeden Edelstein unter der Kiste.
- Setze direkt nach dem Erstellen von
cratecrate.center = gem.center. - Setze im Edelstein-Zweig nach dem neuen
gem.yerneutcrate.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