Post

pygame기반 chrome공룡 게임 제작기 리뷰

pygame기반 chrome공룡 게임 제작기 리뷰

1. 프로젝트 개요

이번 프로젝트는 학교 과제로 GITHUB협업을 통한 Pygame 기반의 간단한 공룡 게임을 만드는 과정이었습니다. 작업 내용은 리포지토리의 PR 단위로 정리하였고, 주요 이벤트와 수정 사항을 기록했습니다. 이 글에서는 제가 작업한 PR과 주요 기능, 그리고 해결한 문제를 공유 하고자 합니다.


2. 함께한 사람들


3. 브랜치 관리와 TODO 리스트 작성

브렌치

  • main: 정식 버전을 올리는 브랜치
  • Rel: Dev의 코드들을 정리해 릴리즈 버전으로 올리는 브랜치
  • Dev: 실험적인 개발을 하는 브랜치

TODO리스트를 통한 작업

일정은 매주 일요일 Rel을 올리고 2주에 한번씩 main으로 업데이트 하는 방식으로, 매주 TODO리스트를 작성해 할 일을 분담하고 각자 이슈에서 현재 상황을 브리핑 할 수 있도록 하였습니다.


4. 주요 PR 리뷰

PR #1: 초기 이미지와 기본적인 로직 구현

첫 시작은 참고한 코드을 기반으로 만들었습니다. 기반한 코드에서는 사실상 게임의 구색을 갖추지 못한 상태라 각자 pygame로 크롬 공룡게임 만들기 를 참고해 기본적인 것들을 구현 해 오기로 하였습니다. 위에서 이야기 했듯 기반 코드 에는 캐릭터와 장애물 이미지나 장애물과의 충돌과 같은 기본적인 부분들이 구현이 되어 있지 않아 그 부분을 먼저 구현 했습니다.

작업 내용:

  1. 공룡과 장애물 이미지를 추가.
  2. 점프와 엎드리기 로직 업데이트.
  3. 히트박스와 충돌 기능 구현
  4. 게임 종료 기능 구현
  5. hp추가

구현 과정:

  • 공룡및 장애물 이미지는 github chrome dino 에셋에서 받아와 Assets폴더에 저장. 그 후 기존의 색으로만 채워져 있던 공룡과 장애물에 가져온 이미지를 씌우는 로직을 작성 했습니다.
  • 기존에 없던 엎들이기 기능 추가 이후 점프가 너무 딱딱하게 움직이는 것을 해결 하기 위해 점프 로직을 수정했습니다.
  • 장애물은 존재 있기는 했지만 피할 수 없는 패턴이 존재해 장애물이 랜덤으로 생성되는 로직을 수정 했습니다.
  • 또 원래 게임 파일에서는 장애물과 공룡이 충돌하는 부분이 구현 되어 있지 않아 공룡과 장애물의 히트박스를 만들어 이 부분을 먼저 구현 하였습니다.
  • 충돌 구현이 되어 있지 않아 게임 종료가 없었기에 게임 종료 화면 및 재시작 기능을 구현 했습니다.
  • 이후 기존에 한번 충돌 해도 죽는 로직에서 여러번 맞을 수 있도록 HP를 추가 했습니다.

주요 이슈:

  • HP는 존재 하지만 데미지를 받은 후 무적 시간이 없어 한번에 죽는 문제 발생
  • drag-onhyu 님이 무적 합수를 추가 하는 부분을 이어서 개발 하기로 하였습니다.

배운점:

  • 처음으로 이슈를 사용해 팀원들과 소통해 문제를 해결 하는 방법을 알게 되었습니다.

PR #2: 속도 조정 및 디버깅 기능

대면 회의에서 초반 게임 속도 및 공룡의 히트 판정이 너무 빡빡하다는 이야기가 나오게 되어 초반 속도를 조절 하고 히트박스 조절을 위해 히트박스가 보이도록 구현 하게 되었습니다.

작업 내용:

  • 초반 게임 속도를 느리게 조정.
  • 디버깅을 위해 공룡 히트박스를 시각화.

구현 과정:

  • Obstacle 클래스에 각 Bird, SmallCactus, LargeCactus 클래스의 update함수의 화면 매 이동 속도를 조정해 초반 게임 속도룰 조절 하였습니다.
  • Dinosaure 클래스의 draw(그리기)함수에 히트박스를 시각화 할 수 있는 코드를 삽입 했습니다.

PR #3: 어두운 배경 테마 추가

이제 기본적인 게임의 구색은 갖추게 되었으니 부수적인 부분들을 추가 해 보기로 해 이번에는 원작 게임에도 존재하는 어두운 테마를 추가 해 보게 되었습니다.

작업 내용:

  • 어두운 배경 테마 추가.

구현 과정:

  • 기존에는 배경화면을 그냥 흰색 바탕으로 채우는 로직으로 구현이 되어 있어 어두운 배경과 밝은 배경을 변경 할 수 있도록 하기 위해 BackgroundManager를 만들어 배경 렌더를 담당하는 클래스를 만들어 구현 하였습니다.

PR #4: 구름 객체 추가

현재 배경이 너무 심심하다는 이야기가 나와 이번에는 게임 조금 더 풍부해 보이도록 구름을 추가 하는 작업을 하게 되었습니다.

