벽
Coddy의 Pygame으로 게임 만들기 코스 레슨. 40개 중 26번째.
머리가 격자 밖으로 나가게 되면 게임이 끝납니다. 열이 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 또는 pop 수행x > COLS가 아니라 x >= COLS라는 점에 유의하세요. 열 번호는 0부터 시작하므로 COLS 열은 이미 가장자리 밖입니다.
이동하기 전에 확인하세요. 머리는 격자 밖으로 나가지 않으며, alive가 false가 되면 뱀은 있던 자리에 그대로 있습니다. alive가 false인 동안 (240, 180)을 중심으로 Game over를 표시하세요.
챌린지
중급- 반복문 전에
alive = True를 설정하세요. - 전체 이동을
if alive:아래에 넣으세요.x와y를 계산하고, 해당 칸이 격자 밖이면alive = False로 설정하세요. 그렇지 않으면 이전처럼 삽입하고, 먹거나, 제거하세요. alive가 거짓이면Game over를(240, 180)의 중앙에 표시하세요.
직접 해보기
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으로 게임 만들기의 모든 레슨
직접 연습해 보세요: Pygame 플레이그라운드