Menu
CoddyTech

Klicke auf den Edelstein

Teil des Abschnitts Die Spielschleife der Pygame-Journey von Coddy. Lektion 14 von 32.

get_pos gibt an, wo sich der Zeiger befindet. Ein Klick ist ein Ereignis: Wenn eine Maustaste gedrückt wird, empfängt die Ereignisschleife in diesem Frame ein pygame.MOUSEBUTTONDOWN-Ereignis. event.pos gibt an, wo der Klick gelandet ist.

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        running = False
    elif event.type == pygame.MOUSEBUTTONDOWN:
        x, y = event.pos
        if gx <= x <= gx + 30 and gy <= y <= gy + 30:
            score += 1

Der Edelstein passt in ein Quadrat mit einer Seitenlänge von 30, dessen Ursprung bei (gx, gy) liegt. Ein Klick trifft ihn, wenn x zwischen der linken und rechten Seite des Quadrats und y zwischen seiner oberen und unteren Seite liegt. In Python kannst du gx <= x <= gx + 30 für „x liegt zwischen gx und gx + 30“ schreiben.

Ein eingesammelter Edelstein springt mithilfe von random.randint an eine neue Stelle, und eine for-Schleife zeichnet die Punktzahl als Reihe kleiner pinker Quadrate, eines pro Punkt.

challenge icon

Aufgabe

Einfach
  1. Füge oben import random und vor der Schleife score = 0 ein.
  2. Wenn bei MOUSEBUTTONDOWN event.pos innerhalb des Quadrats von (gx, gy) bis (gx + 30, gy + 30) liegt: addiere 1 zu score, setze gx auf random.randint(15, 435) und gy auf random.randint(55, 315).
  3. Zeichne nach dem Edelstein den Punktestand: für jedes i in range(score) ein pinkes (240, 110, 180) rect bei (10 + 10 * i, 14, 8, 8).

Probier es selbst

import pygame

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

gx, gy = 225, 165

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

    screen.fill((30, 30, 46))
    gem_points = [(gx + 15, gy), (gx + 30, gy + 15), (gx + 15, gy + 30), (gx, gy + 15)]
    pygame.draw.polygon(screen, (80, 220, 255), gem_points)
    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