Chơi lại
Thuộc phần Vòng lặp trò chơi trong hành trình Pygame của Coddy. Bài học 34 trên 35.
Sau khi trò chơi kết thúc, người chơi không cần khởi động lại chương trình. Nhấn R để bắt đầu trò chơi mới: đưa mọi giá trị đã thay đổi về trạng thái ban đầu.
elif event.key == pygame.K_r and (lives == 0 or score == 10):
score = 0
lives = 3
basket.x = 200
block.y = -20
block.x = random.randint(0, 460)Điều kiện này rất quan trọng. Nếu không có (lives == 0 or score == 10), phím R sẽ xóa điểm giữa chừng trong trò chơi. Các dấu ngoặc nhóm hai điều kiện kết thúc lại với nhau, nên and áp dụng cho cả hai.
Cho người chơi biết phím cần nhấn: hiển thị Press R to play again bên dưới kết quả.
Thử thách
Trung bìnhNhấn R để bắt đầu ván mới.
- Trong nhánh KEYDOWN, khi phím là
pygame.K_rvà trò chơi đã kết thúc, đặt điểm số thành 0, số mạng thành 3,basket.xthành 200 và thả một khối mới từy = -20tại một tọa độ x ngẫu nhiên. - Khi trò chơi đã kết thúc, hiển thị
Press R to play againở giữa tại(240, 200).
Nhấn Chơi, để thua rồi nhấn R: một ván mới bắt đầu. 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
paused = False
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_p:
paused = not paused
if lives > 0 and score < 10 and not paused:
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))
if lives == 0:
message = font.render("Game over", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))
elif score == 10:
message = font.render("You win!", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))
if paused:
message = font.render("Paused", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))
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