개발일지

[C#문법종합반] 2주차 과제 - 틱택토 (feat.Console명령어)

Hwone 2023. 8. 15. 10:24
 //2-6 틱택토
        static void DrawBoard() //보드판 그림
        {
            Console.WriteLine($"     |     |     ");
            Console.WriteLine($"  {boardNum[0]}  |  {boardNum[1]}  |  {boardNum[2]}   ");
            Console.WriteLine($"     |     |     ");
            Console.WriteLine($"-----+-----+-----");
            Console.WriteLine($"     |     |     ");
            Console.WriteLine($"  {boardNum[3]}  |  {boardNum[4]}  |  {boardNum[5]}   ");
            Console.WriteLine($"     |     |     ");
            Console.WriteLine($"-----+-----+-----");
            Console.WriteLine($"     |     |     ");
            Console.WriteLine($"  {boardNum[6]}  |  {boardNum[7]}  |  {boardNum[8]}   ");
            Console.WriteLine($"     |     |     ");
        }

        static bool CheckWin(char symbol) // 이기는 조건
        {
            return (boardNum[0] == symbol && boardNum[1] == symbol && boardNum[2] == symbol) ||
                   (boardNum[3] == symbol && boardNum[4] == symbol && boardNum[5] == symbol) ||
                   (boardNum[6] == symbol && boardNum[7] == symbol && boardNum[8] == symbol) ||
                   (boardNum[0] == symbol && boardNum[3] == symbol && boardNum[1] == symbol) ||
                   (boardNum[1] == symbol && boardNum[4] == symbol && boardNum[7] == symbol) ||
                   (boardNum[2] == symbol && boardNum[5] == symbol && boardNum[8] == symbol) ||
                   (boardNum[0] == symbol && boardNum[4] == symbol && boardNum[8] == symbol) ||
                   (boardNum[2] == symbol && boardNum[4] == symbol && boardNum[6] == symbol);
        }

        static bool isBoardFull() // 보드판이 차있는지 확인
        {
            foreach (char board in boardNum)
            {
                if (board != 'X' && board != 'O')
                {
                    return false;
                }
            }
            return true;
        }

        static char[] boardNum = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };//보드판 숫자
        static int playerTurn = 1;//플레이어 1부터 시작
        static void Main(string[] args)
        {
            bool gameWon; // 게임 이겼는지 확인

            do
            {
            //메인 화면 
                Console.Clear();
                Console.WriteLine("플레이어 1: X 와 플레이어 2: O");
                Console.WriteLine();
                Console.WriteLine($"플레이어 {playerTurn}의 차례");
                Console.WriteLine();
                DrawBoard();

                int choice; //보드판 숫자를 입력받을 변수
                bool bValid; //올바른 입력인지 확인할 변수

                do
                {
                //입력 확인 
                    Console.Write("입력: ");
                    bValid = int.TryParse(Console.ReadLine(), out choice);

                    if (bValid == false || choice < 0 || choice > 9 || boardNum[choice - 1] == 'X' || boardNum[choice - 1] == 'O')
                    {
                        Console.WriteLine("잘못된 입력입니다.");
                        bValid = false;
                    }
                }
                while (!bValid);
                
				//보드판에 모양 입력
                char symbole = playerTurn == 1 ? 'X' : 'O';
                boardNum[choice - 1] = symbole;
				
                //이겼는지 확인
                gameWon = CheckWin(symbole);
				
                if (gameWon)
                {
                    Console.Clear();
                    Console.WriteLine("플레이어 1: X 와 플레이어 2: O");
                    Console.WriteLine();
                    DrawBoard();
                    Console.WriteLine();
                    Console.WriteLine($"플레이어 {playerTurn}이 이겼습니다!");
                }
                else if (isBoardFull()) //무승부
                {
                    Console.Clear();
                    Console.WriteLine("플레이어 1: X 와 플레이어 2: O");
                    Console.WriteLine();
                    DrawBoard();
                    Console.WriteLine();
                    Console.WriteLine("무승부 !");
                    break;
                }

                playerTurn = playerTurn == 1 ? 2 : 1; //플레이어 교체 
            }
            while (!gameWon);

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey(); // 아무키나 누르면 종료 
        }

 

Console.Clear() : 화면 지우기 

Console.ReadKey() : 사용자가 어떤 키를 누를 때 까지 기다림 

Console.SetCursorPosition(left,top) : 커서의 위치를 지정한 좌표로 이동, 출력 위치를 제어할 때 사용 

Console.Title = "제목"; : 콘솔 차으이 제목을 지정한 문자열로 설정 

Console.ForegroundColor = ConsoleColor.ColorName ; : 콘솔에서 출력되는 텍스트의 색상을 변경 

'ColorName에는 원하는 색상을 사용한다 ex) ConsoleColor.Red 등