작업 내용:

  • 구름 객체 구현

    구현 과정:

  • 이전에 배경테마을 위해 만들었던 BackgroundManager에게 관리되는 Cloud클래스를 만들어 구현 하였습니다.

주요 이슈:

  • 구름을 생성 했으나 구름이 나오는 간격이 보는 사람에 따라 너무 띄엄띄엄 나온다고 생각할 수 있을 꺼 같아 추후에 회의를 통해 구름의 생성 속도를 조절 해야 할 것 같습니다.

PR #5: 게임 종료 이후 ID와 함계 점수 저장

기존에 점수만 저장 되는 상태에서 ID를 적어 ID와 함께 점수를 저장 할 수 있도록 해 보았습니다.

작업 내용:

  • 게임 종료 후 사용자 ID와 점수를 저장하도록 수정.

구현 과정:

  • 게임 종료 화면을 띄우는 함수에서 ID를 받은 수 있는 박스를 생성해 사용자 입력을 받음
  • 입력받은 ID를 저장하는 부분은 Ranking클래스르 생성해 ID를 기존에 리스트 형태로 highscore.py저장 하던 것을 딕셔너리 형태로 저장 하도록 수정

주요 이슈:

  • 점수를 저장 할 수 있지만 한 게임 내에서만 저장이 가능함 게임을 종료 했다가 켜도 랭킹이 유지 되도록 업데이트가 필요해 보임

PR #6: 점프 로직 수정

개발 초창기 부터 있던 점프 했을 때 위로 무한대로 올라가는 버그 수정, 처음에는 맵 밖으로 나가지 못하게 막는 정도에 그쳤지만 현재 이 부분이 게임 플레이에 큰 영향을 미칠 것 같아 해당 버그를 수정 해 보았습니다.

작업 내용:

  • 점프 시 계속 올라가는 버그 수정.

구현 과정

  • Dinosaure클래스 jump메소드 로직에 Dinosaure의 Y축을 바닥으로 초기화 하는 코드를 넣어 해결 했습니다.

후속 작업:

  • 2단점프 관련해 버그를 발견해 이부분에 대한 수정이 필요해 보임
  • 조원들과 2단점프의 존재 여부와 버그 해결에 관해 이슈를 올려봄
  • 2단점프는 유지 하고 버그를 고치는 방향으로 개발 하기로 되어 2단점프를 구현한 Jeong Yoon Sun님께서 이어서 개발 하기로 결정 되었습니다.

PR #7 (예정): 현재 작업중…

  • 작업 계획:
    • 해당 테마들을 선택해서 저장 하고 불러오기
    • 바다, 우주, 도시 테마들을 각각 현재 게임에 적용 할 수 있도록 로직을 수정하기
    • 게임 내에서 해당 테마들로 바꿀 수 있도록 하기
  • 구현 과정:
    1. 반복해도 자연스러운 이미지를 선택 후 화면 사이즈를 고려해 높이를 600px로 편집해 Assets에 저장
    2. 각각의 테마 이미지들을 pygame.image.load()를 통해 변수로 저장
    3. 현재의 테마는 그냥 배경 색을 채우는 방식이기 때문에 Track로직을 사용해 배경을 이동 할 수 있게 수정
      • 이미지로 된 테마가 적용 되면 트랙 대신 테마 이미지가 계속 업데이트 되는 구조
    4. 시작 화면에 세팅에 해당 클래스를 받아 테마를 설정 할 수 있게 수정

5. 주요 문제들과 해결

브랜치

  • 처음에는 브렌치를 나누어 작업 하지 않았습니다. 하지만 작업을 하다 보니 버전 관리 측면에서 어려움이 있어 브렌치를 쪼개개 되었습니다.

    TODO리스트

  • 매번 이슈를 날려 할 일을 분담 하다 보니 나중에 어떤 작업을 누가 했는지나 언제 업데이트 된 내용인지 알기 힘든 문제가 발생해 TODO리스트를 작성해 일을 나누는 방식으로 진행하게 되었습니다.

    HP추가

  • HP와 추가 부분에서 캐릭터가 한번에 죽어 버리는 버그가 발생해 이 부분을 팀원과 함께 해결 하였습니다.

    점프 로직

  • 점프했을때 하늘로 계속 올라가게 되는 버그를 고치는 과정에서 2단 점프 부분과 문제가 발생해 2단 점프 로직을 짜신 분과 함께 협업하여 해결 했습니다.

6. 배운 점

  • Pygame의을 통한 게임 개발 방법
  • 기능별 브랜치와 PR과 버전 관리의 중요성.
  • GITHUB협업의 전반적인 흐름
  • 문제를 명확히 정의하고, TODO 리스트를 활용해 작업을 나누는 방법.
  • “협업은 코드를 짜는 능력보다 소통하는 능력이 더 중요하다!!”

7. 프로젝트 코드


마무리

이번 프로젝트는 단순한 과제가 아니라, GITHUB를 통합 협업에 있어 좋은 경험이었습니다. 각 PR에서 기능을 하나씩 추가하면서 개발의 흐름을 이해했고, 버그를 해결하며 성장할 수 있었습니다. 앞으로 더 많은 프로젝트에 이 경험을 녹여낼 수 있길 기대합니다.

This post is licensed under CC BY 4.0 by the author.