24.01.17 TIL - [C#] 숫자 맞추기, 틱택토

JJwoo·2024년 1월 17일
0

C#

목록 보기
12/20

2-5 숫자 맞추기

컴퓨터는 1에서 100까지의 숫자를 임의로 선택하고, 사용자는 이 숫자를 맞추어야 합니다. 사용자가 입력한 숫자가 컴퓨터의 숫자보다 크면 "너무 큽니다!"라고 알려주고, 작으면 "너무 작습니다!"라고 알려줍니다. 사용자가 숫자를 맞추면 게임이 종료됩니다.

using System;

class Program
{
    static void Main()
    {
        Random random = new Random();
        int numberToGuess = random.Next(1, 101);
        int numberOfTries = 0;
        bool isNumberGuessed = false;

        Console.WriteLine("숫자 맞추기 게임을 시작합니다. 1에서 100까지의 숫자 중 하나를 맞춰보세요.");

        while (!isNumberGuessed)
        {
            Console.Write("숫자를 입력하세요: ");
            string userInput = Console.ReadLine();

            int userGuess;
            if (int.TryParse(userInput, out userGuess))
            {
                numberOfTries++;

                if (userGuess > numberToGuess)
                {
                    Console.WriteLine("너무 큽니다!");
                }
                else if (userGuess < numberToGuess)
                {
                    Console.WriteLine("너무 작습니다!");
                }
                else
                {
                    Console.WriteLine("축하합니다! {0}번 만에 숫자를 맞추었습니다.", numberOfTries);
                    isNumberGuessed = true;
                }
            }
            else
            {
                Console.WriteLine("유효한 숫자가 아닙니다. 다시 시도해주세요.");
            }
        }
    }
}
  • Random 클래스를 사용하여 1에서 100까지의 임의의 숫자를 생성하고 numberToGuess 변수에 저장합니다. 이 숫자가 사용자가 맞춰야 할 숫자입니다.

  • numberOfTries 변수를 초기화하여 사용자가 시도한 횟수를 추적하고, isNumberGuessed 불리언 변수를 초기화하여 사용자가 숫자를 맞추었는지 추적합니다.

  • while 루프 내에서 사용자로부터 숫자를 입력하도록 프롬프트를 제공합니다.

  • int.TryParse를 사용하여 사용자 입력이 정수로 파싱될 수 있는지 확인합니다. 파싱이 가능하면 numberOfTries 카운터를 증가시킵니다.

  • 사용자의 추측 숫자가 랜덤 숫자보다 크면 "너무 큽니다!"를 출력하고, 작으면 "너무 작습니다!"를 출력합니다.

  • 사용자의 추측 숫자가 랜덤 숫자와 같으면 축하 메시지를 표시하고 몇 번의 시도 끝에 숫자를 맞추었음을 알리고, isNumberGuessed를 true로 설정하여 while 루프를 종료합니다.

  • 사용자의 입력이 정수로 파싱되지 않는 경우 "유효한 숫자가 아닙니다. 다시 시도해주세요." 메시지를 출력합니다.

  • 사용자가 랜덤 숫자를 맞출 때까지 while 루프가 계속됩니다.


2-6 틱택토 (콘솔)

처음 봅니다..

namespace _2_6
{
    internal class Program
    {
        static char[] arr = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
        static int player = 1;
        static int choice;
        static int flag = 0;

        static void Main(string[] args)
        {
            do
            {
                Console.Clear();
                Console.WriteLine("플레이어 1: X 와 플레이어 2: O");
                Console.WriteLine("\n");

                if (player % 2 == 0)
                {
                    Console.WriteLine("플레이어 2의 차례");
                }
                else
                {
                    Console.WriteLine("플레이어 1의 차례");
                }

                Console.WriteLine("\n");
                Board();

                string line = Console.ReadLine();
                bool res = int.TryParse(line, out choice);

                if(res == true)
                {
                    if (arr[choice] != 'X' && arr[choice] != 'O')
                    {
                        if(player % 2 == 0)
                        {
                            arr[choice] = 'O';
                        }
                        else
                        {
                            arr[choice] = 'X';
                        }

                        player++;
                    }
                    else
                    {
                        Console.WriteLine("죄송합니다. {0} 행은 이미 {1}로 표시되어 있습니다.", choice, arr[choice]);
                        Console.ReadLine();
                    }
                }
                else
                {
                    Console.WriteLine("숫자를 입려해주세요.");
                }

                flag = CheckWin();
            }
            while (flag != -1 && flag != 1);

            if(flag == 1)
            {
                Console.WriteLine("플레이어 {0}이(가) 이겼습니다.", (player % 2) + 1);
            }
            else
            {
                Console.WriteLine("무승부");
            }

            Console.ReadLine();
        }

        static void Board()
        {
            Console.WriteLine("     |     |     ");
            Console.WriteLine("  {0}  |  {1}  |  {2}  ", arr[1], arr[2], arr[3]);
            Console.WriteLine("_____|_____|_____");
            Console.WriteLine("     |     |     ");
            Console.WriteLine("  {0}  |  {1}  |  {2}  ", arr[4], arr[5], arr[6]);
            Console.WriteLine("_____|_____|_____");
            Console.WriteLine("     |     |     ");
            Console.WriteLine("  {0}  |  {1}  |  {2}  ", arr[7], arr[8], arr[9]);
            Console.WriteLine("     |     |     ");
        }

        static int CheckWin()
        {
            // 가로 승리 조건
            if (arr[1] == arr[2] && arr[2] == arr[3])
            {
                return 1;
            }
            else if (arr[4] == arr[5] && arr[5] == arr[6])
            {
                return 1;
            }
            else if (arr[7] == arr[8] && arr[8] == arr[9])
            {
                return 1;
            }

            // 세로 승리 조건
            else if (arr[1] == arr[4] && arr[4] == arr[7])
            {
                return 1;
            }
            else if (arr[2] == arr[5] && arr[5] == arr[8])
            {
                return 1;
            }
            else if (arr[3] == arr[6] && arr[6] == arr[9])
            {
                return 1;
            }

            // 대각선 승리조건
            else if (arr[1] == arr[5] && arr[5] == arr[9])
            {
                return 1;
            }
            else if (arr[3] == arr[5] && arr[5] == arr[7])
            {
                return 1;
            }
            
            // 무승부
            else if (arr[1] != '1' && arr[2] != '2' && arr[3] != '3' && arr[4] != '4' && arr[5] != '5' && arr[6] != '6' &&
                arr[7] != '7' && arr[8] != '8' && arr[9] != '9')
            {
                return -1;
            }
            else { return 0; }
            
        }
    }
}

char 배열 arr는 게임 보드를 나타냅니다. 초기에 숫자 1부터 9까지의 문자가 저장되어 있습니다.

player 변수는 현재 플레이어를 나타내며 초기에 1로 설정됩니다. 플레이어 1은 'X'로, 플레이어 2는 'O'로 나타납니다.

choice 변수는 사용자가 선택한 보드의 위치를 나타내며, flag 변수는 게임 상태를 확인하기 위한 플래그입니다.

Main 메서드에서 do-while 루프를 사용하여 게임이 진행됩니다. 루프는 게임이 끝날 때까지 계속됩니다.

각 루프 반복에서 현재 플레이어가 누구인지를 출력하고 보드를 표시합니다. 사용자에게 숫자를 입력받고, 해당 위치에 'X' 또는 'O'를 표시하며 플레이어를 전환합니다.

CheckWin 메서드는 현재 게임 상태를 확인합니다. 가로, 세로 및 대각선 방향으로 'X' 또는 'O'가 3개 연속으로 나타나면 해당 플레이어가 승리합니다. 모든 칸이 채워져 있으면 무승부로 처리됩니다.

do-while 루프는 flag 값이 -1 또는 1이 될 때까지 계속됩니다. -1은 무승부를 나타내며 1은 한 플레이어가 승리한 것을 나타냅니다.

게임이 종료되면 결과가 출력되고, 플레이어가 승리한 경우 해당 플레이어 번호가 표시됩니다. 무승부인 경우 "무승부"가 표시됩니다.


자주 사용하는 콘솔 명령어 정리

Console.WriteLine: 이 함수는 괄호 안의 내용을 콘솔에 출력합니다. 이는 텍스트나 변수를 출력하는 데 사용됩니다.
Console.WriteLine("Hello, world!");

Console.ReadLine: 이 함수는 사용자로부터 텍스트 입력을 받습니다. 이는 주로 사용자의 입력을 변수에 저장할 때 사용됩니다.
string userInput = Console.ReadLine();

Console.Clear: 이 함수는 콘솔 화면을 지웁니다. 이는 콘솔 화면을 초기화하고 싶을 때 사용됩니다.
Console.Clear();

Console.SetCursorPosition: 이 함수는 콘솔 창에서 커서의 위치를 설정합니다. 이는 출력의 정확한 위치를 제어하고 싶을 때 사용됩니다. 첫 번째 매개변수는 커서의 x 좌표 (왼쪽에서 오른쪽으로)이고, 두 번째 매개변수는 y 좌표 (위에서 아래로)입니다.
Console.SetCursorPosition(10, 5);
Console.Write("Hello, world!");

profile
개발 모코코

0개의 댓글