Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

127 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Still Hungry Text RPG

프로젝트 개요

'Still Hungry'는 C#으로 개발된 텍스트 기반의 롤플레잉 게임(RPG)입니다. 플레이어는 다양한 직업을 선택하고, 몬스터와 싸우고 아이템을 획득하며 캐릭터를 성장시킬 수 있습니다. 이 게임은 클래식한 텍스트 RPG의 재미를 현대적인 코딩 방식으로 구현하는 것을 목표로 합니다.

개발 인원: 5명
개발 기간: 2025.07.14 - 2025.07.21

주요 기능

  • 다양한 게임 씬: 타이틀, 마을, 상점, 던전, 전투 등 다양한 씬을 통해 게임이 진행됩니다.
  • 캐릭터 성장: 플레이어는 몬스터를 사냥하여 경험치를 얻고 레벨업을 할 수 있으며, 이를 통해 능력치를 향상시킬 수 있습니다.
  • 직업 시스템: 전사, 마법사, 궁수, 도적 등 다양한 직업을 선택할 수 있으며, 각 직업은 고유한 능력치와 스킬을 가지고 있습니다.
  • 아이템 및 장비: 무기, 방어구, 소모품 등 다양한 아이템을 획득하고 장착하여 캐릭터를 강화할 수 있습니다.
  • 스킬 시스템: 각 직업은 고유한 액티브 및 패시브 스킬을 사용하여 전투를 유리하게 이끌 수 있습니다.
  • 전투 시스템: 턴 기반의 전투 시스템을 통해 몬스터와 박진감 넘치는 전투를 즐길 수 있습니다.
  • 퀘스트 시스템: 다양한 퀘스트를 수행하고 보상을 받을 수 있습니다.
  • 데이터 관리: 게임 데이터는 JSON 형식으로 저장되어 쉽게 수정하고 관리할 수 있습니다.

플레이 예시

Image

핵심 설계

이 프로젝트는 확장성과 유지보수성을 높이기 위해 다음과 같은 핵심 설계 패턴과 원칙을 기반으로 구축되었습니다.

1. 싱글톤 패턴

Manager 클래스는 게임의 모든 핵심 관리자입니다. 예를 들어 씬의 전환을 책임지는SceneManager나 게임의 전반적인 상태를 관리하는 GameManager 등을 프로퍼티로 가지고 있습니다. 이를 통해 게임의 어떤 부분이든 매니저의 기능에 쉽게 접근할 수 있으며 데이터와 로직을 중앙에서 관리하여 일관성을 유지합니다.

  • Manager.cs: 싱글톤 패턴으로 구현된 최상위 매니저 클래스입니다. 게임 전반에 걸쳐 필요한 핵심 매니저들을 통합 관리합니다.
  • GameManager.cs: 게임의 전반적인 상태, 플레이어 데이터, 게임 흐름을 관리하는 중앙 허브 역할을 합니다.
  • SceneManager.cs: 타이틀, 마을, 전투 등 게임 씬(Scene)의 전환을 책임집니다.
  • DungeonManager.cs: 던전 진입 로직 및 던전 클리어/실패 결과를 처리합니다.
  • BattleManager.cs: 플레이어 턴, 몬스터 턴과 같은 전투와 관련된 흐름을 처리합니다.
  • ItemManager.cs, SkillManager.cs: 게임 내 모든 아이템과 스킬 정보를 관리하여 중복 생성을 방지하고 데이터 접근을 용이하게 합니다.

  • DataManager는 다른 매니저들과 달리 static으로 구현되었습니다. DataManager의 주된 임무는 '데이터를 파일에서 읽어와 메모리에 올려주는 것'으로, 게임 시작 시 한 번만 수행하면 되는 일회성 작업에 가깝습니다. 일단 로드가 끝나면 DataManager 자체는 게임이 진행되는 동안 변하는 상태를 가질 필요가 없습니다. 이렇게 상태가 없는 기능 모음은 static으로 만드는 것이 효율적입니니다. 객체를 굳이 생성할 필요 없이 DataManager.LoadGameData()처럼 바로 클래스 이름으로 접근해 기능을 사용할 수 있기 때문입니다.

2. 커맨드 패턴

플레이어의 입력을 객체(커맨드)로 캡슐화하여 처리합니다. 이 패턴은 요청을 보내는 객체(입력 핸들러)와 요청을 수행하는 객체(실제 로직)를 분리하여 시스템의 유연성을 높입니다.

  • IExecutable.cs: 모든 커맨드 클래스가 구현해야 하는 Execute() 메서드를 정의하는 인터페이스입니다.
  • Commands.cs: IExecutable 인터페이스를 구현한 구체적인 커맨드 클래스들이 포함되어 있습니다. 예를 들어, '인벤토리 보기', '공격하기' 등의 플레이어 행동이 각각의 커맨드 객체로 정의될 수 있습니다. 이를 통해 새로운 명령어를 추가하거나 기존 명령어의 동작을 수정하기 용이해집니다.

3. 추상화와 상속

공통된 속성과 기능을 가진 객체들을 추상화하고 상속 구조를 활용하여 코드의 재사용성을 높이고 구조를 체계화했습니다.

  • BaseScene.cs: 모든 씬 클래스(예: TownScene, BattleScene)의 부모가 되는 추상 클래스입니다. 각 씬이 가져야 할 기본 구조(예: EnterScene, Update)를 정의하여 씬 구현을 표준화합니다.

