파이썬으로 스네이크 게임 만들기: 실전 프로젝트 가이드
프로그래밍을 배우는 가장 재미있는 방법 중 하나는 바로 간단한 게임을 만드는 것입니다. 게임을 통해 로직을 이해하고, 코딩의 기본 원리를 익힐 수 있기 때문이에요. 오늘은 스네이크 게임을 파이썬으로 만들어 보면서, 실전 프로젝트를 통해 게임 개발의 기초를 배워볼 거예요.
스네이크 게임 소개
스네이크 게임은 1970년대에 처음 등장한 클래식 게임으로, 플레이어는 뱀을 조작하여 음식을 먹으며 성장하는 게임이에요. 뱀은 길어질수록 조작이 어려워지며, 장애물이나 자기 자신과 충돌하면 게임이 끝나게 되죠.
게임의 목표
- 음식을 먹어 뱀의 길이를 증가시키기
- 벽 또는 자기 몸에 부딪히지 않기
- 가능한 한 높은 점수를 기록하기
Python과 Pygame 소개
이번 프로젝트에서는 파이썬의 Pygame 라이브러리를 사용할 거예요. Pygame은 게임 개발을 위한 Python 라이브러리로, 간단한 2D 게임을 만들기에 적합하죠. Pygame을 설치하려면, 터미널에서 다음 명령어를 입력해 주세요.
bash
pip install pygame
프로젝트 구조
이제 프로젝트를 시작해 볼거예요. 기본적인 프로젝트 구조는 다음과 같아요:
- main.py (게임 실행 파일)
- assets/
- snake_head.png (뱀 머리 이미지를 저장)
- food.png (음식 이미지를 저장)
코드 작성하기
이제 스네이크 게임의 코드를 작성해 볼까요. 아래는 간단한 스네이크 게임의 주요 코드들입니다.
색상 정의
white = (255, 255, 255)
yellow = (255, 255, 102)
black = (0, 0, 0)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)
화면 크기 설정
diswidth = 800
disheight = 600
dis = pygame.display.setmode((diswidth, disheight))
pygame.display.setcaption(‘Snake Game’)
게임 매개변수 설정
snakeblock = 10
snakespeed = 15
clock = pygame.time.Clock()
뱀을 그리는 함수
def oursnake(snakeblock, snakelist):
for x in snakelist:
pygame.draw.rect(dis, black, [x[0], x[1], snakeblock, snakeblock])
메인 게임 함수
def gameLoop():
gameover = False
gameclose = False
x1 = dis_width / 2
y1 = dis_height / 2
x1_change = 0
y1_change = 0
snake_list = []
length_of_snake = 1
foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
while not game_over:
while game_close == True:
dis.fill(blue)
font_style = pygame.font.SysFont("bahnschrift", 25)
mesg = font_style.render("You Lost! Press C-Play Again or Q-Quit", True, red)
dis.blit(mesg, [dis_width / 6, dis_height / 3])
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
game_over = True
game_close = False
if event.key == pygame.K_c:
gameLoop()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x1_change = -snake_block
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = snake_block
y1_change = 0
elif event.key == pygame.K_UP:
y1_change = -snake_block
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = snake_block
x1_change = 0
if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:
game_close = True
x1 += x1_change
y1 += y1_change
dis.fill(blue)
pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block])
snake_head = []
snake_head.append(x1)
snake_head.append(y1)
snake_list.append(snake_head)
if len(snake_list) > length_of_snake:
del snake_list[0]
for x in snake_list[:-1]:
if x == snake_head:
game_close = True
our_snake(snake_block, snake_list)
pygame.display.update()
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
length_of_snake += 1
clock.tick(snake_speed)
pygame.quit()
quit()
gameLoop()
코드 설명
- 게임 설정: 색상, 화면 크기, 뱀의 속도 등 게임의 기본 설정을 정의했어요.
- 게임 루프: 게임이 실행되는 메인 루프입니다. 상태에 따라 뱀을 움직이고, 충돌 검사 및 음식 먹기 동작을 수행해요.
- 뱀 그리기:
our_snake
함수를 통해 현재 뱀의 위치를 화면에 그리게 됩니다.
게임 실행 및 테스트
위 코드를 작성한 후 main.py
파일로 저장하고, 터미널에서 실행해 보세요. 게임이 잘 돌아가면 정말 뿌듯할 거예요. 물론 게임을 하면서 여러 추가 기능을 구현해 볼 수도 있습니다.
추가 가능 기능
- 레벨 시스템: 점수가 일정 수준을 초과하면 뱀의 속도를 증가시키는 기능.
- 스코어보드: 현재 점수를 화면에 표시하는 기능.
- 배경 음악: 게임에 음향을 추가하여 몰입도를 높이는 기능.
- 고급 그래픽: 더 나은 그래픽 요소와 애니메이션을 추가.
결론
스네이크 게임을 만들면서 프로그래밍의 기본기를 배울 수 있었어요. 이 프로젝트를 통해 얻은 경험이 앞으로의 프로그래밍 여정에 큰 도움이 될 것입니다. 게임 개발은 재미있을 뿐만 아니라 창의력을 발휘할 수 있는 좋은 기회예요. 지금 바로 시작해 보세요!
키 포인트 요약
키 포인트 | 설명 |
---|---|
파이썬과 Pygame | 게임 개발을 위한 강력한 도구 |
게임 루프의 중요성 | 게임의 지속적인 업데이트를 가능하게 함 |
성장하는 뱀 조작 | 음식을 먹으며 길어지는 뱀 |
추가 기능 | 게임을 풍부하게 만드는 아이디어 |