Batti il servizio
Fa parte della sezione Progetti del percorso Pygame di Coddy. Lezione 17 di 31.
Dopo un punto, la palla dovrebbe aspettare al centro finché un giocatore non è pronto. Una flag indica se è in attesa:
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 pallina si muove, rimbalza e segna punti; un punto imposta waiting = TrueLe racchette restano fuori dall’if, così i giocatori possono prepararsi mentre la palla aspetta. La barra spaziatrice è un’azione che si verifica una volta per pressione, quindi viene attivata da un evento KEYDOWN.
Mentre la palla aspetta, mostra Press Space to serve vicino al bordo inferiore, centrato in (300, 360).
Sfida
Medio- Prima del ciclo, imposta
waiting = False. - Inserisci il movimento della palla, i rimbalzi e il conteggio dei punti sotto
if not waiting:e impostawaiting = Truedopo ogni punto. - Un evento KEYDOWN per
pygame.K_SPACEimpostawaiting = False. - Mentre è in attesa, mostra
Press Space to servecentrato 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()
Tutte le lezioni di Progetti
Esercitati da solo: Playground Pygame