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.
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 thànhTruekhix >= 420vày >= 300. - Tô màu bằng
(40, 110, 70)khiwon, nếu không thì dùng(30, 30, 46). - 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
1Vòng lặp trò chơi
Mở cửa sổTô màu nềnTự luyện tập: Playground Pygame