일일학습일지

2시간 넘게 제작한거라 지우기 아까워서 올리는 틱택토 C# 코드

김동환_ 2023. 12. 29. 19:04

using Systehttp://m.ComponentModel.Design;

namespace Study1
{
    internal class Program
    {
        static int[,] field = { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } };

        static int input = 0;
        static int turn = 1;
        static bool doWhile = true;

        static void ShowField() // 틱택토 필드를 보여주는 매서드
        {
            Console.WriteLine("================");
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    input = field[i, j];

                    if (input == 0)
                    {
                        Console.Write("□");
                    }
                    else if (input == 1)
                    {
                        Console.Write("0");
                    }
                    else
                    {
                        Console.Write("Ⅹ");
                    }
                }
                Console.WriteLine();
            }
            Console.WriteLine("================");
        }
        static void SetField(int fieldSet) // 틱택토 필드에 플레이어를 세팅하는 매서드
        {
            if (fieldSet > 0 && fieldSet < 10)
            {
                for (int i = 1; i < 10; i++)
                {
                    if (fieldSet == i)
                    {
                        if (field[(i - 1) / 3, (i - 1) % 3] != 0)
                        {
                            //이미 둔 곳은 둘 수 없도록 예외 처리
                            Console.WriteLine("이미 둔 곳입니다.");
                        }
                        else
                        {
                            if (turn == 2)
                                field[(i - 1) / 3, (i - 1) % 3] = 2;
                            else if (turn == 1)
                                field[(i - 1) / 3, (i - 1) % 3] = 1;

                            if (turn == 2)
                                turn--;
                            else if (turn == 1)
                                turn++;
                        }
                    }
                }
            }
            else
                Console.WriteLine("1부터 9까지의 숫자를 입력해주세요");
        }

        static void Main(string[] args)
        {
            do
            {
                //가로 승리 조건
                if (field[0, 0] == 1 && field[0, 0] == field[0, 1]
                    && field[0, 1] == field[0, 2])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player1의 승리!");
                    break;
                }
                else if (field[1, 0] == 1 && field[1, 0] == field[1, 1]
                    && field[1, 1] == field[1, 2])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player1의 승리!");
                    break;
                }
                else if (field[2, 0] == 1 && field[2, 0] == field[2, 1]
                    && field[2, 1] == field[2, 2])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player1의 승리!");
                    break;
                }
                else if (field[0, 0] == 2 && field[0, 0] == field[0, 1]
                    && field[0, 1] == field[0, 2])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player2의 승리!");
                    break;
                }
                else if (field[1, 0] == 2 && field[1, 0] == field[1, 1]
                    && field[1, 1] == field[1, 2])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player2의 승리!");
                    break;
                }
                else if (field[2, 0] == 2 && field[2, 0] == field[2, 1]
                    && field[2, 1] == field[2, 2])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player2의 승리!");
                    break;
                }

                //세로 승리 조건
                if (field[0, 0] == 1 && field[0, 0] == field[1, 0]
                    && field[1, 0] == field[2, 0])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player1의 승리!");
                    break;
                }
                else if (field[0, 1] == 1 && field[0, 1] == field[1, 1]
                    && field[1, 1] == field[2, 1])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player1의 승리!");
                    break;
                }
                else if (field[0, 2] == 1 && field[0, 2] == field[1, 2]
                    && field[1, 2] == field[2, 2])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player1의 승리!");
                    break;
                }
                else if (field[0, 0] == 2 && field[0, 0] == field[1, 0]
                    && field[1, 0] == field[2, 0])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player2의 승리!");
                    break;
                }
                else if (field[0, 1] == 2 && field[0, 1] == field[1, 1]
                    && field[1, 1] == field[2, 1])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player2의 승리!");
                    break;
                }
                else if (field[0, 2] == 2 && field[0, 2] == field[1, 2]
                    && field[1, 2] == field[2, 2])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player2의 승리!"); 
                    break;
                }

                //대각선 승리 조건
                if (field[0, 0] == 1 && field[0, 0] == field[1, 1]
                    && field[1, 1] == field[2, 2])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player1의 승리!");
                    break;
                }
                else if (field[0, 2] == 1 && field[0, 2] == field[1, 1]
                    && field[1, 1] == field[2, 0])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player1의 승리!");
                    break;
                }
                else if (field[0, 0] == 2 && field[0, 0] == field[1, 1]
                    && field[1, 1] == field[2, 2])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player2의 승리!");
                    break;
                }
                else if (field[0, 2] == 2 && field[0, 2] == field[1, 1]
                    && field[1, 1] == field[2, 0])
                {
                    Console.Clear();
                    ShowField();
                    Console.WriteLine("Player2의 승리!");
                    break;
                }


                // 각 플레이어 턴에 따라 게임 진행
                Console.Clear();
                ShowField();
                Console.WriteLine("Player" + turn + "의 차례!");

                Console.Write("몇번 자리를 차지하시겠습니까? : ");
                string inputField = Console.ReadLine();
                int fieldSet = int.Parse(inputField);


                // 필드 세팅
                if (turn == 1)
                {
                    SetField(fieldSet);
                }
                else if (turn == 2)
                {
                    SetField(fieldSet);
                }


                // 무승부 체킹
                int gameOverCheck = 0;
                for (int i = 0; i < 3; i++)
                {
                    for (int j = 0; j < 3; j++)
                    {
                        if (field[i, j] != 0)
                        {
                            gameOverCheck++;
                        }
                    }
                    if (gameOverCheck == 9)
                    {
                        Console.Clear();
                        ShowField();
                        Console.WriteLine("무승부 입니다.");
                        doWhile = false;
                    }
                }
            }
            while (doWhile);
        }
    }
}

'일일학습일지' 카테고리의 다른 글

2024-01-02 학습일지  (1) 2024.01.02
2023-12-29 학습일지  (0) 2023.12.29
2023-12-28 학습일지  (0) 2023.12.28
2023-12-27 학습일지  (1) 2023.12.27
2023-12-26 학습일지  (1) 2023.12.26