Servizio
Lezione 35 di 41 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 = TrueLe 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).
Sfida
MedioAspetta una battuta dopo ogni punto.
- Prima del ciclo, imposta
waiting = False. - Inserisci il movimento della palla, i rimbalzi e il punteggio sotto
if not waiting:e impostawaiting = Truedopo ogni punto. - Un evento KEYDOWN di
pygame.K_SPACEimpostawaiting = False. Durante l'attesa, mostraPress Space to servecentrato in(300, 360).
Premi «Gioca» e manca la palla: resta al centro finché non premi Spazio. Poi premi «Verifica».
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()
Tutte le lezioni di Crea giochi con Pygame
Esercitati da solo: Playground Pygame