Ejemplo n.º 1
0
        /// <summary>
        /// The computer will look for winning moves and block it if there is one.
        /// Can only block one winning move seen. If there are two then the player can win.
        /// </summary>
        /// <returns></returns>
        private bool TryBlockWinningMove()
        {
            TicTacToeGame.TicTacToeToken opponentToken = FindOpponentToken();

            if (TryWinningMove(opponentToken))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        /// <summary>
        /// Highlights the winning move in yellow.
        /// </summary>
        private void DisplayWinningMove(TicTacToeGame.TicTacToeToken token)
        {
            for (int index = 0; index < ticTacToeGame.TicTacToeWinPositions.Length; index++)
            {
                int position = ticTacToeGame.TicTacToeWinPositions[index];
                switch (position)
                {
                case 0:
                    btnx0y0.Background = Brushes.Yellow;
                    break;

                case 1:
                    btnx1y0.Background = Brushes.Yellow;
                    break;

                case 2:
                    btnx2y0.Background = Brushes.Yellow;
                    break;

                case 3:
                    btnx0y1.Background = Brushes.Yellow;
                    break;

                case 4:
                    btnx1y1.Background = Brushes.Yellow;
                    break;

                case 5:
                    btnx2y1.Background = Brushes.Yellow;
                    break;

                case 6:
                    btnx0y2.Background = Brushes.Yellow;
                    break;

                case 7:
                    btnx1y2.Background = Brushes.Yellow;
                    break;

                case 8:
                    btnx2y2.Background = Brushes.Yellow;
                    break;

                default:
                    throw new InvalidOperationException("DisplayWinningMove method had an unexpected value.");
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Computer tries the spot which is adjacent to the player
        /// </summary>
        /// <returns>True if successful</returns>
        private bool TrySpotAdjacentToOpponent()
        {
            TicTacToeGame.TicTacToeToken opponentToken = FindOpponentToken();

            for (int boardPosition = 0; boardPosition < ComputerTicTacToeGame.TicTacToeBoard.Length; boardPosition++)
            {
                if (ComputerTicTacToeGame.TicTacToeBoard[boardPosition] == opponentToken)
                {
                    // Check to the right of the opponent
                    if (boardPosition != 8 && ComputerTicTacToeGame.TicTacToeBoard[boardPosition + 1] == TicTacToeGame.TicTacToeToken.Empty)
                    {
                        ComputerMainWindow.PlaceTicTacToeToken(boardPosition + 1);
                        return(true);
                    }

                    // Check the left of the opponent
                    if (boardPosition != 0 && ComputerTicTacToeGame.TicTacToeBoard[boardPosition - 1] == TicTacToeGame.TicTacToeToken.Empty)
                    {
                        ComputerMainWindow.PlaceTicTacToeToken(boardPosition - 1);
                        return(true);
                    }

                    // Check the below the opponent
                    if (boardPosition != 6 && boardPosition != 7 && boardPosition != 8 && ComputerTicTacToeGame.TicTacToeBoard[boardPosition + 3] == TicTacToeGame.TicTacToeToken.Empty)
                    {
                        ComputerMainWindow.PlaceTicTacToeToken(boardPosition + 3);
                        return(true);
                    }

                    // Check the above the opponent
                    if (boardPosition != 0 && boardPosition != 1 && boardPosition != 2 && ComputerTicTacToeGame.TicTacToeBoard[boardPosition - 3] == TicTacToeGame.TicTacToeToken.Empty)
                    {
                        ComputerMainWindow.PlaceTicTacToeToken(boardPosition - 3);
                        return(true);
                    }
                }
            }

            return(false);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// The default constructer needs the game that the computer plays on and the token that it plays
 /// </summary>
 /// <param name="ticTacToeGame"></param>
 /// <param name="ticTacToeToken"></param>
 public ComputerPlayer(TicTacToeGame ticTacToeGame, TicTacToeGame.TicTacToeToken ticTacToeToken, MainWindow mainWindow)
 {
     ComputerTicTacToeGame = ticTacToeGame;
     ComputerToken         = ticTacToeToken;
     ComputerMainWindow    = mainWindow;
 }
Ejemplo n.º 5
0
        /// <summary>
        /// The computer will either make a winning move or block on depending on the token passed
        /// Can only block one winning move seen. If there are two then the player can win.
        /// </summary>
        /// <returns></returns>
        private bool TryWinningMove(TicTacToeGame.TicTacToeToken token)
        {
            // Check top to bottom
            if (ComputerTicTacToeGame.TicTacToeBoard[0] == token && ComputerTicTacToeGame.TicTacToeBoard[3] == token && ComputerTicTacToeGame.TicTacToeBoard[6] == TicTacToeGame.TicTacToeToken.Empty)
            {
                ComputerMainWindow.PlaceTicTacToeToken(6);
                return(true);
            }
            else if (ComputerTicTacToeGame.TicTacToeBoard[1] == token && ComputerTicTacToeGame.TicTacToeBoard[4] == token && ComputerTicTacToeGame.TicTacToeBoard[7] == TicTacToeGame.TicTacToeToken.Empty)
            {
                ComputerMainWindow.PlaceTicTacToeToken(7);
                return(true);
            }
            else if (ComputerTicTacToeGame.TicTacToeBoard[2] == token && ComputerTicTacToeGame.TicTacToeBoard[5] == token && ComputerTicTacToeGame.TicTacToeBoard[8] == TicTacToeGame.TicTacToeToken.Empty)
            {
                ComputerMainWindow.PlaceTicTacToeToken(8);
                return(true);
            }

            // Check bottom to top
            if (ComputerTicTacToeGame.TicTacToeBoard[6] == token && ComputerTicTacToeGame.TicTacToeBoard[3] == token && ComputerTicTacToeGame.TicTacToeBoard[0] == TicTacToeGame.TicTacToeToken.Empty)
            {
                ComputerMainWindow.PlaceTicTacToeToken(0);
                return(true);
            }
            else if (ComputerTicTacToeGame.TicTacToeBoard[7] == token && ComputerTicTacToeGame.TicTacToeBoard[4] == token && ComputerTicTacToeGame.TicTacToeBoard[1] == TicTacToeGame.TicTacToeToken.Empty)
            {
                ComputerMainWindow.PlaceTicTacToeToken(1);
                return(true);
            }
            else if (ComputerTicTacToeGame.TicTacToeBoard[8] == token && ComputerTicTacToeGame.TicTacToeBoard[5] == token && ComputerTicTacToeGame.TicTacToeBoard[2] == TicTacToeGame.TicTacToeToken.Empty)
            {
                ComputerMainWindow.PlaceTicTacToeToken(2);
                return(true);
            }

            // Check right to left
            if (ComputerTicTacToeGame.TicTacToeBoard[0] == token && ComputerTicTacToeGame.TicTacToeBoard[1] == token && ComputerTicTacToeGame.TicTacToeBoard[2] == TicTacToeGame.TicTacToeToken.Empty)
            {
                ComputerMainWindow.PlaceTicTacToeToken(2);
                return(true);
            }
            else if (ComputerTicTacToeGame.TicTacToeBoard[3] == token && ComputerTicTacToeGame.TicTacToeBoard[4] == token && ComputerTicTacToeGame.TicTacToeBoard[5] == TicTacToeGame.TicTacToeToken.Empty)
            {
                ComputerMainWindow.PlaceTicTacToeToken(5);
                return(true);
            }
            else if (ComputerTicTacToeGame.TicTacToeBoard[6] == token && ComputerTicTacToeGame.TicTacToeBoard[7] == token && ComputerTicTacToeGame.TicTacToeBoard[8] == TicTacToeGame.TicTacToeToken.Empty)
            {
                ComputerMainWindow.PlaceTicTacToeToken(8);
                return(true);
            }

            // Check left to right
            if (ComputerTicTacToeGame.TicTacToeBoard[2] == token && ComputerTicTacToeGame.TicTacToeBoard[1] == token && ComputerTicTacToeGame.TicTacToeBoard[0] == TicTacToeGame.TicTacToeToken.Empty)
            {
                ComputerMainWindow.PlaceTicTacToeToken(0);
                return(true);
            }
            else if (ComputerTicTacToeGame.TicTacToeBoard[5] == token && ComputerTicTacToeGame.TicTacToeBoard[4] == token && ComputerTicTacToeGame.TicTacToeBoard[3] == TicTacToeGame.TicTacToeToken.Empty)
            {
                ComputerMainWindow.PlaceTicTacToeToken(3);
                return(true);
            }
            else if (ComputerTicTacToeGame.TicTacToeBoard[8] == token && ComputerTicTacToeGame.TicTacToeBoard[7] == token && ComputerTicTacToeGame.TicTacToeBoard[6] == TicTacToeGame.TicTacToeToken.Empty)
            {
                ComputerMainWindow.PlaceTicTacToeToken(6);
                return(true);
            }

            // Check diagonal starting from left
            if (ComputerTicTacToeGame.TicTacToeBoard[0] == token && ComputerTicTacToeGame.TicTacToeBoard[4] == token && ComputerTicTacToeGame.TicTacToeBoard[8] == TicTacToeGame.TicTacToeToken.Empty)
            {
                ComputerMainWindow.PlaceTicTacToeToken(8);
                return(true);
            }
            else if (ComputerTicTacToeGame.TicTacToeBoard[8] == token && ComputerTicTacToeGame.TicTacToeBoard[4] == token && ComputerTicTacToeGame.TicTacToeBoard[0] == TicTacToeGame.TicTacToeToken.Empty)             // from the opposite direction
            {
                ComputerMainWindow.PlaceTicTacToeToken(0);
                return(true);
            }
            else if (ComputerTicTacToeGame.TicTacToeBoard[8] == token && ComputerTicTacToeGame.TicTacToeBoard[0] == token && ComputerTicTacToeGame.TicTacToeBoard[4] == TicTacToeGame.TicTacToeToken.Empty)             // from the opposite direction
            {
                ComputerMainWindow.PlaceTicTacToeToken(4);
                return(true);
            }

            // Check diagonal starting from right
            if (ComputerTicTacToeGame.TicTacToeBoard[2] == token && ComputerTicTacToeGame.TicTacToeBoard[4] == token && ComputerTicTacToeGame.TicTacToeBoard[6] == TicTacToeGame.TicTacToeToken.Empty)
            {
                ComputerMainWindow.PlaceTicTacToeToken(6);
                return(true);
            }
            else if (ComputerTicTacToeGame.TicTacToeBoard[6] == token && ComputerTicTacToeGame.TicTacToeBoard[4] == token && ComputerTicTacToeGame.TicTacToeBoard[2] == TicTacToeGame.TicTacToeToken.Empty)             // from the opposite direction
            {
                ComputerMainWindow.PlaceTicTacToeToken(2);
                return(true);
            }
            else if (ComputerTicTacToeGame.TicTacToeBoard[6] == token && ComputerTicTacToeGame.TicTacToeBoard[2] == token && ComputerTicTacToeGame.TicTacToeBoard[4] == TicTacToeGame.TicTacToeToken.Empty)             // from the opposite direction
            {
                ComputerMainWindow.PlaceTicTacToeToken(4);
                return(true);
            }

            // Check the middle sides
            if (ComputerTicTacToeGame.TicTacToeBoard[0] == token && ComputerTicTacToeGame.TicTacToeBoard[6] == token && ComputerTicTacToeGame.TicTacToeBoard[3] == TicTacToeGame.TicTacToeToken.Empty)
            {
                ComputerMainWindow.PlaceTicTacToeToken(3);
                return(true);
            }
            else if (ComputerTicTacToeGame.TicTacToeBoard[0] == token && ComputerTicTacToeGame.TicTacToeBoard[2] == token && ComputerTicTacToeGame.TicTacToeBoard[1] == TicTacToeGame.TicTacToeToken.Empty)             // from the opposite direction
            {
                ComputerMainWindow.PlaceTicTacToeToken(1);
                return(true);
            }
            else if (ComputerTicTacToeGame.TicTacToeBoard[2] == token && ComputerTicTacToeGame.TicTacToeBoard[8] == token && ComputerTicTacToeGame.TicTacToeBoard[5] == TicTacToeGame.TicTacToeToken.Empty)             // from the opposite direction
            {
                ComputerMainWindow.PlaceTicTacToeToken(5);
                return(true);
            }
            else if (ComputerTicTacToeGame.TicTacToeBoard[6] == token && ComputerTicTacToeGame.TicTacToeBoard[8] == token && ComputerTicTacToeGame.TicTacToeBoard[5] == TicTacToeGame.TicTacToeToken.Empty)             // from the opposite direction
            {
                ComputerMainWindow.PlaceTicTacToeToken(7);
                return(true);
            }


            return(false);
        }