Menu
CoddyTech

Servizio

Lezione 35 di 40 del corso Crea giochi con Pygame di Coddy.

Dopo un punto, la palla dovrebbe aspettare al centro finché un giocatore non è pronto. Una variabile indica se deve aspettare:

waiting = False

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            waiting = False
    # le racchette si muovono sempre
    if not waiting:
        # la palla si muove, rimbalza e segna punti; un punto imposta waiting = True

Le racchette rimangono fuori da if, così i giocatori possono prepararsi mentre la palla aspetta. La barra spaziatrice è un'azione che si attiva una sola volta per pressione, quindi viene rilevata da un evento KEYDOWN.

Mentre la palla aspetta, mostra Press Space to serve vicino al bordo inferiore, centrato in (300, 360).

challenge icon

Sfida

Medio
  1. Prima del ciclo, imposta waiting = False.
  2. Inserisci il movimento della palla, i rimbalzi e il punteggio sotto if not waiting: e imposta waiting = True dopo ogni punto.
  3. Un evento KEYDOWN per pygame.K_SPACE imposta waiting = False.
  4. Mentre è in attesa, mostra Press Space to serve centrato in (300, 360).

Provalo tu

import pygame

pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pong")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 36)

ball = pygame.Rect(293, 193, 14, 14)
vx, vy = 5, 4
left = pygame.Rect(20, 160, 12, 80)
right = pygame.Rect(568, 160, 12, 80)
left_score = 0
right_score = 0

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_w]:
        left.y -= 6
    if keys[pygame.K_s]:
        left.y += 6
    if keys[pygame.K_UP]:
        right.y -= 6
    if keys[pygame.K_DOWN]:
        right.y += 6
    left.clamp_ip(screen.get_rect())
    right.clamp_ip(screen.get_rect())

    ball.x += vx
    ball.y += vy
    if ball.top <= 0 or ball.bottom >= 400:
        vy = -vy
    if ball.colliderect(left):
        vx = abs(vx)
    if ball.colliderect(right):
        vx = -abs(vx)
    if ball.left > 600:
        left_score += 1
        ball.center = (300, 200)
        vx = -vx
    if ball.right < 0:
        right_score += 1
        ball.center = (300, 200)
        vx = -vx

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), left)
    pygame.draw.rect(screen, (235, 80, 80), right)
    pygame.draw.rect(screen, (255, 196, 0), ball)
    score = font.render(f"{left_score} : {right_score}", True, (240, 240, 240))
    screen.blit(score, score.get_rect(center=(300, 30)))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Crea giochi con Pygame

Esercitati da solo: Playground Pygame