2023/11/09

안석환·2023년 11월 9일
0

1. 오늘의 코딩

오늘은 틱텍토+를 만들었다.

추가된 기능

맵의 크기설정: 크기를 플레이어가 설정하고 설정한 값만큼 연결해야 승리
플레이어 턴 표시: 누가 할 차롄지 명시해준다

2. 오류

해결한 것

플레이어가 설정한 크기의 맵 설정
크기마다 달라지는 승리조건
승리자 확인
기본 틱텍토 구성

해결못한 오류

게임의 크기가 커지면 커질수록 불가능에 가까워지는 승리
: 5칸 이상이 넘어가면 승리조건 5연결로 제한

대각선 승리코드가 최대 맵의 칸 숫자를 넘어가면 오류
: 승리조건 최댓값 설정?(아직 구상중)

100자리수가 넘어가면 맵크기
: 플레이어 맵 크기 선언 조건 추가(100을 못넘기게)

3. 후기

이를 통해 이때까지 못했던 코드의 기본구성과 2주차 까지의 복습을 한 것 같다.
하지만 실력이 부족해서 줄일 수 있는 코드를 못 줄인 것 같고 너무 욕심 부린 탓에 시간을 너무 허비했던 것 같다.
다음부턴 욕심 안 부리고 적당히 할 일을 계획해야겠다.

밑의 코드를 보고 틱텍토 주제에 너무 방대하다는 생각을 하면서 내 실력을 실감했다.

코드

namespace stu;

