공부/C#

[C#] 콘솔창 글씨/배경 색 바꾸기, 실제 색상표, 출력 글자 수 빈칸으로 맞추기와 이것들을 활용한 콘솔 게임 예제

굴러다니다니 2023. 3. 16. 11:11
728x90

콘솔창 배경색, 글자색 바꾸기

Console.ForegroundColor = ConsoleColor.(색상명)

을 해주면 이후에 출력되는 모든 글자가 해당 색상으로 글씨색이 바뀐다.

 

Console.BackgroundColor = ConsoleColor.(색상명)

을 해주면 글씨가 써있는 만큼의 배경 색이 색상으로 바뀐다.

글씨색과 배경색 둘 다 원래대로 바꿔주지 않으면 코드를 쓴 이후 모든 글씨에 적용되어 나온다.

이런식으로

따라서 원래대로 돌려주고 싶다면

Console.ResetColor();

를 써주면 배경, 글씨 색 전부 원래대로 돌아온다.

 

(색상명)은 공식 문서에 나온 대로

Black, Blue, Cyan, DarkBlue, DarkCyan, DarkGray, DarkGreen, DarkMagenta, DarkRed, DarkYellow, Gray, Green, Magenta, Red, White, Yelllow 가 가능하며 실제로 보면 다음과 같다.

원하는 색으로 배경색과 글자색을 골라 쓰자. (배경은 생각보다 안이뻐서 글자색을 애용)

Black
Blue
Cyan
DarkBlue
DarkCyan
DarkGray
DarkGreen
DarkMagenta
DarkRed
DarkYellow
Gray
Green
Magenta
Red
White
Yellow

 

https://learn.microsoft.com/ko-kr/dotnet/api/system.consolecolor?view=net-7.0

 

ConsoleColor 열거형 (System)

콘솔의 전경색과 배경색을 정의하는 상수를 지정합니다.

learn.microsoft.com

 

+ 추가로 출력되는 글씨의 자릿수를 맞추고 싶다면

Console.Write({0}, variable);

위의 {0}부분에 {0,3} 식으로 쓴다면 세칸으로 맞춰준다. (빈칸으로 맞춤)

빈 부분에 1을 받았는데    1 이 아니라 001 이런식으로 0으로 채우고 싶다면 {0:D3} 로 바꿔주면 가능하다.

Console.Write({0:D3}, money); 

 


위의 내용들을 활용해 아주 간단한 콘솔 게임을 만들어보자.

4가지 캐릭터중 선택해 스탯을 받게했다.

-> 3자리수로 제한을 둔 뒤 스탯을 띄울때 {0:3} 을 사용해 보기좋게 자리수와 네모칸을 맞춰주었다.

현재 소지금 부분도 5자리수로 고정하고 싶어 {0:D5}를 활용하였으며, 입력한 공격력에 따라 3가지 결과가 나온다.

결론적으로 슬라임의 방어력을 뚫고 죽였다면 베팅한 돈의 3배를 받고, 아니라면 돈을 잃는다.

네모 창에는 cyan, 직업에는 dark blue, 돈 관련은 darkyellow, 슬라임은 green을 넣어 가독성을 좋게 만들었다.

냅다 실패한 경우

 

공격 성공

 

 

        static void Main(string[] args)
        {
            int character;
            int hp;
            int mp;
            int atk;
            int def;
            int money = 10000;
            int bet;
            int slimeHp = 200;
            int slimeDef = 500;
            string type;

            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("================================================");
            Console.WriteLine("||            캐릭터를 선택해주세요           ||");
            Console.Write("||    ");
            Console.ForegroundColor = ConsoleColor.DarkCyan;
            Console.Write("1. 용사  2. 법사  3. 도적  4. 성직자");
            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("    ||");
            Console.WriteLine("================================================\n");
            Console.ResetColor();
            Console.Write("              캐릭터 선택: ");
            character = int.Parse(Console.ReadLine());

            if (character == 1)
            {
                Console.Write("\n------------<");
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                Console.Write("용사");
                Console.ResetColor();
                Console.WriteLine("를 선택하셨습니다>-------------");
                Console.Write("-----<");
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                Console.Write("용사");
                Console.ResetColor();
                Console.WriteLine("의 스탯을 999이내로 입력해주세요>-----\n");
                type = "용사";
            }
            else if (character == 2)
            {
                Console.Write("\n------------<");
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                Console.Write("법사");
                Console.ResetColor();
                Console.WriteLine("를 선택하셨습니다>-------------");
                Console.Write("-----<");
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                Console.Write("법사");
                Console.ResetColor();
                Console.WriteLine("의 스탯을 999이내로 입력해주세요>-----\n");
                type = "법사";
            }
            else if (character == 3)
            {
                Console.Write("\n------------<");
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                Console.Write("도적");
                Console.ResetColor();
                Console.WriteLine("을 선택하셨습니다>-------------");
                Console.Write("-----<");
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                Console.Write("도적");
                Console.ResetColor();
                Console.WriteLine("의 스탯을 999이내로 입력해주세요>-----\n");
                type = "도적";
            }
            else if (character == 4)
            {
                Console.Write("\n-----------<");
                Console.Write("성직자");
                Console.WriteLine("를 선택하셨습니다>------------");
                Console.Write("----<");
                Console.Write("성직자");
                Console.WriteLine("의 스탯을 999이내로 입력해주세요>----\n");
                type = "성직자";
            }
            else
            {
                Console.WriteLine("        <잘못된 입력입니다>");
                type = "오류";
            }
            Console.Write("          HP를 입력해주세요:        ");
            hp = int.Parse(Console.ReadLine());
            Console.Write("          MP를 입력해주세요:        ");
            mp = int.Parse(Console.ReadLine());
            Console.Write("         ATK를 입력해주세요:        ");
            atk = int.Parse(Console.ReadLine());
            Console.Write("         DEF를 입력해주세요:        ");
            def = int.Parse(Console.ReadLine());
            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("\n================================================");
            if (character == 1)
            {
                Console.Write("||                ");
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                Console.Write("용사");
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.WriteLine("의 스탯                 ||");
            }
            else if (character == 2)
            {
                Console.Write("||                ");
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                Console.Write("법사");
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.WriteLine("의 스탯                 ||");
            }
            else if (character == 3)
            {
                Console.Write("||                ");
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                Console.Write("도적");
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.WriteLine("의 스탯                 ||");
            }
            else if (character == 4)
            {
                Console.Write("||               ");
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                Console.Write("성직자");
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.WriteLine("의 스탯                ||");
            }
            Console.WriteLine("||         HP:   {0:D3}                          ||", hp);
            Console.WriteLine("||         MP:   {0:D3}                          ||", mp);
            Console.WriteLine("||        ATK:   {0:D3}                          ||", atk);
            Console.WriteLine("||        DEF:   {0:D3}                          ||", def);
            Console.Write("||     ");
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.Write("소지금:   10000G");
            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("                       ||");
            Console.WriteLine("================================================\n");
            Console.ResetColor();
            Console.WriteLine("---------<베팅하실 금액을 입력해주세요>---------\n");
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.Write("현재 소지금: 10000,      베팅하실 금액: ");
            bet = int.Parse(Console.ReadLine());
            Console.ResetColor();
            if (bet > 10000)
            {
                Console.WriteLine("\n---------------<금액이 부족합니다>--------------");
            }
            Console.WriteLine("\n$$$$$$$$$$$$$<베팅이 완료되었습니다>$$$$$$$$$$$$");
            money -= bet;
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.WriteLine("--------------<현재 소지금: {0:D5}G>-------------\n", money);
            Console.ResetColor();
            Console.WriteLine("================================================");

            Console.Write("플레이어가 야생의 ");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.Write("슬라임");
            Console.ResetColor();
            Console.WriteLine("을 만났습니다.");

            Console.Write("작고 순해보이지만 ");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.Write("슬라임");
            Console.ResetColor();
            Console.WriteLine("의 체력은 알 수 없습니다.");
            Console.ForegroundColor = ConsoleColor.DarkCyan;
            Console.Write(type);
            Console.ResetColor();
            Console.WriteLine("의 선제공격!");
            Console.WriteLine("------------------------------------------------");
            if (atk > slimeDef) //공격에 성공
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("슬라임");
                Console.ResetColor();
                Console.WriteLine("의 방어력보다 플레이어의 공격력이 강합니다.");
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("슬라임");
                Console.ResetColor();
                Console.WriteLine("의 방어력으로 {0}만큼의 데미지를 입었습니다.", atk - slimeDef);
                slimeHp -= (atk - slimeDef);
                if (slimeHp > 0) //공격은 성공했지만 죽이기에는 실패
                {
                    Console.WriteLine("------------------------------------------------");
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.Write("슬라임");
                    Console.ResetColor();
                    Console.Write("의 방어력 때문에 ");
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.Write("슬라임");
                    Console.ResetColor();
                    Console.WriteLine("은 온전합니다.");

                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.Write("슬라임");
                    Console.ResetColor();
                    Console.WriteLine("이 두려움에 떨며 도망갑니다.");

                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.Write("슬라임");
                    Console.ResetColor();
                    Console.WriteLine("마을에 당신의 괴담이 떠돌기 시작합니다.");

                    Console.Write("단번에 ");
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.Write("슬라임");
                    Console.ResetColor();
                    Console.WriteLine("을 죽이지 못해 베팅에 실패하셨습니다.");
                    Console.ForegroundColor = ConsoleColor.DarkYellow;
                    Console.WriteLine("당신의 남은 소지금은 {0}G입니다.", money);
                }
                else
                {
                    Console.WriteLine("------------------------------------------------");
                    Console.Write("의외로 단단했던 ");
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.Write("슬라임");
                    Console.ResetColor();
                    Console.WriteLine("의 방어력을 뚫었습니다.");
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.Write("슬라임");
                    Console.ResetColor();
                    Console.WriteLine("은 쓸쓸하게 죽어갑니다.");
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.Write("슬라임");
                    Console.ResetColor();
                    Console.WriteLine("은 당신을 기억할 것입니다...");
                    Console.ForegroundColor = ConsoleColor.DarkCyan;
                    Console.Write($"{type}");
                    Console.ResetColor();
                    Console.Write($"의 승리입니다. 베팅에 성공하셨습니다.\n");
                    money += bet * 3;
                    Console.ForegroundColor = ConsoleColor.DarkYellow;
                    Console.WriteLine("당신의 남은 소지금은 {0}G입니다.", money);
                }
            }
            else //공격에 실패
            {
                Console.Write("당신의 공격력이 ");
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("슬라임");
                Console.ResetColor();
                Console.WriteLine("의 방어력보다 약합니다.");

                Console.Write("의외로 단단한 ");
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("슬라임");
                Console.ResetColor();
                Console.WriteLine("이 당신을 향해 비웃습니다.");
                Console.WriteLine("당신은 마음에 상처를 입었습니다.");
                Console.Write("단번에 ");
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("슬라임");
                Console.ResetColor();
                Console.WriteLine("을 죽이지 못해 베팅에 실패하셨습니다.");
                Console.ForegroundColor = ConsoleColor.DarkYellow;
                Console.WriteLine("당신의 남은 소지금은 {0}G입니다.", money);
            }
            Console.ResetColor();
            Console.WriteLine("================================================\n");
        }


728x90