namespace CSharp
{
public enum GameMode
{
None,
Lobby,
Town,
Field
}
class Game
{
private GameMode mode = GameMode.Lobby;
private Player player = null;
private Monster monster = null;
private Random rand = new Random();
public void Process()
{
switch (mode)
{
case GameMode.Lobby:
ProcessLobby();
break;
case GameMode.Town:
ProcessTown();
break;
case GameMode.Field:
break;
}
}
private void ProcessLobby()
{
Console.WriteLine("직업을 선택하세요");
Console.WriteLine("[1] 기사");
Console.WriteLine("[2] 궁수");
Console.WriteLine("[3] 법사");
string input = Console.ReadLine();
switch (input)
{
case "1":
player = new Knight();
mode = GameMode.Town;
break;
case "2":
player = new Archer();
mode = GameMode.Town;
break;
case "3":
player = new Mage();
mode = GameMode.Town;
break;
}
}
private void ProcessTown()
{
Console.WriteLine("마을에 입장 했습니다.");
Console.WriteLine("[1] 필드로 간다.");
Console.WriteLine("[2] 로비로 돌아가기.");
string input = Console.ReadLine();
switch (input)
{
case "1":
mode = GameMode.Field;
break;
case "2":
mode = GameMode.Lobby;
break;
}
}
}
}
using System.ComponentModel;
using System.Numerics;
using System.Threading;
namespace CSharp
{
// 객체지향 문법을 활용한 TextRPG
class Program
{
static void Main(string[] args)
{
Game game = new Game();
while (true)
{
game.Process();
}
}
}
}
좋습니다! 아래는 제공해주신 TextRPG 예제 코드(Game.cs + Program.cs)를 한 줄 한 줄 완벽 분석한 후, 이를 블로그 포스팅용으로 다시 작성한 것입니다.
개념 설명 + 코드 분석 + 보완 설명까지 포함했으니, 그대로 복사해서 블로그에 올려도 될 정도로 자세하게 작성해드릴게요.
이번 포스트에서는 C# 객체지향 문법을 활용해 간단한 TextRPG 게임을 만드는 과정에서 배운 내용을 정리하고, 강의 예제 코드를 한 줄 한 줄 분석해보겠습니다.
RPG 게임의 전체 흐름은 아래와 같습니다.
| 파일명 | 설명 |
|---|---|
| Program.cs | 게임 전체 실행을 담당하는 메인 진입점 |
| Game.cs | 게임 상태와 흐름을 관리하는 핵심 로직 |
class Program
{
static void Main(string[] args)
{
Game game = new Game();
while (true)
{
game.Process();
}
}
}
static void Main(string[] args)Game game = new Game()Game 클래스의 인스턴스를 생성.while (true)game.Process() 호출.public enum GameMode
{
None,
Lobby,
Town,
Field
}
GameMode 열거형(Enum) 정의.Lobby: 직업 선택하는 화면.Town: 마을 화면 (필드 이동 선택 가능).Field: (현재는 미구현 상태)class Game
{
private GameMode mode = GameMode.Lobby;
private Player player = null;
private Monster monster = null;
private Random rand = new Random();
mode: 현재 게임 상태 저장. 기본값은 Lobby로 설정.player: 현재 플레이어 캐릭터 저장. 초기값은 null.monster: 필드 전투용 몬스터 저장 (현재는 사용 안 함).rand: 랜덤 숫자 생성기 (추후 전투에서 활용 예상).public void Process()
{
switch (mode)
{
case GameMode.Lobby:
ProcessLobby();
break;
case GameMode.Town:
ProcessTown();
break;
case GameMode.Field:
break;
}
}
Process: 현재 게임 상태(mode)에 따라 적절한 처리 수행.Lobby, Town, Field 각각 별도의 메서드로 분리.private void ProcessLobby()
{
Console.WriteLine("직업을 선택하세요");
Console.WriteLine("[1] 기사");
Console.WriteLine("[2] 궁수");
Console.WriteLine("[3] 법사");
string input = Console.ReadLine();
switch (input)
{
case "1":
player = new Knight();
mode = GameMode.Town;
break;
case "2":
player = new Archer();
mode = GameMode.Town;
break;
case "3":
player = new Mage();
mode = GameMode.Town;
break;
}
}
ProcessLobby: 직업 선택 화면 처리.Console.WriteLine: 텍스트 출력.Console.ReadLine: 사용자 입력 대기.player 객체 생성.mode를 Town으로 변경.Knight, Archer, Mage 클래스는 별도로 정의되어 있어야 함 (현재 제공 코드에는 없음).private void ProcessTown()
{
Console.WriteLine("마을에 입장 했습니다.");
Console.WriteLine("[1] 필드로 간다.");
Console.WriteLine("[2] 로비로 돌아가기.");
string input = Console.ReadLine();
switch (input)
{
case "1":
mode = GameMode.Field;
break;
case "2":
mode = GameMode.Lobby;
break;
}
}
ProcessTown: 마을 화면 처리.mode 변경.시작 → 로비 (직업 선택) → 마을
↑ ↓
로비로 복귀 → 필드 (미구현)