Menu
CoddyTech

Chạm đến đích

Thuộc phần Vòng lặp trò chơi trong hành trình Pygame của Coddy. Bài học 8 trên 35.

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 đó, 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 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ữ lại. 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ó gì đặt nó lại thành giá trị khác, nên nền vẫn 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 biến này thành True khi x >= 420 và y >= 300.
  2. Tô nền bằng (40, 110, 70) khi won là đúng, nếu không thì dùng (30, 30, 46).
  3. Trước khi vẽ hình vuông, hãy vẽ đích: màu (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 sẽ 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 Vòng lặp trò chơi

Tự luyện tập: Playground Pygame