전체 코드

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 게임의 전체 흐름은 아래와 같습니다.

  1. 로비에서 직업 선택
  2. 마을 입장
  3. 마을에서 필드 이동 또는 로비 복귀 선택
  4. 향후 필드 전투 추가 가능 (현재는 미구현)

📂 전체 프로젝트 구조

파일명설명
Program.cs게임 전체 실행을 담당하는 메인 진입점
Game.cs게임 상태와 흐름을 관리하는 핵심 로직

📜 Program.cs 분석

class Program
{
    static void Main(string[] args)
    {
        Game game = new Game();

        while (true)
        {
            game.Process();
        }
    }
}

✔️ 설명

1️⃣ static void Main(string[] args)

  • C# 프로그램의 진입점(Entry Point).
  • 프로그램이 실행되면 가장 먼저 실행되는 메서드.

2️⃣ Game game = new Game()

  • Game 클래스의 인스턴스를 생성.
  • 게임 전체 흐름과 상태를 관리하는 역할.

3️⃣ while (true)

  • 게임이 끝나지 않는 한 무한 루프.
  • 매 프레임마다 game.Process() 호출.

📜 Game.cs 분석

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 각각 별도의 메서드로 분리.

🔷 ProcessLobby (로비 처리)

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 객체 생성.
  • 직업 선택 후, modeTown으로 변경.

⚠️ 보완 설명

  • Knight, Archer, Mage 클래스는 별도로 정의되어 있어야 함 (현재 제공 코드에는 없음).
  • 잘못된 입력 처리 부재 (보완 필요).

🔷 ProcessTown (마을 처리)

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 변경.

⚠️ 보완 설명

  • 잘못된 입력 처리 부재 (보완 필요).
  • 필드 전투 관련 기능이 아직 없음 (추후 확장 필요).

📜 정리 - 전체 흐름도

시작 → 로비 (직업 선택) → 마을
          ↑                        ↓
        로비로 복귀     → 필드 (미구현)

profile
李家네_공부방

0개의 댓글