4. 데이터 관리 시스템

게임의 핵심 데이터를 코드와 분리하여 JSON 파일 형식으로 관리합니다. 이를 통해 게임의 밸런스를 조절하거나 새로운 콘텐츠(아이템, 몬스터 등)를 추가할 때 코드를 다시 컴파일할 필요 없이 데이터 파일만 수정하면 되므로 개발 및 유지보수가 매우 용이합니다.

  • Data/ 폴더: ItemData.json, MonsterStat.json, QuestData.json 등 게임의 모든 설정 데이터가 JSON 형식으로 저장되어 있습니다.
  • DataManager.cs: 게임 시작 시 JSON 파일들을 읽어와 GameData.cs와 같은 C# 객체로 변환(Deserialize)하여 메모리에 로드합니다.
  • SaveData.cs: 플레이어의 진행 상황(레벨, 아이템 등)을 저장하기 위한 데이터 구조를 정의하며, DataManager를 통해 UserData.json 파일로 저장(Serialize)됩니다.

프로젝트 구조

주요 폴더 및 파일

  • StillHungry/: C# 프로젝트의 소스 코드가 들어있는 메인 폴더입니다.
    • Program.cs: 게임의 진입점(Main 함수)입니다.
    • Commands/: 플레이어의 입력을 처리하는 커맨드 관련 클래스가 있습니다.
      • Commands.cs: 플레이어의 입력을 받아 특정 동작을 실행합니다.
      • IExecutable.cs: 커맨드 객체들이 구현해야 하는 인터페이스입니다.
    • Controller/: 플레이어, 몬스터 등 게임 내 캐릭터들을 제어하는 컨트롤러 클래스들이 있습니다.
      • PlayerController.cs: 플레이어의 행동과 능력치를 관리합니다.
      • MonsterController.cs: 몬스터의 행동과 생성 로직을 담당합니다.
      • InventoryController.cs: 플레이어의 인벤토리를 관리합니다.
      • CharacterController.cs: 플레이어와 몬스터의 기본이 되는 캐릭터 클래스입니다.
    • Data/: 게임 데이터의 구조를 정의하는 클래스들이 있습니다.
      • GameData.cs: 게임의 기본 데이터 구조를 정의합니다.
      • SaveData.cs: 저장 파일의 데이터 구조를 정의합니다.
    • Items/: 아이템 관련 클래스(무기, 방어구, 소모품 등)가 정의되어 있습니다.
      • Item.cs: 모든 아이템의 기본이 되는 클래스입니다.
    • Managers/: 게임의 핵심 로직을 관리하는 매니저 클래스들이 있습니다.
      • GameManager.cs: 게임의 전반적인 상태와 플레이어 데이터를 관리합니다.
      • SceneManager.cs: 게임 씬을 관리하고 전환합니다.
      • DataManager.cs: JSON 데이터를 로드하고 관리합니다.
      • BattleManager.cs: 전투 로직을 처리합니다.
      • DungeonManager.cs: 던전 관련 로직을 처리합니다.
      • ItemManager.cs: 아이템 관련 로직을 처리합니다.
      • SkillManager.cs: 스킬 관련 로직을 처리합니다.
    • Monsters/: 몬스터 클래스가 정의되어 있습니다.
      • Monster.cs: 몬스터의 기본이 되는 클래스입니다.
    • Scene/: 각 게임 씬의 로직을 구현한 클래스들이 있습니다.
    • Skills/: 스킬 관련 클래스가 정의되어 있습니다.
      • Skill.cs: 모든 스킬의 기본이 되는 클래스입니다.
    • UI/: 유저 인터페이스(UI) 관련 클래스들이 있습니다.
      • MenuNavigator.cs: 메뉴 네비게이션을 담당합니다.
      • UIManager.cs: UI를 화면에 표시하는 역할을 합니다.
    • Utils/: 유용한 유틸리티 클래스들이 있습니다.
      • StringConverter.cs: 문자열 변환 관련 유틸리티입니다.
      • StringFormatting.cs: 문자열 포맷팅 관련 유틸리티입니다.
  • Data/: 게임에 사용되는 모든 데이터 파일(JSON)이 저장되어 있습니다.
    • GameData/: 아이템, 몬스터, 플레이어 스탯 등 게임의 기본 데이터가 들어있습니다.
    • SaveData/: 플레이어의 게임 저장 데이터가 들어있습니다.

데이터 흐름

  1. DataManagerData/ 폴더의 JSON 파일들을 읽어 게임에 필요한 모든 데이터를 로드합니다.
  2. GameManagerPlayerController를 통해 플레이어 캐릭터를 생성하고, DataManager로부터 로드한 데이터를 기반으로 초기화합니다.
  3. SceneManager는 현재 게임 상태에 맞는 씬을 화면에 표시합니다.
  4. 플레이어의 입력에 따라 SceneManager는 다른 씬으로 전환하거나, GameManager를 통해 게임 상태를 변경합니다.
  5. 전투 시에는 BattleManagerPlayerControllerMonsterController를 사용하여 전투를 진행합니다.
  6. 게임 진행 상황은 GameManager의 저장 기능을 통해 UserData.json 파일에 저장됩니다.

About

StillHungryTextRPG

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages