Menu
CoddyTech

Thắng hay thua

Thuộc phần Vòng lặp trò chơi trong hành trình Pygame của Coddy. Bài học 32 trên 35.

Trò chơi kết thúc. Ở đây, bạn thua khi số mạng còn 0 và thắng khi điểm số đạt 10. Khi chưa xảy ra điều nào trong hai điều này, trò chơi vẫn tiếp diễn.

Đặt mọi thứ chuyển động bên 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ẽ 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 blit tại một Rect, vị trí dùng là góc trên bên trái của Rect, vì vậy văn bản được căn 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, các lần bắt được 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, ở chính giữa tại (240, 160).

Nhấn Chơi và để ba khối rơi trượt qua: 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 Vòng lặp trò chơi

Tự luyện tập: Playground Pygame