Menu
CoddyTech

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ụt

Phầ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.

challenge icon

Thử thách

Trung bình

Kết thúc trò chơi bằng chiến thắng hoặc thất bại.

  1. 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:.
  2. Sau điểm số và số mạng, hiển thị Game over khi lives == 0, hoặc You win! khi score == 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

Tự luyện tập: Playground Pygame