Menu
CoddyTech

Clicca sulla gemma

Fa parte della sezione Il game loop del percorso Pygame di Coddy. Lezione 14 di 32.

get_pos indica dove si trova il puntatore. Un clic è un evento: quando si preme un pulsante del mouse, il ciclo di eventi riceve un evento pygame.MOUSEBUTTONDOWN in quel fotogramma. Il suo event.pos indica dove è avvenuto il clic.

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

La gemma rientra in un quadrato di 30 per 30 a partire da (gx, gy). Un clic colpisce la gemma quando x è compresa tra i lati sinistro e destro del quadrato e y tra il lato superiore e quello inferiore. Python permette di scrivere gx <= x <= gx + 30 per dire «x è compresa tra gx e gx + 30».

Una gemma raccolta salta in un nuovo punto con random.randint, mentre un ciclo for disegna il punteggio come una fila di piccoli quadrati rosa, uno per ogni punto.

challenge icon

Sfida

Facile
  1. Aggiungi import random in cima e score = 0 prima del ciclo.
  2. Quando si verifica MOUSEBUTTONDOWN, se event.pos è all'interno del quadrato da (gx, gy) a (gx + 30, gy + 30): aggiungi 1 a score, imposta gx su random.randint(15, 435) e gy su random.randint(55, 315).
  3. Dopo la gemma, disegna il punteggio: per ogni i in range(score), un rettangolo rosa (240, 110, 180) in (10 + 10 * i, 14, 8, 8).

Provalo tu

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()

Tutte le lezioni di Il game loop

Esercitati da solo: Playground Pygame