Thắng hay thua
Bài học 15 trên 41 trong khóa học Tạo trò chơi với Pygame của Coddy.
Trò chơi kết thúc. Ở đây, bạn thua khi số mạng còn 0 và thắng khi điểm đạt 10. Khi cả hai điều kiện này chưa xảy ra, trò chơi vẫn tiếp tục.
Đặt mọi thứ chuyển động dưới cùng một điều kiện, để chúng dừng lại khi trò chơi kết thúc:
if lives > 0 and score < 10:
# các phím, chiếc giỏ, khối, những lần hứng trúng và hứng hụtPhần vẽ vẫn nằm ngoài if: màn hình vẫn hiển thị khung hình cuối cùng, cùng với kết quả bên trên.
if lives == 0:
message = font.render("Game over", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))message.get_rect(center=(240, 160)) là Rect của hình ảnh văn bản được đặt sao cho tâm nằm tại (240, 160). Khi vẽ lên một Rect, vị trí được tính từ góc trên bên trái, vì vậy văn bản nằm chính giữa.
Thử thách
Trung bìnhKết thúc trò chơi bằng chiến thắng hoặc thất bại.
- Thụt lề mọi thứ chuyển động (các phím, giỏ, khối, việc bắt và bỏ lỡ) bên dưới
if lives > 0 and score < 10:. - Sau điểm số và số mạng, hiển thị
Game overkhilives == 0, hoặcYou win!khiscore == 10, căn giữa tại(240, 160).
Nhấn Chơi và bỏ lỡ ba khối: Game over sẽ hiển thị và trò chơi dừng lại. 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
lives = 3
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)
lives -= 1
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))
lives_text = font.render(f"Lives: {lives}", True, (240, 240, 240))
screen.blit(lives_text, (370, 10))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Tất cả bài học trong Tạo trò chơi với Pygame
2Sự kiện và va chạm
Cái giỏKhối rơiTự luyện tập: Playground Pygame