유턴 금지
Coddy의 Pygame으로 게임 만들기 코스 레슨. 41개 중 22번째.
뱀은 곧바로 뒤로 돌 수 없습니다. 머리가 자신의 목으로 들어가게 되기 때문입니다. 따라서 반대 방향으로 돌려는 입력은 무시됩니다.
(dx, dy)의 반대는 (-dx, -dy)입니다. 오른쪽으로 이동하는 (1, 0)의 반대는 왼쪽인 (-1, 0)입니다.
가장 최근에 누른 키가 아니라 뱀이 마지막으로 이동한 방향과 비교하세요. 빠르게 두 번 누르면 같은 프레임에 입력이 들어갈 수 있습니다. 예를 들어 오른쪽으로 이동 중에 위쪽, 왼쪽 순서로 누르는 경우입니다. 위쪽은 허용되며, 왼쪽을 위쪽과 비교해도 허용되므로 뱀이 자기 몸 쪽으로 되돌아가게 됩니다. 그러므로 각 프레임 시작 시의 방향을 기억하세요:
while running:
moving = direction
for event in pygame.event.get():
# ...
turn = TURNS[event.key]
if turn != (-moving[0], -moving[1]):
direction = turn챌린지
쉬움뱀이 자기 자신 쪽으로 되돌아 회전하지 못하게 하세요.
- 게임 루프 안의 첫 번째 줄에
moving = direction을 설정하세요. moving의 반대 방향을 가리키는 키를 눌러도 아무 동작도 하지 않게 하세요. 다른 화살표 키를 누르면 뱀이 계속 회전합니다.
‘플레이’를 누른 다음 왼쪽 화살표 키를 누르세요. 뱀은 계속 오른쪽으로 갑니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
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()
def draw_cell(cell, color):
col, row = cell
pygame.draw.rect(screen, color, (col * CELL + 1, row * CELL + 1, CELL - 2, CELL - 2))
head = (5, 9)
direction = (1, 0)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key in TURNS:
direction = TURNS[event.key]
head = (head[0] + direction[0], head[1] + direction[1])
screen.fill((30, 30, 46))
draw_cell(head, (180, 255, 160))
pygame.display.flip()
clock.tick(10)
pygame.quit()
Pygame으로 게임 만들기의 모든 레슨
직접 연습해 보세요: Pygame 플레이그라운드