가운데로 돌아가기
Coddy Pygame 여정의 프로젝트 섹션에 포함된 레슨. 31개 중 15번째.
플레이어가 공을 놓치면 공은 플레이어 쪽 창을 벗어납니다. 공을 중앙으로 되돌린 다음 반대쪽으로 보냅니다.
if ball.right < 0 or ball.left > 600:
ball.center = (300, 200)
vx = -vxball.right < 0은 공 전체가 왼쪽 가장자리를 지나갔다는 뜻이고, ball.left > 600은 공 전체가 오른쪽 가장자리를 지났다는 뜻입니다. ball.center를 설정하면 Rect의 중앙이 해당 지점에 오도록 이동하며, 크기는 그대로 유지됩니다.
여기서 vx = -vx는 안전합니다. 공이 중앙에 있고 패들에서 멀리 떨어져 있기 때문입니다.
챌린지
쉬움공 전체가 왼쪽 또는 오른쪽 가장자리를 지나면 center를 (300, 200)으로 설정하고 vx의 부호를 반전하세요.
직접 해보기
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()
프로젝트의 모든 레슨
직접 연습해 보세요: Pygame 플레이그라운드