흔한 덕후의 잡동사니
프로젝트: TextRPG_Maple (텍스트 기반 RPG 게임) 본문
TextRPG_Maple은 텍스트 기반 RPG 게임으로, C#에 대한 이해도를 높이고, 팀프로젝트를 경험하기 위해 진행되었습니다. 또한 객체지향 프로그래밍(OOP)과 다양한 디자인 패턴을 적용하여 추후의 확장성과 유지보수성을 높이는 데 중점을 두었습니다.
작성자 GitHub: ChinoDaiski
ChinoDaiski - Overview
ChinoDaiski has 27 repositories available. Follow their code on GitHub.
github.com
GitHub - ColdEgg98/TextRPG_Maple
Contribute to ColdEgg98/TextRPG_Maple development by creating an account on GitHub.
github.com
주요 작업 내용 및 기술적 도전
1. 던전 시스템 구현
[ 던전 층수 및 랜덤 몬스터 등장 기능 ]
던전의 최대 층수를 30층으로 설정하고, 각 층마다 랜덤한 몬스터가 등장하도록 구현했습니다.
10층마다 보스 몬스터가 등장할 수 있도록 설계하여 게임의 긴장감을 높였습니다.
[ 이어하기 기능 ]
프로세스 종료시 json을 사용해 플레이어의 정보를 저장하고, 이어하기 기능을 통해 마지막 탐험 층부터 게임을 재개할 수 있도록 구현했습니다.
2. 전투 시스템
[ 턴제 전투 시스템 ]
플레이어와 몬스터의 턴을 관리하는 턴제 전투 시스템을 구현했습니다.
전투 중 스킬 사용, 아이템 사용, 공격 및 방어 등의 상호작용을 추가했습니다.
3. 데이터베이스 및 파일 입출력 관리
[ DB 매니저 구현 ]
C#에서 제공하는 csvHelper를 사용해 CSV 파일을 활용하여 데이터를 저장하고 로드하는 기능을 추가했습니다.
몬스터, 아이템, 스킬 등의 데이터를 데이터베이스(DB)에서 관리하도록 구현했습니다.
( 추가 방법 : 콘솔 명령 창에 Install-Package CsvHelper 입력 )
[ 파일 입출력 매니저 ]
파일 읽기 및 쓰기 기능을 중앙에서 관리하는 파일 입출력 매니저를 구현했습니다.
파일 경로 관리 및 예외 처리 로직을 추가하여 안정성을 높였습니다.
4. 객체 관리 및 프로토타입 패턴 적용
[ ObjectManager 구현 ]
게임 내 객체(플레이어, 몬스터, 아이템 등)를 생성, 삭제, 관리하는 ObjectManager를 구현했습니다.
[ 프로토타입 패턴 적용 ]
게임 매니저에 프로토타입 패턴을 적용하여 원본 객체를 복제하는 방식으로 객체 생성을 최적화했습니다.
5. UI 및 사운드 개선
[ Scene UI 통일 ]
Console에서 제공하는 색상 변환 기능을 사용해 모든 씬의 소개글을 노란색으로 통일하여 UI의 일관성을 높였습니다.
[ 사운드 매니저 추가 ]
NAudio lib를 프로젝트에 적용시켜 음악 및 사운드 효과를 관리하는 SoundManager를 구현했습니다.
사운드 재생, 일시 정지, 정지 기능을 추가하여 게임의 몰입감을 높였습니다.
(추가 방법 : 콘솔 명령 창에 Install-Package NAudio 입력 )
6. 로그 관리 및 디버깅
[ LogManager 구현 ]
중앙집중식 로그 관리를 위한 LogManager를 구현했습니다.
로그 레벨(INFO, WARN, ERROR)을 구분하여 디버깅 및 추적을 용이하게 했습니다.
기술 스택
프로그래밍 언어: C#
개발 환경: Visual Studio
버전 관리: GitKraken
디자인 패턴: 프로토타입 패턴, 싱글톤 패턴
데이터 관리: CSV 파일 기반 데이터베이스
프로젝트에서 배운 점
1. 객체지향 프로그래밍(OOP)의 실질적 적용
클래스 설계, 상속, 다형성 등을 활용하여 코드의 재사용성과 확장성을 높이는 방법을 배웠습니다.
객체 간의 관계를 명확히 정의함으로써 유지보수성을 크게 향상시킬 수 있었습니다.
2. 디자인 패턴의 활용
프로토타입 패턴을 적용하여 객체 생성을 최적화하고, 싱글톤 패턴을 통해 프로그램 전역에서 매니저 클래스에 접근 가능하게 하여 작업의 효율성을 높였습니다.
추후 오브젝트 풀 패턴을 활용하여 객체 생성 및 삭제 비용을 줄이는 방법도 고려 중입니다.
3. 데이터 관리의 중요성
데이터베이스와 파일 입출력을 통해 게임 데이터를 체계적으로 관리하는 방법을 익혔습니다.
특히 JSON을 활용하여 객체의 정보를 통째로 저장하고 불러오는 기능을 구현하며, 데이터 직렬화 및 역직렬화의 편리함을 경험했습니다.
4. 버그 수정 및 문제 해결
다양한 버그를 해결하며 디버깅 능력과 문제 해결 능력을 키울 수 있었습니다.
예를 들어, 플레이어의 Property 저장 및 불러오기 순서 문제를 해결하며 데이터 처리의 중요성을 깨달았습니다.
5. Git 커밋 메시지를 통한 버전 관리
"참가 인원 / 기능별" 브랜치를 생성하고, 내역을 커밋하여 충돌을 자신의 브랜치에서 해결한 후 dev 브랜치에 병합하는 방식으로 버전 관리 경험을 쌓았습니다. 이를 통해 팀 프로젝트에서의 협업 능력과 Git 활용 능력을 향상시킬 수 있었습니다.
6. JSON의 유용성
JSON을 사용하여 객체의 정보를 통째로 저장하고 불러오는 기능을 구현했습니다.
C++에서 메모리를 통째로 저장하거나 값을 하나하나 저장하는 번거로움 없이, JSON이 내부적으로 객체의 속성을 수치화하여 저장하는 기능을 제공해 편리함을 느꼈습니다.
7. 패키지 추가의 유용성
필요한 패키지를 명령어만으로 쉽게 추가하고 적용할 수 있어, Python처럼 빠르게 개발 환경을 구축할 수 있었습니다.
이를 통해 개발 생산성을 크게 높이고, 프로젝트 진행 속도를 가속화할 수 있었습니다.
'포트폴리오 > C#' 카테고리의 다른 글
프로젝트: CookieRunner (쿠키런 - 오븐브레이크 모작) (0) | 2025.03.04 |
---|