C# 기반의 콘솔 텍스트 RPG 게임입니다.
플레이어는 맵을 탐험하며 적과 전투하거나, NPC와 시스템을 해킹하여 다양한 방식으로 챕터를 클리어 할 수 있습니다.
적과의 전투뿐만 아니라 퍼즐 요소가 포함되어 있어 상황에 맞게 플레이해야 합니다.
- 언어: C#
- 프레임워크: .NET 8.0
- 개발 환경: Visual Studio 2022
플레이어는 방향키를 이용해 맵을 탐험하고, 상호작용(Z 키)으로 NPC 및 시스템을 해킹할 수 있습니다.
적과의 전투에서는 공격, 특수 공격, 방어, 아이템 사용, 전략적 후퇴 등의 선택이 가능하며, 플레이어의 레벨 및 스탯에 따라 전투 방식이 달라집니다.
NPC 해킹: 적의 보안 시스템을 스캔하고 이름을 밝혀 해킹을 수행합니다.
필드 오브젝트 해킹: 특정 시스템을 해킹하여 기믹을 해결할 수 있습니다.
퍼즐 요소: 제한시간 내에 암호를 해독하거나, 특정 명령어를 입력해야 하는 등 다양한 기믹이 존재합니다.
상태 패턴을 활용하여 다양한 게임 상태를 손쉽게 추가할 수 있도록 설계하였습니다.
각 기능별 독립적인 상태 관리가 가능하여 개발과 유지보수가 용이합니다.
타이틀 화면입니다.
숫자 선택을 통해서 새로 시작하기, 이어서 하기, 종료를 진행할 수 있습니다.
플레이어의 이름과 직업을 선택할 수 있습니다.
밖으로 나가면 메인 메뉴로 넘어갈 수 있습니다.
메인 메뉴에서는 플레이어의 상태를 보거나 의뢰 수주, 챕터 선택, 인벤토리 보기, 종료를 할 수 있습니다.
플레이어의 상태를 볼 수 있습니다.
레벨업을 통해 스텟 포인트를 얻었다면 능력치 배분을 진행할 수 있습니다.
원하는 챕터를 선택해서 챕터의 의뢰를 받을 수 있습니다.
원하는 챕터를 선택할 수 있습니다.
선택한 챕터의 임무 브리핑을 들을 수 있습니다.
방향키를 입력하여 플레이어(P)를 조작할 수 있습니다.
-
P: 플레이어 위치
-
E: 적
-
N: NPC
-
C: CCTV
-
O: 문
가까이에서 Z를 누르면 상호작용 할 수 있습니다.
Q를 누르면 해킹모드로 변경됩니다.
적을 해킹성공하면 이름이 모두 밝혀져 있습니다.
적을 해킹성공하면 적을 직접 움직일 수 있습니다. 플레이어가 갈 수 없는 길도 적을 해킹해서 갈 수 있습니다.
적과 전투할 수 있습니다.
공격, 특수공격, 방어, 아이템, 전략적 후퇴를 선택할 수 있습니다.
🔍 자세한 설명 보기
- 몬스터는 인터페이스와 리스트로 관리. 랜덤 함수로 수와 종류를 조절하며 몬스터는 일정 확률로 스킬을 사용합니다.
- 플레이어의 레벨에 따라 몬스터의 스펙이 높아지는 간단한 레벨 스케일링 작업을 했습니다.
- 치명타 확률과 회피 확률을 설정. 각 수치는 플레이어의 특정 스텟에 영향을 받습니다.
- 인터페이스와 리스트로 관리하는 스킬. 전투 시작 때마다 조건을 만족하는 스킬이 전체 리스트에서 플레이어의 리스트로 이동합니다.
스킬은 특정 스탯의 영향을 받으며, 적과 스킬의 타입에 따라 추가 피해가 발생합니다. - 전투 중 후퇴가 가능합니다. 일정 확률로 실패할 수 있으며 이는 특정 스탯의 보정을 받습니다.
- 방어는 받는 피해를 감소시키며 MP 회복 효과를 갖습니다. 이 또한 스탯의 보정을 받습니다.
게임 진행 방식의 다양성과 개인 기호에 부합하기 위해 초기 생성 클래스 별로 세부 스탯을 상이하게 설정했습니다.
전투가 끝나고 획득한 경험치에 따라 레벨이 오르면 스탯을 찍을 수 있습니다. 스탯은 Str, Dex, Int로 구성되어 있으며 각 스탯은 게임의 진행에 영향을 주도록 되어있습니다.
적의 보안 설명을 입력하여 적의 이름을 알아낼 수 있습니다.
적의 정보를 스캔하여 이름을 밝혀낸 후, 이름을 입력하여 해킹 공격을 수행하는 시스템입니다.
해킹 분위기를 살리기 위해 점진적으로 정보를 공개했습니다.
정확한 입력을 통해 상대를 무력화하는 해킹 전투 시스템입니다.
🔍 자세한 설명 보기
- 제한시간 내에 보안 정보를 입력하여 적의 이름을 일부 공개
- 정보 정확도에 따라 공개되는 글자 수 증가
- 100% 정확도 시, 전체 이름 공개
- 기술적 구현:
HashSet을 사용하여 중복 방지하며 랜덤 위치 글자 공개
- 플레이어가 NPC의 이름을 입력하여 해킹 공격
- 입력 정확도에 따라 피해량 결정
- 100% 일치 시, NPC 무력화
- 실패 시, NPC 반격 시스템 적용
- NPC가 플레이어를 역해킹하여 공격
- 랜덤한 해킹 코드를 입력하여 방어
- 입력 정확도에 따라 피해량 감소
- 제한시간 동안 입력 가능, 시간이 줄어들수록 색상 변화
- 제한시간 초과 시 자동 진행
- 백스페이스 기능 추가하여 난이도 조절
필드에 존재하는 오브젝트들을 해킹하는 해킹 시스템입니다.
특별 명령어들을 통해서 기믹을 수행할 수 있습니다.
🔍 자세한 설명 보기
- 유저 입력을 커맨드로 변환하는 기능 구현
- 방향키
↑ / ↓로 이전에 입력한 커맨드를 빠르게 불러오기 가능 Tab키를 눌러 커맨드를 자동 완성하는 기능 추가
살펴보기를 통해 다른 층을 확인할 수 있습니다.
플레이어가 가지고 있는 아이템들을 볼 수 있고 사용할 수 있습니다.
아이템 종류에 상관없이 Add()와 Use() 함수를 통해 사용 가능합니다.
Item 인터페이스를 활용하여 아이템 관리, 하지만 Deserialize 시 객체 타입이 복원되지 않는 문제 발생 → 해결책으로 리플렉션을 활용하여 함수 실행 및 아이템 타입만 저장 후,Use() 시 해당 타입의 새 객체를 생성하여 기능 실행
Serialize 가능한 class를 모두 한 번에 저장/불러오기 할 수 있습니다. 원하는 class만 지정도 가능합니다.
파라미터로 받은 타겟 class에 load한 class의 데이터를 덮어씌우기 위해 고생했고, 결국 프로퍼티를 하나하나 불러와 덮어 씌우는 식으로 해결했습니다.
각각의 팀원이 챕터별로 작업하고, 스테이지도 자유롭게, 챕터에 맞는 기믹도 자유롭게 할 수 있도록 작성했습니다.
🔍 자세한 설명 보기
챕터를 설계하는 사람이 스테이지의 크기를 정하고, 스테이지 내부에 자신이 원하는 타일을 지정하여 맵을 설계할 수 있습니다.
또한, 스테이지 내에 퀘스트 아이템을 추가하여 기믹으로 활용할 수 있습니다. (예: 비밀번호 획득 등)
그러나, 파편화된 클래스들(일관성이 부족함)로 인해 구조적으로 복잡해지고,
기믹을 설정해놓은 코드에 대한 이해가 어려워 개별 챕터 작업 시 협업이 어려운 점이 있었습니다.





















