C#

C# - 틱택토 게임

Dev_Jen 2025. 7. 7. 15:10
반응형
using System;

class Program
{
    static char[] board = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
    static int turn = 1; // 홀수: X, 짝수: O
    static bool gameEnded = false;

    static void Main(string[] args)
    {
        while (!gameEnded)
        {
            Console.Clear();
            DisplayBoard();
            PlayerTurn();
            CheckWin();
        }

        Console.WriteLine("게임이 종료되었습니다.");
    }

    static void DisplayBoard()
    {
        Console.WriteLine("\n틱택토 게임");
        Console.WriteLine("현재 보드 상태:");
        Console.WriteLine();
        Console.WriteLine($" {board[0]} | {board[1]} | {board[2]} ");
        Console.WriteLine("---|---|---");
        Console.WriteLine($" {board[3]} | {board[4]} | {board[5]} ");
        Console.WriteLine("---|---|---");
        Console.WriteLine($" {board[6]} | {board[7]} | {board[8]} ");
        Console.WriteLine();
    }

    static void PlayerTurn()
    {
        char player = (turn % 2 == 1) ? 'X' : 'O';
        Console.WriteLine($"{player}의 차례입니다. 위치(1~9)를 입력하세요:");

        int choice;
        bool validInput = int.TryParse(Console.ReadLine(), out choice);

        if (!validInput || choice < 1 || choice > 9 || board[choice - 1] == 'X' || board[choice - 1] == 'O')
        {
            Console.WriteLine("잘못된 입력입니다. 엔터를 눌러 다시 시도하세요.");
            Console.ReadLine();
            return;
        }

        board[choice - 1] = player;
        turn++;
    }

    static void CheckWin()
    {
        int[,] winConditions = new int[,]
        {
            { 0,1,2 }, { 3,4,5 }, { 6,7,8 }, // 가로
            { 0,3,6 }, { 1,4,7 }, { 2,5,8 }, // 세로
            { 0,4,8 }, { 2,4,6 }             // 대각선
        };

        for (int i = 0; i < 8; i++)
        {
            int a = winConditions[i, 0];
            int b = winConditions[i, 1];
            int c = winConditions[i, 2];

            if (board[a] == board[b] && board[b] == board[c])
            {
                Console.Clear();
                DisplayBoard();
                Console.WriteLine($"{board[a]} 승리!");
                gameEnded = true;
                return;
            }
        }

        if (turn > 9)
        {
            Console.Clear();
            DisplayBoard();
            Console.WriteLine("무승부입니다!");
            gameEnded = true;
        }
    }
}

 

 

🎯 만들면서 느낀 점

틱택토 게임을 직접 만들어보면서, 단순한 기능 구현 자체보다 게임의 구조를 어떻게 설계하고 구현해 나갈지 고민하는 과정이 가장 중요하다는 것을 느꼈다.
처음엔 간단하게 생각했지만, 실제로 구현하려고 하다 보니 전체 흐름을 미리 계획하고, 어떤 순서로 기능을 쌓아갈지 구조적인 틀을 잡는 일이 결코 만만하지 않았다.

그 과정을 통해 계획의 중요성, 그리고 작은 기능부터 차근차근 쌓아가는 개발의 기본 원칙을 다시금 체감할 수 있었다.

또한, 이번 구현 과정에서 TryParse라는 메서드를 처음 접했는데, 사용자 입력을 안전하게 숫자로 변환할 수 있어 매우 유용하다는 점을 배웠다.

반응형