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ụtPhầ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.
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, các lần bắt được 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, ở 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
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