본문 바로가기
프로그래밍/게임 개발

파이썬 지렁이 게임 만들기 - 게임 개발자 첫걸음

by 노마드데이터랩 2023. 3. 21.
728x90
반응형

이 코드는 지렁이 게임을 구현하는 파이썬 코드입니다.

코드는 크게 다음과 같은 부분으로 나뉘어집니다.

1. 필요한 라이브러리와 모듈을 import 합니다.

os: 운영 체제와 상호작용하기 위한 모듈
curses: 터미널에서 GUI 프로그램을 구현하기 위한 모듈
random: 난수를 생성하기 위한 모듈
현재 사용 중인 터미널 창의 크기를 가져오고, curses 라이브러리를 초기화합니다.

2. 초기 지렁이 위치와 크기, 먹이 위치를 설정합니다.

3. 키보드 입력을 받아 방향을 전환합니다.

4. 새로운 먹이를 생성하고, 지렁이를 이동시킵니다.

5. 게임 오버 조건을 검사하고, 게임이 종료됩니다.

6. 지렁이를 화면에 그립니다.

이 코드를 실행하면, 터미널 창에 지렁이 게임이 나타나며, 방향키를 이용해 지렁이를 조작할 수 있습니다. 먹이를 먹으면 점수가 올라가며, 벽이나 지렁이 몸통에 부딪히면 게임이 종료됩니다.

완벽한 코드는 아니라서 실행은 되지만, 에러들이 있으니 하나씩 수정해보시면 좋을 것 같습니다.

버그들

방향키를 잘못 누르면 게임이 종료.

import os
import curses
from random import randint

# 터미널 창 크기 가져오기
columns, rows = os.get_terminal_size()

# 윈도우 설정
curses.initscr()
win = curses.newwin(rows-1, columns-1, 0, 0)
win.keypad(1)
curses.noecho()
curses.curs_set(0)
win.border(0)
win.nodelay(1)

# 지렁이 초기 위치와 크기 설정
snake = [(4, 10), (4, 9), (4, 8)]
food = (10, 20)

# 이전 방향 기억 변수
key = curses.KEY_RIGHT

# 새 먹이 생성
win.addch(food[0], food[1], '*')

# 게임 루프
while key != 27:
    win.border(0)
    win.addstr(0, 2, 'Score: ' + str(len(snake) - 3) + ' ')
    win.addstr(0, 27, ' SNAKE ')
    win.timeout(150 - (len(snake)//5 + len(snake)//10) % 120)

    prev_key = key
    event = win.getch()
    key = key if event == -1 else event

    # 방향 전환 처리
    if key not in [curses.KEY_LEFT, curses.KEY_RIGHT, curses.KEY_UP, curses.KEY_DOWN, 27]:
        key = prev_key

    # 새 먹이 생성
    if snake[0] == food:
        food = (randint(1, 18), randint(1, 20))  # 랜덤한 위치로 이동
        while food in snake:
            food = (randint(1, 18), randint(1, 20))
        win.addch(food[0], food[1], '*')
    else:
        last = snake.pop()
        win.addch(last[0], last[1], ' ')

    # 지렁이 이동 처리
    if key == curses.KEY_RIGHT:
        snake.insert(0, (snake[0][0], snake[0][1] + 1))
    elif key == curses.KEY_LEFT:
        snake.insert(0, (snake[0][0], snake[0][1] - 1))
    elif key == curses.KEY_UP:
        snake.insert(0, (snake[0][0] - 1, snake[0][1]))
    elif key == curses.KEY_DOWN:
        snake.insert(0, (snake[0][0] + 1, snake[0][1]))
    else:
        pass

    # 게임 오버 조건 처리
    if snake[0][0] == 0 or snake[0][0] == 19 or snake[0][1] == 0 or snake[0][1] == 239 or snake[0] in snake[1:]:
        curses.endwin()
        quit()

    # 지렁이 그리기
    win.addch(snake[0][0], snake[0][1], '#')
    for i in range(1, len(snake)):
        win.addch(snake[i][0], snake[i][1], 'o')

curses.endwin()
728x90
반응형

댓글