본문 바로가기

개인 프로젝트/기타

[ 미니 게임 ] 공룡 게임(1)

간단한 미니 게임 만들어보기 - 1일차

오늘은 간단한 미니 게임을 만들어보려고 합니다. 주제는 바로 " 크롬 공룡 게임 " 입니다.

이 게임은 인터넷 연결이 끊기면 크롬 브라우저에서 자동으로 실행되는 게임으로, 누구나 한 번쯤은 접해본 적이 있을 것입니다. 유명한 미니 게임 중 하나일 뿐만 아니라 제작도 비교적 쉬워 보여서, 제 스타일로 한번 만들어보려고 합니다.

 

 


 

1. PYGAME 설치

 

우선 저는 이 프로젝트 진행에 vscode를 사용했습니다.

vscode를 설치하고 python 설치하여 설정까지 마무리한 상태로 프로젝트를 진행했다는 점 알아주시면 좋겠습니다.

 

이 미니게임을 위해서는 vscode 터미널 창에 들어가서 " pip install pygame " 를 실행해주셔야 합니다.

실행 해주시면 pygame이 설치가 되는 것을 콘솔창에서 확일할 수 있을겁니다.

 

공룡파일을 만들어 그안에 게임 코드 및 이미지 폴더를 추가 했습니다.

 

pygame 설치를 완료했다면 이제 공룡 게임 만들기의 시작이 되는 것입니다.

 

 

2. 게임 기본 구성 제작

우선 공룡 게임의 기본 구성을 생각해봅시다. 공룡게임은 공룡이 장애물을 피하는 게임입니다.

크롬 공룡 게임

 

그러니 저도 우선 공룡 게임의 기본 구성인 장애물을 피하는 구조를 만들어볼것입니다. 

import pygame

# Pygame 초기화
pygame.init()

# 화면 크기 설정
WIDTH, HEIGHT = 800, 400
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("공룡게임")  # 윈도우 제목을 한글로 설정

# 색상 정의
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)

# 공룡 설정
dino_width, dino_height = 50, 50
dino_x, dino_y = 50, HEIGHT - dino_height
is_jumping = False
jump_velocity = 15
gravity = 1

# 장애물 설정
obstacle_width, obstacle_height = 20, 40
obstacle_x = WIDTH
obstacle_y = HEIGHT - obstacle_height
obstacle_velocity = 10

# 메인 게임 루프
running = True
clock = pygame.time.Clock()

while running:
    screen.fill(WHITE)  # 화면 배경을 흰색으로 채우기
   
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False  # 창 닫기 이벤트 처리
   
    # 공룡 점프 로직
    keys = pygame.key.get_pressed()
    if not is_jumping:
        if keys[pygame.K_SPACE]:  # 스페이스 키를 누르면 점프 시작
            is_jumping = True
            initial_jump_velocity = jump_velocity
   
    if is_jumping:
        dino_y -= initial_jump_velocity  # 공룡을 위로 이동
        initial_jump_velocity -= gravity  # 점프 속도에 중력 적용
        if initial_jump_velocity < -jump_velocity:
            is_jumping = False
            dino_y = HEIGHT - dino_height  # 공룡을 바닥으로 리셋
   
    # 장애물 이동 로직
    obstacle_x -= obstacle_velocity
    if obstacle_x < 0:
        obstacle_x = WIDTH  # 장애물이 화면 밖으로 나가면 위치 초기화
        obstacle_velocity += 0.5  # 게임 난이도 증가: 속도 증가
   
    # 충돌 감지
    if dino_x < obstacle_x < dino_x + dino_width and dino_y + dino_height > obstacle_y:
        running = False  # 충돌 시 게임 종료
   
    # 공룡 그리기
    pygame.draw.rect(screen, BLACK, (dino_x, dino_y, dino_width, dino_height))
   
    # 장애물 그리기
    pygame.draw.rect(screen, RED, (obstacle_x, obstacle_y, obstacle_width, obstacle_height))
   
   
    pygame.display.update()  # 화면 업데이트
    clock.tick(30)  # 초당 30 프레임으로 설정

pygame.quit()  # Pygame 종료

 

공룡이 다가오는 장애물을 피하는 구조로  위와 같이 코드를 작성했습니다. 

