Tường
Bài học 26 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 khi đầu rắn sắp rời khỏi lưới. Một ô nằm trên lưới khi cột của nó nằm trong khoảng từ 0 đến COLS - 1 và hàng của nó nằm trong khoảng từ 0 đến ROWS - 1.
if alive:
x = body[0][0] + direction[0]
y = body[0][1] + direction[1]
if x < 0 or x >= COLS or y < 0 or y >= ROWS:
alive = False
else:
# chèn, ăn hoặc lấy ra, như trướcLưu ý x >= COLS, không phải x > COLS: các cột được đánh số từ 0, vì vậy cột COLS đã nằm ngoài mép lưới.
Kiểm tra trước khi di chuyển. Đầu rắn không bao giờ đi ra ngoài lưới, và khi alive là false, con rắn sẽ nằm yên tại chỗ. Hiển thị Game over ở giữa tại (240, 180) khi giá trị này là false.
Thử thách
Trung bìnhKết thúc trò chơi khi rắn đâm vào tường.
- Đặt
alive = Truetrước vòng lặp, rồi đặt bước di chuyển bên trongif alive:. - Nếu ô mới
(x, y)nằm ngoài lưới, đặtalive = False; nếu không, hãy chèn, ăn hoặc xóa phần tử cuối như trước. - Khi
alivelà false, hiển thịGame overở giữa tại(240, 180).
Nhấn Chơi rồi đâm vào tường: dòng chữ Game over sẽ hiện ra và rắn sẽ dừng lại. Sau đó nhấn Kiểm tra.
Tự làm thử
import random
import pygame
CELL = 20
COLS, ROWS = 24, 18
TURNS = {
pygame.K_LEFT: (-1, 0),
pygame.K_RIGHT: (1, 0),
pygame.K_UP: (0, -1),
pygame.K_DOWN: (0, 1),
}
pygame.init()
screen = pygame.display.set_mode((COLS * CELL, ROWS * CELL))
pygame.display.set_caption("Snake")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
def draw_cell(cell, color):
col, row = cell
pygame.draw.rect(screen, color, (col * CELL + 1, row * CELL + 1, CELL - 2, CELL - 2))
def new_food(body):
while True:
cell = (random.randrange(COLS), random.randrange(ROWS))
if cell not in body:
return cell
body = [(5, 9), (4, 9), (3, 9)]
direction = (1, 0)
food = new_food(body)
score = 0
running = True
while running:
moving = direction
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key in TURNS:
turn = TURNS[event.key]
if turn != (-moving[0], -moving[1]):
direction = turn
x = body[0][0] + direction[0]
y = body[0][1] + direction[1]
body.insert(0, (x, y))
if (x, y) == food:
score += 1
food = new_food(body)
else:
body.pop()
screen.fill((30, 30, 46))
draw_cell(food, (235, 80, 80))
for cell in body[1:]:
draw_cell(cell, (120, 220, 120))
draw_cell(body[0], (180, 255, 160))
score_text = font.render(f"Score: {score}", True, (240, 240, 240))
screen.blit(score_text, (8, 6))
pygame.display.flip()
clock.tick(10)
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