Beispiel #1
0
        //TODO: Check if multiple booleans are the correct way. Also check efficiency of the while loop.
        public bool GenerateComputerMove(eBoardSigns i_ComputerSign)
        {
            bool   succeededGeneratingMove = false;
            bool   keepTrying = true;
            int    generatedRow;
            int    generatedColumn;
            Random rand = new Random();

            if (CheckIfBoardFilled())
            {
                keepTrying = false;
            }
            do
            {
                generatedColumn = rand.Next(0, m_GameBoard.MatrixSideSize);
                generatedRow    = rand.Next(0, m_GameBoard.MatrixSideSize);
                if (m_GameBoard.MarkCell(i_ComputerSign, generatedColumn, generatedRow))
                {
                    succeededGeneratingMove = true;
                    keepTrying = false;
                }
            }while(keepTrying);


            return(succeededGeneratingMove);
        }
Beispiel #2
0
        private bool checkForSequenceInDiagonals(eBoardSigns i_MarkedSign)
        {
            bool foundSequence = true;

            for (int i = 1; i <= m_GameBoard.MatrixSideSize; i++) // Check main diagonal.
            {
                if (m_GameBoard.GetBoard()[i, i] != i_MarkedSign)
                {
                    foundSequence = false;
                    break;
                }
            }

            if (!foundSequence) // Check secondary diagonal.
            {
                int cellIndex = m_GameBoard.MatrixSideSize - 1;
                for (int i = 0; i < m_GameBoard.MatrixSideSize; i++)
                {
                    if (m_GameBoard.GetBoard()[i, cellIndex--] != i_MarkedSign)
                    {
                        foundSequence = false;
                        break;
                    }
                }
            }
            return(foundSequence);
        }
Beispiel #3
0
        public static eBoardSigns GetOpositeSign(eBoardSigns i_Sign)
        {
            eBoardSigns opositeSign = eBoardSigns.Player1Sign;

            if (i_Sign == eBoardSigns.Player1Sign)
            {
                opositeSign = eBoardSigns.Player2Sign;
            }

            return(opositeSign);
        }
Beispiel #4
0
        private bool checkForSequenceInColumn(int i_ColumnChosen, eBoardSigns i_MarkedSign)
        {
            bool result = true;

            for (int i = 0; i < m_GameBoard.MatrixSideSize; i++)
            {
                if (m_GameBoard.GetBoard()[i, i_ColumnChosen] != i_MarkedSign)
                {
                    result = false;
                    break;
                }
            }

            return(result);
        }
Beispiel #5
0
        public bool MarkCell(eBoardSigns i_Sign, int i_NumColumns, int i_NumRows)
        {
            bool res = false;

            if (m_Board[i_NumColumns, i_NumRows].Equals(eBoardSigns.Blank))
            {
                this.m_Board[i_NumColumns, i_NumRows] = i_Sign;
                res = true;
                m_NumberOfBlankCells--;
            }

            return(res);


            /*if (i_Sign == 'O' || i_Sign == 'X')
             * {
             *  this.m_Board[i_NumColumns, i_NumRows] = i_Sign;
             * }
             * else
             * {
             *  throw new Exception("Illegal sign entered.");
             * }*/
        }
Beispiel #6
0
 public bool CheckForWinner(int i_ColumnChosen, int i_RowChosen, eBoardSigns i_MarkedSign)
 {
     return(checkForSequenceInColumn(i_ColumnChosen, i_MarkedSign) ||
            checkForSequenceInRow(i_RowChosen, i_MarkedSign) || checkForSequenceInDiagonals(i_MarkedSign));
 }