[TIL] C# - 프로젝트 회고 & 파일 로드 에러

MINO·2024년 5월 7일
0
post-thumbnail

2024-05-07

2주차 개인 프로젝트 (C# 콘솔창으로 만든 Text형 RPG 게임) 을 기반으로
전투 및 직업 기능을 추가한 3주차 팀 프로젝트를 끝마쳤다.


아래는 내가 작성한 ReadMe 이다.

☠️ Blood Stone ☠️

마을의 영웅이 되고자 하는 초보 모험가 성장 RPG 게임


🎮 프로젝트 소개

개인 프로젝트로 구현한 SpartaDungeon 를 업그레이드한 Blood Stone 입니다.

전투 및 직업 클래스가 추가되었으니 지금 당장 확인해보세요 !


⌛ 제작 기간

24-04-29 ~ 24-05-07

🙋‍♂️ 제작 인원

A11 - 권태하 , 길선호 , 김민우 , 최세은


💡 주요 기능

게임 시작 화면

  • 게임 시작 시 닉네임과 직업을 선택할 수 있습니다.
  • 세이브 파일이 있을 시, 불러오기와 새 게임을 선택할 수 있습니다.
  • 간단한 소개 말과 마을에서 할 수 있는 행동을 알려줍니다.
  • 원하는 행동의 숫자를 입력하면 실행됩니다.

1. 👀 상태 보기

  • 캐릭터의 정보를 표시합니다.
  • 레벨 / 이름 / 직업 / 공격력 / 방어력 / 체력 / 마나 / Gold , 총 8개의 속성을 가지고 있습니다.
  • 이후 장착한 아이템과 레벨에 따라 수치가 변경 될 수 있습니다.

2. 👁‍🗨 인벤토리

  • 보유 중인 아이템을 전부 보여줍니다. 이때 장착중인 아이템 앞에는 [E] 표시를 붙여 줍니다.
  • 장비와 포션, 그리고 던전에서 획득할 수 있는 아이템으로 분류가 됩니다.
  • 캐릭터 생성 시, 초보 모험가를 위해 소형 체력 포션 3개를 드립니다.

3. 💰 상점

  • 보유중인 골드와 아이템의 정보,가격이 표시됩니다.
  • 아이템 정보 오른쪽에는 가격이 표시됩니다.
  • 상점에 더 이상 재고가 없는 아이템이라면, 판매완료 로 표시됩니다.

4. ☠ 탑 ( + 전투 )

  • 몬스터가 랜덤으로 등장하게 됩니다.
  • 턴제 게임으로 캐릭터의 공격 차례가 끝나면, 몬스터들의 공격 차례가 됩니다.
  • HP 가 0 이 되기 전, 모든 몬스터를 잡아 전투에서 승리하세요.
  • [추가 기능] 치명타 , 회피 , 스킬 기능이 추가 되었습니다.

5. ⚔ 모험가 길드

  • 휴식을 통해 500G 으로 체력과 마나를 모두 회복합니다.
  • 현재까지의 게임 데이터를 저장할 수 있습니다.
  • 퀘스트 를 통해, 마을 주민들을 돕고 보상을 획득할 수 있습니다.
  • 몬스터에게서 드랍되는 혈석 을 비싼 값에 판매할 수 있습니다.

6. 👻 수상한 동굴

  • 동굴에서 나만의 펫 슬라임 을 구매하여 함께 동행할 수 있습니다.
  • 펫은 공격형, 회복형, 지원형이 있습니다.

6. 🌠 직업 (신규 클래스)

  • 기본 직업인 전사 이외에 마법사 직업을 선택할 수 있습니다.
  • 각 직업은 고유 스탯 및 스킬이 다를 수 있습니다.
  • 스킬에는 단일형, 다중형 이 존재합니다.

7. 💊 새로운 아이템

  • 소모성 아이템, 포션을 사용할 수 있습니다.
  • HP 와 MP 를 회복시킬 수 있는 일회성 아이템입니다.
  • 가까운 상점에서 만나볼 수 있습니다.

간단한 시연 영상은 아래 링크에서 확인할 수 있다.

GitHub - 제작 레포지토리
Youtube - 시연영상


와이어 프레임

필수 기능을 구현한 뒤, 선택 기능과 특별 기능을 추가하여 초기의 와이어 프레임과는 많이 달라졌지만 방향성과 흐름을 체크하는 데 도움이 된 와이어 프레임이다.


작업 방식

  1. Main 레퍼지토리에서 Dev 브랜치를 생성
  2. 각자의 Branch 를 생성 및 작업
  3. 기능을 추가할 때마다 자신의 Branch 에 Push
    4-1. 팀원들에게 알린 후, Dev 에 Merge
    4-2. 팀원들은 자신의 작업물을 저장한 뒤, 자신의 Branch 에 Dev 를 Merge
  4. Conflict 가 발생했다면, 해당 스크립트를 수정한 인원과 함께 상의하며 수정
  5. 3~5를 반복하며 프로젝트를 완성

최대한 깃 컨벤션을 활용하여 커밋하여,

오류가 발생한 코드를 쉽게 발견하여 처리할 수 있었다.


파일 로드 에러

데스크탑에서 작업을 하다가 노트북으로 Git Desktop 을 통해 파일을 불러와 작업을 할때면, 아래와 같은 파일 로드 에러가 발생했다.

이러한 에러 창과 함께 기존에 작성했던 스크립트의 한글이 모두 깨져버렸다.

해결법 (1)

프로젝트를 진행하는 중, 가끔 발생하는 에러로
해결 방안으로

  1. 다른 이름으로 저장 - 저장(인코딩하여 저장)
  2. 유니코드(서명 없는 UTF-8) 로 설정하여 저장

을 통해 해결할 수 있었지만, 매우 번거로웠다.


해결법 (2)

깃을 통해 작업물을 불러올 때마다, 반복되는 에러로 다른 해결 방안을 찾아보았다.

도구(T) - 옵션 - 텍스트 편집기 - 시그니처 없는 UTF-8 인코딩 자동 검색 활성화
방법으로 에러를 해결할 수 있었다.


구현한 기능들

Player.cs

전사와 마법사 직업의 부모 클래스인 Player 클래스를 담당하였다.


Guild.cs

휴식, 저장, 퀘스트 기능을 담당하였다.

휴식 - Animation

직접 구현한 기능 중 하나인 애니메이션을 가져와봤다.

Thread.Sleep 과 Console.SetCursorPosition 으로 구현한 애니메이션으로,
기존에 배운 반복문에 약간의 구글링을 통해 시각적 애니메이션 구현했다는 점에서 발표회에서 좋은 평을 들을 수 있었다.


Quest.cs

퀘스트를 관리하기 위한 클래스를 생성했다.
List 로 관리하여 전투와 인벤토리 스크립트에 트리거를 설치하여
특정 행위가 확인되면, 퀘스트가 업데이트 되고 완료되게 설정하였다.


DataManager.cs

데이터를 저장하고 불러오는 과정을 따로 모아두었다.

SaveData & LoadData

TIL 에서 많이 다뤘던 내용인 Json 저장 및 불러오기 방법을 활용하였다.

데이터가 존재할 경우, 기존 데이터를 불러오거나 새 게임을 시작할 수 있게 분기를 나눠주었다.


회고록

팀원들과 함께 프로젝트를 되돌아보며 아쉬운 점을 짚어보았다.

  • 와이어프레임을 작성하긴 했지만, 깔끔하지 않아 도움이 되긴 했지만 생각보다 불편한 점이 많았다.
    • 와이어프레임을 작성할 때, 가독성을 고려하여 보기 좋게 작성하도록 하자.
  • 많은 버그를 접하고 수정했지만, 트러블 슈팅을 작성하지 않아 아쉽다.
    • 트러블 슈팅을 따로 기록하는 공간을 만들어, 작업 도중 발생하는 버그와 해결 방안을 그때 그때 정리하면 좋을 것 같다.

반면, 좋았던 점도 있었다.
  • 다들 Git 을 사용하는 데에 익숙하지 않았지만 깃 컨벤션을 지켜가면서 조심히 Push, Merge 한 결과, 큰 사고 없이 무사히 프로젝트를 마치며 Git 사용법에 익숙해진 것 같다.

  • 팀원들과 주말과 대체 공휴일을 반납해가면서 열심히 프로젝트에 참여한 결과, 좋은 성과물이 나온 것 같다. 열정과 팀워크가 잘 맞는 팀이었다.


개인적으로 아쉬운 점도 있었다.

깃 컨벤션을 지키려고 노력했지만, 지켜지지 않은 잘못된 점이 하나 있었다.

하나의 기능이 완료되면, 팀원들에게 알리고 Push 하는 것이 맞지만
기능 하나를 구현한 뒤, 욕심이 나서 다른 기능까지 추가한 다음에
Push 를 하여 위와 같이 한번에 많은 스크립트를 수정한 적이 많았다.

다음 프로젝트부터는, 1 기능 1 push 를 지키도록 노력해야겠다.

TIL 마무리

이렇게 또, 팀 프로젝트 하나를 마무리할 수 있었다.

잘 맞는 팀원들과 함께 멋진 프로젝트를 완수할 수 있어서 좋았다.

내일부터는 Unity 로 다시 돌아가 팀 프로젝트를 진행할테니

또 한 주간 열심히 살아야겠다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글