Esempio n. 1
0
 private SpaceHolder[] CopyBoard(SpaceHolder[] board)
 {
     SpaceHolder[] boardCopy = new SpaceHolder[9];
     for (int i = 0; i < 9; i++)
     {
         boardCopy[i] = board[i];
     }
     return(boardCopy);
 }
Esempio n. 2
0
 private bool IsWin(SpaceHolder[] board, SpaceHolder mark)
 {
     return((board[0] == mark && board[1] == mark && board[2] == mark) ||
            (board[3] == mark && board[4] == mark && board[5] == mark) ||
            (board[6] == mark && board[7] == mark && board[8] == mark) ||
            (board[0] == mark && board[3] == mark && board[6] == mark) ||
            (board[1] == mark && board[4] == mark && board[7] == mark) ||
            (board[2] == mark && board[5] == mark && board[8] == mark) ||
            (board[0] == mark && board[4] == mark && board[8] == mark) ||
            (board[2] == mark && board[4] == mark && board[6] == mark));
 }
Esempio n. 3
0
        private int AiLogic(List <int> movableSpace)
        {
            SpaceHolder[] boardCopy = new SpaceHolder[9];

            // 이길 수 있는 곳이 있다면 거기에 둡니다.
            foreach (int i in movableSpace)
            {
                boardCopy    = CopyBoard(board);
                boardCopy[i] = SpaceHolder.X;
                if (IsWin(boardCopy, SpaceHolder.X))
                {
                    return(i);
                }
            }

            // 상대방이 다음에 이길 수 있는 곳이 있다면 거기에 두어서 막습니다.
            foreach (int i in movableSpace)
            {
                boardCopy    = CopyBoard(board);
                boardCopy[i] = SpaceHolder.O;
                if (IsWin(boardCopy, SpaceHolder.O))
                {
                    return(i);
                }
            }

            // 우선순위에 따라서 둡니다. 중앙 -> 변 -> 코너
            if (board[4] == SpaceHolder.None)
            {
                return(4);
            }

            int[] sides = new int[] { 1, 3, 5, 7 };
            foreach (int i in sides)
            {
                if (board[i] == SpaceHolder.None)
                {
                    return(i);
                }
            }

            int[] corners = new int[] { 0, 2, 6, 8 };
            foreach (int i in corners)
            {
                if (board[i] == SpaceHolder.None)
                {
                    return(i);
                }
            }

            // 그 외의 경우는 없습니다.
            throw new ArgumentException("예상치못한 경로에 들어갔습니다.");
        }