Colpisci la racchetta
Fa parte della sezione Progetti del percorso Pygame di Coddy. Lezione 14 di 31.
Quando la palla tocca una racchetta, dovrebbe tornare indietro. ball.colliderect(right) ti dice se si toccano.
Invertire il segno, vx = -vx, nasconde un’insidia. Se la palla è ancora dentro la racchetta nel fotogramma successivo (ha colpito il bordo della racchetta o la racchetta le è finita addosso), il segno si inverte ancora, e ancora: la palla trema dentro la racchetta.
Imposta la direzione invece di invertirla. abs(vx) è vx senza il segno, quindi è sempre positivo:
if ball.colliderect(left):
vx = abs(vx)
if ball.colliderect(right):
vx = -abs(vx)Dalla racchetta sinistra la palla va sempre a destra, e da quella destra sempre a sinistra, indipendentemente da quanti fotogrammi rimangono a contatto.
Sfida
MedioDopo il rimbalzo contro la parete, quando la palla collide con left, imposta vx = abs(vx); quando collide con right, imposta vx = -abs(vx).
Provalo tu
import pygame
pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pong")
clock = pygame.time.Clock()
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)
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
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)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Progetti
2Pong per due
La pallaRimbalzoEsercitati da solo: Playground Pygame