벽
Coddy Pygame 여정의 프로젝트 섹션에 포함된 레슨. 31개 중 8번째.
머리가 격자 밖으로 나가게 되면 게임이 끝납니다. 열이 0부터 COLS - 1까지이고 행이 0부터 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:
# 이전처럼 insert, eat 또는 popx > COLS가 아니라 x >= COLS임에 유의하세요. 열 번호는 0부터 매겨지므로 COLS 열은 이미 가장자리를 벗어난 위치입니다.
이동하기 전에 검사하세요. 머리는 격자 밖으로 나가지 않으며, alive가 false가 되면 뱀은 있던 자리에 그대로 머뭅니다. alive가 false인 동안 (240, 180)의 중앙에 Game over를 표시하세요.
챌린지
중급- 루프 전에
alive = True로 설정합니다. - 이동 전체를
if alive:아래에 둡니다.x와y를 계산하고, 해당 칸이 격자 밖이면alive = False로 설정합니다. 그렇지 않으면 이전처럼 삽입하거나 먹이를 먹거나 제거합니다. alive가 false이면(240, 180)을 중심으로Game over를 표시합니다.
직접 해보기
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()
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
프로젝트의 모든 레슨
직접 연습해 보세요: Pygame 플레이그라운드