Trở về giữa
Bài học 33 trên 41 trong khóa học Tạo trò chơi với Pygame của Coddy.
Khi người chơi đánh hụt, bóng rời khỏi cửa sổ ở phía của họ. Đưa bóng trở lại giữa màn hình rồi đánh bóng về phía bên kia.
if ball.right < 0 or ball.left > 600:
ball.center = (300, 200)
vx = -vxball.right < 0 có nghĩa là toàn bộ quả bóng đã vượt qua mép trái, còn ball.left > 600 có nghĩa là toàn bộ quả bóng đã vượt qua mép phải. Gán giá trị cho ball.center sẽ di chuyển Rect sao cho tâm của nó nằm tại điểm đó; kích thước vẫn giữ nguyên.
Lệnh vx = -vx ở đây an toàn: bóng đang ở giữa màn hình, cách xa mọi thanh đỡ.
Thử thách
DễĐưa quả bóng bị đánh trượt trở lại giữa màn hình.
- Khi toàn bộ quả bóng vượt qua mép trái hoặc mép phải, đặt
centerthành(300, 200). - Đổi dấu
vxtại đó nữa.
Nhấn Chơi rồi đánh trượt quả bóng: bóng quay lại và đi theo hướng ngược lại. Sau đó nhấn Kiểm tra.
Tự làm thử
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()
Tất cả bài học trong Tạo trò chơi với Pygame
1Vòng lặp trò chơi
Mở cửa sổTô màu nền4Hai người chơi và một quả bóng
Quả bóngNảyTự luyện tập: Playground Pygame