Menu
CoddyTech

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 = -vx

ball.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 đỡ.

challenge icon

Thử thách

Dễ

Đưa quả bóng bị đánh trượt trở lại giữa màn hình.

  1. Khi toàn bộ quả bóng vượt qua mép trái hoặc mép phải, đặt center thành (300, 200).
  2. Đổi dấu vx tạ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

Tự luyện tập: Playground Pygame