Mạng
Thuộc phần Vòng lặp trò chơi trong hành trình Pygame của Coddy. Bài học 31 trên 35.
Để trượt thì phải chịu mất mát. Cho người chơi 3 mạng và trừ đi một mạng mỗi khi khối rơi qua đáy. Bạn đã có sẵn chỗ trong code để xử lý việc đó: nhánh block.top > 360.
if block.top > 360:
block.y = -20
block.x = random.randint(0, 460)
lives -= 1Hiển thị số mạng giống như cách bạn hiển thị điểm số: kết xuất f"Lives: {lives}" ở mỗi khung hình và blit nó vào góc trên bên phải, tại (370, 10).
Thử thách
DễCho người chơi ba mạng.
- Trước vòng lặp, đặt
lives = 3. - Giảm một mạng khi khối rơi qua đáy.
- Hiển thị
f"Lives: {lives}"bằng(240, 240, 240)và blit tại(370, 10).
Nhấn Chơi và để khối rơi trượt qua: màn hình sẽ hiện Lives: 2. Sau đó nhấn Kiểm tra.
Tự làm thử
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
basket = pygame.Rect(200, 330, 80, 16)
block = pygame.Rect(220, 0, 20, 20)
score = 0
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]:
basket.x -= 8
if keys[pygame.K_RIGHT]:
basket.x += 8
basket.clamp_ip(screen.get_rect())
block.y += 3
if block.top > 360:
block.y = -20
block.x = random.randint(0, 460)
if block.colliderect(basket):
block.y = -20
block.x = random.randint(0, 460)
score += 1
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (80, 160, 255), basket)
pygame.draw.rect(screen, (235, 80, 80), block)
score_text = font.render(f"Score: {score}", True, (240, 240, 240))
screen.blit(score_text, (10, 10))
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