Menu
CoddyTech

Chạm đến đích

Bài học 8 trên 41 trong khóa học Tạo trò chơi với Pygame của Coddy.

Một trò chơi cần có mục tiêu. Vẽ một hình vuông màu xanh lá ở góc dưới bên phải, khi hình vuông của người chơi đi vào bên trong, người chơi sẽ thắng.

Mục tiêu nằm tại (420, 300) và có kích thước 60 x 60. Hình vuông của người chơi nằm bên trong mục tiêu khi cạnh trái của nó ở vị trí 420 trở lên và cạnh trên ở vị trí 300 trở lên. Cả hai điều kiện đều phải đúng, vì vậy hãy nối chúng bằng and.

Trạng thái thắng phải được giữ nguyên. Lưu trạng thái đó vào một biến bắt đầu bằng False và chỉ chuyển thành True:

won = False

while running:
    # di chuyển hình vuông
    if x >= 420 and y >= 300:
        won = True
    if won:
        screen.fill((40, 110, 70))
    else:
        screen.fill((30, 30, 46))

Khi won là True, không có câu lệnh nào đặt lại nó, nên nền vẫn giữ màu xanh lá ngay cả khi hình vuông rời khỏi mục tiêu.

challenge icon

Thử thách

Dễ

Đổi màn hình thành màu xanh lá khi hình vuông chạm đến đích.

  1. Tạo won = False trước vòng lặp. Đặt thành True khi x >= 420 và y >= 300.
  2. Tô màu bằng (40, 110, 70) khi won, nếu không thì dùng (30, 30, 46).
  3. Vẽ đích trước hình vuông: (60, 200, 120) tại (420, 300, 60, 60).

Nhấn Chơi và điều khiển hình vuông đi vào đích: nền chuyển sang màu xanh lá. Sau đó nhấn Kiểm tra.

Tự làm thử

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Move the Square")
clock = pygame.time.Clock()

x, y = 220, 160

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    speed = 4
    if keys[pygame.K_SPACE]:
        speed = 8
    if keys[pygame.K_LEFT]:
        x -= speed
    if keys[pygame.K_RIGHT]:
        x += speed
    if keys[pygame.K_UP]:
        y -= speed
    if keys[pygame.K_DOWN]:
        y += speed

    x = max(0, min(x, 480 - 40))
    y = max(0, min(y, 360 - 40))

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (255, 196, 0), (x, y, 40, 40))
    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