Hoàn thành trò chơi
Bài học 41 trên 41 trong khóa học Tạo trò chơi với Pygame của Coddy.
Bây giờ là các bước 3 đến 5: một thử thách, phần kết và văn bản. Rock Dodge giữ các tảng đá trong một danh sách các Rect: cứ mỗi 400 ms lại có một tảng đá mới, nhiều tảng cùng xuất hiện trên màn hình.
rocks = []
# Khi có sự kiện hẹn giờ NEW_ROCK:
rocks.append(pygame.Rect(random.randint(0, 450), -30, 30, 30))
# Ở mỗi khung hình:
for rock in rocks:
rock.y += 5
if rock.colliderect(player):
state = "lost"
rocks = [rock for rock in rocks if rock.top < 360]Dòng cuối cùng là biểu thức tạo danh sách: một danh sách mới chỉ chứa những tảng đá vẫn còn trên màn hình, để danh sách không tăng mãi.
Chuỗi state có giá trị "playing", "lost" hoặc "won", quyết định mỗi khung hình sẽ làm gì, giống như trong Sky Runner. Còn pygame.time.get_ticks() cho biết số mili giây đã trôi qua kể từ khi trò chơi bắt đầu, nhờ đó bạn có thể tạo bộ đếm thời gian: sống sót 20 giây để chiến thắng.
Trò chơi của bạn có thể dùng mọi thứ trong khóa học này, và hành trình Pygame còn giới thiệu thêm nhiều điều: sprite, hình ảnh, âm thanh, menu, điểm số cao và bản đồ.
Hãy tạo dấu ấn riêng cho trò chơi: thay đổi màu sắc, tốc độ và quy tắc. Sau đó chơi thử. Nếu trò chơi quá khó để thắng hoặc bạn thua quá nhanh, hãy điều chỉnh các con số cho đến khi trò chơi trở nên vui hơn.
Thử thách
DễHoàn thiện trò chơi của bạn.
- Thêm một thứ tự di chuyển.
- Hiển thị văn bản trên màn hình, chẳng hạn như điểm số hoặc đồng hồ đếm giờ.
- Thêm phần kết: cách thắng, cách thua hoặc cả hai.
Nhấn Chơi: một thứ tự di chuyển và văn bản của bạn hiển thị. 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("Rock Dodge")
clock = pygame.time.Clock()
player = pygame.Rect(220, 320, 40, 20)
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_LEFT]:
player.x -= 7
if keys[pygame.K_RIGHT]:
player.x += 7
player.clamp_ip(screen.get_rect())
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (80, 160, 255), player)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Tạo trò chơi với Pygame
Tự luyện tập: Playground Pygame