이걸 한번 실행해보면 아래의 모습이 나옵니다. 이걸 보고 "정말 이 결과물이 공룡 게임이 될 수 있을까?"라는 생각이 들 수도 있습니다. 하지만 하나하나 기능을 추가해가며 완성해 나가는 과정이, 미니 게임이든 어떤 프로젝트든 가장 큰 재미라고 생각합니다.

공룡을 대신하는 검은 사각형과 장애물인 빨간 사각형

 

 


 

 

현재 결과를 실행해보니 게임 시작 화면, 게임 오버 화면, 그리고 점수 표시하는 UI가 전혀 없어서 게임이 매우 허전하게 느껴집니다. 따라서 이제부터 이 부분들을 하나씩 하나씩 추가해보려고 합니다.

 

우선 게임 시작 화면을 추가해봅시다. 저는 게임 시작 화면에 게임 타이틀과 함께 스페이스바를 누르면 게임이 실행되는 구조를 코드에 추가해보려고 합니다. 추가하려는 타이틀과 시작하기 위해 키를 누르세요. 라는 문구를  pygame.font.SysFont 함수를 이용하여 폰트를 설정하고, 해당 폰트로 텍스트를 렌더링  해줍니다.

"Jump!Dinosaur" 타이틀과 시작 키를 알려주는 문구를 화면에 추가

 

" Press SPACE to start " 라는 문구에 깜빡임을 추가하고 싶어 아래와 변수를 추가해줬습니다.

글자 깜빡임을 위한 변수 추가
깜빡임 적용

 

적용이 잘되어서 실행 시 게임 안에서 글자가 잘 깜빡깜빡 거리는것을 확인하였습니다. 또한 스페이스바를 누르면 메인 게임으로 잘 넘어갔습니다. 게임 화면이라던가 전체적인 모습은 마지막에 제가 영상으로 넣어드리겠습니다.

 

게임 시작 화면을 추가하였으니, 이제는 장애물을 피하지 못하고 닿았을 때 게임 오버 되는 구조를 만들어보겠습니다. 이 부분을 자연스럽게 구현하기 위해, 플레이어가 장애물과 충돌할 때의 처리를 추가할 필요가 있어보입니다. 충돌 감지 변수를 구현하여, 충돌이 감지되면 게임 오버 상태로 전환하고 게임 오버 화면을 보이게 만들어 보겠습니다.

 

게임 오버 화면도 게임 시작화면과 동일하게 변수랑 깜빡임 추가해주는것은 동일하게 진행하였습니다. 다른 점이 있다면 

 

재시작 변수 초기화
게임 오버 화면 전환

 

게임 재시작을 위한 변수 초기화라던가 충돌 감지하여 게임 오버 화면으로 전화되는 코드를 추가로 작성해야하는 부분인것 같습니다.

프로젝트가 최종적으로 완성되면 깃허브에 이 미니 게임 코드를 올릴 계획입니다.

코드를 참고하실 예정이라면 이 글보다는 나중에 올라갈 깃허브 코드로 편하게 확인하시는것을 추천드립니다.

 


 

게임 오버 화면까지 원활하게 구현된 것 같습니다. 이제 남은 부분은 점수 표시입니다.

공룡 게임은 시작과 동시에 점수가 올라가는 구조로 되어 있습니다. 이를 저도 똑같이 구현해보겠습니다. 변수와 코드 작성 방식은 이전과 동일하게 하되, 점수를 표시하는 부분을 추가하도록 하겠습니다.

 

1초마다 하기에는 느리게 올라가서 0.1초로 설정
공룡 게임처럼 4자리 수로 나오게 설정
 
그럼 이제 목표했던 게임 시작 화면, 게임 오버 화면, 그리고 점수 표시하는 UI를 모두 추가했습니다.
결과를 한번 영상으로 아래에 보여드리겠습니다.
 

 

반디캠 사용해서 Jump!Dinosaur 실행 화면 녹화

 

 


 

3.  후기

 

다음 글에서는 이 게임을 게임처럼 완성시키려는 과정을 작성하려고 합니다. 공룡 이미지, 장애물, 그리고 배경 이미지를 추가하고 음성 효과도 넣어볼 예정입니다. 이렇게 하면 게임이 최종 완성 단계에 들어갈것 같습니다. 이렇게 계획대로 진행하면 플레이어들에게 더욱 재미있고 완성도 있는 게임을 제공할 수 있을 거 같다는 생각을 합니다. 

 

깃허브 주소 https://github.com/EUMGOUN01/DinosaurGame