728x90

4강에서 할 일
4강에서는 맵의 경계를 벗어나면 게임이 종료되도록 만듭니다.
- 10×10 격자의 유효 범위를 정합니다
- 뱀이 벽을 넘었는지 검사합니다
- 벽 충돌 시 게임을 종료합니다
이제부터 게임에 “실패 조건”이 생깁니다.
1) 우리 게임의 유효 좌표 범위
격자 크기는 10×10입니다.
즉, 가능한 좌표는 다음과 같습니다.
- x 좌표: 0 ~ 9
- y 좌표: 0 ~ 9
이 범위를 벗어나면 벽 충돌입니다.
2) 벽 충돌 조건 만들기
뱀의 위치는 snake_x, snake_y로 관리하고 있습니다.
아래 중 하나라도 만족하면 벽에 부딪힌 것입니다.
- snake_x < 0
- snake_x >= GRID_SIZE
- snake_y < 0
- snake_y >= GRID_SIZE
이 조건은 이동이 끝난 직후에 검사합니다.
3) 벽에 부딪히면 게임을 종료합니다
이번 강의에서는 단순하게 프로그램을 종료합니다.
(게임 오버 화면은 나중에 만듭니다)
이동 로직 바로 아래에 다음 코드를 추가합니다.
if (
snake_x < 0 or
snake_x >= GRID_SIZE or
snake_y < 0 or
snake_y >= GRID_SIZE
):
pygame.quit()
sys.exit()
이제 뱀이 화면 밖으로 나가면 즉시 종료됩니다.
4) 지금 단계에서의 게임 상태
현재 게임은 다음과 같은 상태입니다.
- 초록색 뱀이 방향키로 이동합니다
- 격자 한 칸씩 이동합니다
- 벽에 닿으면 게임이 끝납니다
4강 정리
이번 강의에서 배운 내용입니다.
- 격자 게임에서는 “유효 좌표 범위”가 매우 중요합니다
- 벽 충돌은 좌표 비교로 간단히 처리합니다
- 이동 → 충돌 검사 순서를 지킵니다
전체 코드
더보기
import pygame
import sys
pygame.init()
# =========================
# 기본 설정
# =========================
CELL_SIZE = 40
GRID_SIZE = 10
SCREEN_SIZE = CELL_SIZE * GRID_SIZE
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
# =========================
# 화면 설정
# =========================
screen = pygame.display.set_mode((SCREEN_SIZE, SCREEN_SIZE))
pygame.display.set_caption("10x10 Snake Game")
clock = pygame.time.Clock()
# =========================
# 뱀 초기 위치 (격자 좌표)
# =========================
snake_x = 5
snake_y = 5
# =========================
# 방향 설정
# =========================
direction = "RIGHT"
next_direction = direction
# =========================
# 이동 제어
# =========================
move_delay = 1
move_counter = 0
# =========================
# 게임 루프
# =========================
while True:
# 이벤트 처리
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 방향키 입력
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and direction != "DOWN":
next_direction = "UP"
elif event.key == pygame.K_DOWN and direction != "UP":
next_direction = "DOWN"
elif event.key == pygame.K_LEFT and direction != "RIGHT":
next_direction = "LEFT"
elif event.key == pygame.K_RIGHT and direction != "LEFT":
next_direction = "RIGHT"
# 이동 타이밍
move_counter += 1
if move_counter >= move_delay:
move_counter = 0
direction = next_direction
if direction == "UP":
snake_y -= 1
elif direction == "DOWN":
snake_y += 1
elif direction == "LEFT":
snake_x -= 1
elif direction == "RIGHT":
snake_x += 1
# 벽 충돌 처리
if (
snake_x < 0 or
snake_x >= GRID_SIZE or
snake_y < 0 or
snake_y >= GRID_SIZE
):
pygame.quit()
sys.exit()
# 배경
screen.fill(BLACK)
# 격자 → 픽셀
pixel_x = snake_x * CELL_SIZE
pixel_y = snake_y * CELL_SIZE
# 뱀 머리
snake_rect = pygame.Rect(pixel_x, pixel_y, CELL_SIZE, CELL_SIZE)
pygame.draw.rect(screen, GREEN, snake_rect)
# 화면 갱신
pygame.display.update()
# FPS
clock.tick(10)
728x90
'⚙️ Python > 🎮 Pygame 실전' 카테고리의 다른 글
| [Pygame] 🐍 스네이크 게임 만들기 6강 | 먹이 처리 + 점수 (0) | 2026.01.06 |
|---|---|
| [Pygame] 🐍 스네이크 게임 만들기 5강 | 먹이 생성하기 (랜덤위치) (0) | 2026.01.05 |
| [Pygame] 🐍 스네이크 게임 만들기 3강 | 키보드 입력으로 뱀 머리 이동하기 (0) | 2026.01.03 |
| [Pygame] 🐍 스네이크 게임 만들기 2강 | 뱀 머리 그리기 (격자 좌표 이해) (0) | 2026.01.02 |
| [Pygame] 🐍 스네이크 게임 만들기 1강 | 게임 창과 기본 루프 (0) | 2026.01.01 |