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.
Thử thách
DễĐổi màn hình thành màu xanh lá khi hình vuông chạm đến đích.
- Tạo
won = Falsetrước vòng lặp. Đặt biến này thànhTruekhix >= 420vày >= 300. - Tô nền bằng
(40, 110, 70)khiwonlà đúng, nếu không thì dùng(30, 30, 46). - 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
1Di chuyển hình vuông
Mở cửa sổTô nền4Di chuyển theo thời gian
Thời gian deltaPixel mỗi giâyVector2Gia tốc và ma sátDi chuyển vòng quanh màn hìnhTự luyện tập: Playground Pygame