class Program
{

static void Main(string[] args)
{
    Console.Clear();
    Console.WriteLine("plaase enter the size you want: ");
    string? playerBoardSize = Console.ReadLine();

    int board = int.Parse(playerBoardSize);
    int totalBoard = board * board;
    int playerTurn = 1;
    int playerChoice = 0;
    int win = 0;
    string player1Mark = "O";
    string player2Mark = "X";
    string[] boardNum = new string[totalBoard];

    void boardUpdate()
    {
        Console.WriteLine("1P: O" + "\n" + "2P: X");
        for (int j = 0; j < board; j++)
        {

            for (int i = 0; i < board; i++)
            {
                Console.Write("    ㄱ");
            }
            Console.WriteLine();

            for (int i = 0; i < board; i++)
            {

                if ((j * board) + i < 10)
                {
                    Console.Write("  {0}  " + " ", boardNum[(j * board) + i]);
                }

                else
                {
                    Console.Write("  {0}  ", boardNum[(j * board) + i]);
                }

            }
            Console.WriteLine();

            for (int i = 0; i < board; i++)
            {
                Console.Write("ㄴ    ");
            }
            Console.WriteLine();
        }
    }

    for (int i = 0; i < boardNum.Length; i++)
    {
        boardNum[i] = i.ToString();
    }

    Console.Clear();
    boardUpdate();

    for (int i = 1; i < 4; i++)
    {
        Console.Write(i + "player turn: ");
        string playerSay = Console.ReadLine();
        bool Num = int.TryParse(playerSay, out playerChoice);

        if (i == 0)
        {
            Console.Clear();
        }

        if (playerTurn % 2 == 0 && i == 2)
        {
            if (Num == true && playerChoice < totalBoard && 0 <= playerChoice)
            {
                if (boardNum[playerChoice] != player1Mark && boardNum[playerChoice] != player2Mark)
                {
                    boardNum[playerChoice] = player2Mark;
                    playerTurn = 1;
                    i -= 2;
                    Console.Clear();
                    boardUpdate();
                    allCheck();
                    
                    
                }
                else
                {
                    Console.Clear();
                    boardUpdate();
                    Console.WriteLine("please select an empty space!");
                    i -= 1;
                }
            }
            else
            {
                Console.Clear();
                boardUpdate();
                Console.WriteLine("Please enter the specified number!");
                i -= 1;
            }
            
        }

        else if (playerTurn % 2 == 1 && i == 1)
        {
            if(Num == true && 0 <= playerChoice && playerChoice < totalBoard)
            {
                if (boardNum[playerChoice] != player1Mark && boardNum[playerChoice] != player2Mark)
                {
                    boardNum[playerChoice] = player1Mark;
                    playerTurn = 2;
                    Console.Clear();
                    boardUpdate();
                    allCheck();
                }
                else
                {
                    Console.Clear();
                    boardUpdate();
                    Console.WriteLine("please select an empty space!");
                    i -= 1;
                }
            }
            else
            {
                Console.Clear();
                boardUpdate();
                Console.WriteLine("Please enter the specified number!");
                i -= 1;
            }
        }
    }

    //이김 검증


    void checkW()
    {
        for (int i = 0; i < board; i++)
        {
            for (int j = 0; j < board-1; j++)
            {
                if (boardNum[(i * board) + j] == boardNum[(i * board) + (j + 1)] && boardNum[(i * board) + j] == player1Mark)
                {
                    win += 1;
                    if (win == board - 1)
                    {
                        player1Win();
                    }
                }
                else if (boardNum[(i * board) + j] == boardNum[(i * board) + (j + 1)] && boardNum[(i * board) + j] == player2Mark)
                {
                    win += 1;
                    if (win == board - 1)
                    {
                        player2Win();
                    }
                }
                else
                {
                    win = 0;
                    break;
                }
            }
        }
    }

    void checkL()
    {
        for (int i = 0; i < board; i++)
        {
            for (int j = 0; j < board - 1; j++)
            {
                if (boardNum[i + (j * board)] == boardNum[i + ((j + 1) * board)] && boardNum[i + (j * board)] == player1Mark)
                {
                    win += 1;
                    if (win == board - 1)
                    {
                        player1Win();
                    }
                }
                else if (boardNum[i + (j * board)] == boardNum[i + ((j + 1) * board)] && boardNum[i + (j * board)] == player2Mark)
                {
                    win += 1;
                    if (win == board - 1)
                    {
                        player2Win();
                    }
                }
                else
                {
                    win = 0;
                    break;
                }
            }
        }
    }

    void checkD()
    {
        for (int i = 0; i < board; i++)
        {
            for (int j = 0; j < board - 1; j++)
            {

                    if (boardNum[i + (j * (board + 1))] == boardNum[i + ((j + 1) * (board + 1))] && boardNum[i + (j * (board + 1))] == player1Mark)
                {
                    win += 1;
                    if (win == board - 1)
                    {
                        player1Win();
                    }
                }
                else if (boardNum[i + (j * (board + 1))] == boardNum[i + ((j + 1) * (board + 1))] && boardNum[i + (j * (board + 1))] == player2Mark)
                {
                    win += 1;
                    if (win == board - 1)
                    {
                        player2Win();
                    }
                }
                else
                {
                    win = 0;
                    break;
                }
            }
        }
    }

    void checkRD()
    {
        for (int i = 0; i < board; i++)
        {
            for (int j = 0; j < board - 1; j++)
            {
                if (boardNum[i + (j * (board-1))] == boardNum[i + ((j + 1) * (board - 1))] && boardNum[i + (j * (board - 1))] == player1Mark)
                {
                    win += 1;
                    if (win == board - 1)
                    {
                        player1Win();
                    }
                }
                else if (boardNum[i + (j * (board - 1))] == boardNum[i + ((j + 1) * (board - 1))] && boardNum[i + (j * (board - 1))] == player2Mark)
                {
                    win += 1;
                    if (win == board - 1)
                    {
                        player2Win();
                    }
                }
                else
                {
                    win = 0;
                    break;
                }
            }
        }
    }

    void allCheck()
    {
        checkL();
        checkW();
        checkD();
        checkRD();
    }

    void player1Win()
    {
        Console.Clear();
        Console.WriteLine("player1 win!!");
    }

    void player2Win()
    {
        Console.Clear();
        Console.WriteLine("player2 win!!");
    }
}

}

profile
안석환!

0개의 댓글