Di nuovo al centro
Fa parte della sezione Progetti del percorso Pygame di Coddy. Lezione 15 di 31.
Quando un giocatore manca la palla, questa esce dalla finestra dal suo lato. Riportala al centro e mandala verso l’altro lato.
if ball.right < 0 or ball.left > 600:
ball.center = (300, 200)
vx = -vxball.right < 0 significa che tutta la palla ha superato il bordo sinistro, mentre ball.left > 600 significa che tutta la palla ha superato il bordo destro. Impostare ball.center sposta il Rect in modo che il suo centro si trovi in quel punto; le sue dimensioni restano le stesse.
Qui vx = -vx è sicuro: la palla è al centro, lontana da entrambe le racchette.
Sfida
FacileQuando l’intera palla supera il bordo sinistro o destro, imposta il suo center su (300, 200) e inverti 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
if ball.colliderect(left):
vx = abs(vx)
if ball.colliderect(right):
vx = -abs(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)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Tutte le lezioni di Progetti
Esercitati da solo: Playground Pygame