프로그래밍공부/C#기초

C# 프로그램 예제연습 - 텍스트게임만들기 - 05

Roslyn 2024. 1. 15. 10:43
반응형

우리는 기초연습때 콘솔로 이름을 입력 받는 것과 프로그램의 흐름을 함수로 나누는 것을 연습해 보았습니다.

아직 잊은 거 아니겠지요?  이제 그 내용을 복습해 보도록 하겠습니다.

 

프로그램의 진입점에서 함수를 호출해서 게임이 진행되게 할 겁니다.

먼저 Program 함수 내에 나 자신을 선언해 줘야 하므로, User 클래스를 player란 이름으로 선언해 줍니다.

 

static User player;

static void Main(string[] args)
{
    Init();
    player.Name = GetUserName();
    Hello(player.Name);
}

 

기존에 만들었던 함수와 동일한 구조로 작성하되, 달라진 부분은 User 라는 클래스를 player란 이름의 인스턴스로 만들어서 사용한다는 점만 달라졌습니다.

 

먼저 Init 함수를 만들어 볼까요?

여기서는 텍스트 게임이 시작되면 나올 텍스트와 함께 player란 인스턴스를 초기화 해줍니다.

 

static void Init()
{
    Console.WriteLine("=========================================================");
    Console.WriteLine(" 던전탐험에 오신 것을 환영합니다.");
    Console.WriteLine("=========================================================");
    Console.WriteLine("");
    Console.WriteLine("모험을 떠난 용사여, 그대가 도착한 이곳은 으슥하고 적막한 마을입니다.");
    Console.WriteLine("마을 사람들은 두려운 시선으로 당신을 바라보고 있습니다.");
    Console.WriteLine("그때 마을 이장이 다가와 당신에게 묻습니다.");
    Console.WriteLine("\"당신은 누구요?\"");

    player = new User();
}

 

Console.WriteLine 라는 함수를 실행시킬때, 출력될 텍스트 내용을 따옵표(")에 넣게 되는데, 그럼 따옴표 자체를 출력하고자 할려면 어떻게 해야할까요? 

바로 위에 예문 코드에 나온 것처럼 앞에 역슬래시(\)를 넣어줍니다.  통상 역슬래시는 엔터키 바로 위에 위치해 있으며, 때로는 역슬래시가 아닌 원화표시(₩) 비슷하게 표시되기도 합니다.

이건 일종에 프로그램상에 약속같은 걸로 해당 표시 뒤에 따옴표를 넣어주면 색상이 살짝 다르게 표시됩니다.

 

GetUserName 함수는 이전에 만들어 준것과 거의 동일하게 만들어줍니다.

사용자가 입력을 하지 않으면, 입력할 때까지 계속 반복해서 묻도록 말이죠.

 

static string GetUserName()
{
    string name;
    do
    {
        Console.WriteLine("이제 당신의 이름을 알려주세요.");
        name = Console.ReadLine();

        if (string.IsNullOrWhiteSpace(name))
        {
            Console.WriteLine("이름을 입력하세요.");
        }

    } while (string.IsNullOrWhiteSpace(name));

    return name;
}

 

그렇게해서 반환된 이름값을 player.Name 에 다가 넣어줍니다.

이렇게 인스턴스의 내부 요소에 접근하는 방법은 바로 인스턴스 이름 뒤에 점(.)하나를 찍고 해당 요소명을 적어주면 됩니다.

대입(=) 연산자를 이용해 player.Name 이란 필드에 GetUserName 함수에서 입력한 이름이 저장되게 됩니다.

다음은 인사를 건네는 Hello 함수에 저장된 player.Name 값을 파라미터로 전달하여 시작 멘트를 마무리 합니다.

 

전체 코드는 다음과 같습니다.

 

using ConsoleExample.Game01.Entities;

namespace ConsoleExample.Game01
{
    internal class Program
    {
        static User player;

        static void Main(string[] args)
        {
            
            Init();
            player.Name = GetUserName();
            Hello(player.Name);
        }

        static void Init()
        {
            Console.WriteLine("=========================================================");
            Console.WriteLine(" 던전탐험에 오신 것을 환영합니다.");
            Console.WriteLine("=========================================================");
            Console.WriteLine("");
            Console.WriteLine("모험을 떠난 용사여, 그대가 도착한 이곳은 으슥하고 적막한 마을입니다.");
            Console.WriteLine("마을 사람들은 두려운 시선으로 당신을 바라보고 있습니다.");
            Console.WriteLine("그때 마을 이장이 다가와 당신에게 묻습니다.");
            Console.WriteLine("\"당신은 누구요?\"");

            player = new User();
        }

        static string GetUserName()
        {
            string name;
            do
            {
                Console.WriteLine("이제 당신의 이름을 알려주세요.");
                name = Console.ReadLine();

                if (string.IsNullOrWhiteSpace(name))
                {
                    Console.WriteLine("이름을 입력하세요.");
                }

            } while (string.IsNullOrWhiteSpace(name));

            return name;
        }

        static void Hello(string name)
        {
            Console.WriteLine($"\"어서오시오, {name}...\"");
            Console.WriteLine("\"하지만 당신은 잘못 왔소.  이곳은 죽음의 저주가 내려진 곳이오.  어서 떠나시오.\"");
            Console.WriteLine("이장의 말을 들은 당신은 놀란 표정이 되어 그들에게 왜 그런지 물었습니다.");
            Console.WriteLine("자초지정을 들어보니 마을에 괴물들이 나타나고 있었습니다.");
            Console.WriteLine("괴물들을 물리치기로 결심한 당신은 괴물들의 근거지를 물었고, 그곳은 멀지 않은 곳에 있는 동굴이었습니다."); 
            Console.WriteLine("이제 당신은 동굴로 향합니다.");
        }
    }
}

 

이제 위에 실행버튼을 눌러 실행해 볼까요?

 

그림과 같이 우리는 이야기를 읽고, 이름으로 "홍길동"을 입력하여 마을 이장과 인사를 나누었습니다.

그리고 이제 모험이 시작되고 있네요?

 

다음 시간에는 이제 몹을 만나는 상황을 구현해 보도록 하겠습니다.

반응형