Exemple #1
0
        private bool checkIsValidDirection(int i_Row, int i_Col, eBoardSign i_Sing, int i_DirX, int i_DirY, out int o_NumOfSteps)
        {
            o_NumOfSteps = 0;
            bool isValidDir = false;
            int  dirX = i_DirX, dirY = i_DirY;
            int  sign           = (int)i_Sing;
            bool isInBoundaries = checkIsInBoundaries(i_Row + dirX, i_Col + dirY);

            ///Note that X = 1 and O = -1.
            while (isInBoundaries && m_GameMatrix[i_Row + dirX, i_Col + dirY] == (eBoardSign)(sign * (-1)))
            {
                o_NumOfSteps++;
                dirX          += i_DirX;
                dirY          += i_DirY;
                isInBoundaries = checkIsInBoundaries(i_Row + dirX, i_Col + dirY);
            }

            if (isInBoundaries && o_NumOfSteps > 0)
            {
                if (m_GameMatrix[i_Row + dirX, i_Col + dirY] == i_Sing)
                {
                    isValidDir = true;
                }
            }

            return(isValidDir);
        }
        private bool checkForUpDiagonalSequence()
        {
            bool       hasRightSequence = false;
            bool       hasLeftSequence  = false;
            eBoardSign lastEntrySign    = m_BoardMatrix[m_RowIndexOfLastEntry, m_ColIndexOfLastEntry];

            if (m_RowIndexOfLastEntry - 3 >= 0)
            {
                if (m_ColIndexOfLastEntry + 3 < m_ColsNumber)
                {
                    if (lastEntrySign == m_BoardMatrix[m_RowIndexOfLastEntry - 1, m_ColIndexOfLastEntry + 1] &&
                        lastEntrySign == m_BoardMatrix[m_RowIndexOfLastEntry - 2, m_ColIndexOfLastEntry + 2] &&
                        lastEntrySign == m_BoardMatrix[m_RowIndexOfLastEntry - 3, m_ColIndexOfLastEntry + 3])
                    {
                        hasRightSequence = true;
                    }
                }

                if (m_ColIndexOfLastEntry - 3 >= 0)
                {
                    if (lastEntrySign == m_BoardMatrix[m_RowIndexOfLastEntry - 1, m_ColIndexOfLastEntry - 1] &&
                        lastEntrySign == m_BoardMatrix[m_RowIndexOfLastEntry - 2, m_ColIndexOfLastEntry - 2] &&
                        lastEntrySign == m_BoardMatrix[m_RowIndexOfLastEntry - 3, m_ColIndexOfLastEntry - 3])
                    {
                        hasLeftSequence = true;
                    }
                }
            }

            return(hasRightSequence || hasLeftSequence);
        }
Exemple #3
0
        public void MakePlayerTurn(int i_Row, int i_Col, eBoardSign i_Sign)
        {
            bool    isGameOver;
            ePlayer nextPlayer = getNextPlayer();

            m_AreThereMovesForO = true;
            m_AreThereMovesForX = true;

            m_Board.FlipSquaresSigns(i_Row, i_Col, i_Sign);
            isGameOver = updateGameAccordingToMove(nextPlayer);

            if (m_NumOfUserPlayers == 1 && m_AreThereMovesForO)
            {
                do
                {
                    System.Threading.Thread.Sleep(2000);
                    chooseAndApplyPcrMove();
                    isGameOver = updateGameAccordingToMove(ePlayer.Xplayer);
                }while (!m_AreThereMovesForX && m_AreThereMovesForO);
            }

            if (isGameOver)
            {
                handleGameResult();
            }
        }
        private bool checkForVerticalSequence()
        {
            bool       hasDownSequence = false;
            eBoardSign lastEntrySign   = m_BoardMatrix[m_RowIndexOfLastEntry, m_ColIndexOfLastEntry];

            if (m_RowIndexOfLastEntry + 3 < m_RowsNumber)
            {
                if (lastEntrySign == m_BoardMatrix[m_RowIndexOfLastEntry + 1, m_ColIndexOfLastEntry] &&
                    lastEntrySign == m_BoardMatrix[m_RowIndexOfLastEntry + 2, m_ColIndexOfLastEntry] &&
                    lastEntrySign == m_BoardMatrix[m_RowIndexOfLastEntry + 3, m_ColIndexOfLastEntry])
                {
                    hasDownSequence = true;
                }
            }

            return(hasDownSequence);
        }
Exemple #5
0
        private bool checkSquare(int i_Row, int i_Col, eBoardSign i_Sing)
        {
            bool isValidSquare = false;
            int  dirX, dirY;
            int  numOfSteps;

            for (int i = -1; i <= 1; i++)
            {
                for (int j = -1; j <= 1; j++)
                {
                    dirX = i;
                    dirY = j;
                    if (!(i == 0 && j == 0))
                    {
                        isValidSquare |= checkIsValidDirection(i_Row, i_Col, i_Sing, dirX, dirY, out numOfSteps);
                    }
                }
            }

            return(isValidSquare);
        }
        internal bool PlaceChoice(eBoardSign i_Sign, int i_ColNumber)
        {
            bool isPlacedSuccessfully = CheckColumnAvailability(i_ColNumber);

            if (isPlacedSuccessfully)
            {
                for (int i = m_RowsNumber - 1; i >= 0; i--)
                {
                    if (m_BoardMatrix[i, i_ColNumber - 1] == eBoardSign.E)
                    {
                        isPlacedSuccessfully = true;
                        m_BoardMatrix[i, i_ColNumber - 1] = i_Sign;
                        m_RowIndexOfLastEntry             = i;
                        m_ColIndexOfLastEntry             = i_ColNumber - 1;
                        m_StoredCellsCounter++;
                        break;
                    }
                }
            }

            return(isPlacedSuccessfully);
        }
Exemple #7
0
        public void FlipSquaresSigns(int i_Row, int i_Col, eBoardSign i_Sing)
        {
            int dirX, dirY;
            int numOfSteps;

            if (i_Sing == eBoardSign.X)
            {
                m_XCounter++;
            }
            else
            {
                m_OCounter++;
            }

            for (int i = -1; i <= 1; i++)
            {
                for (int j = -1; j <= 1; j++)
                {
                    dirX = i;
                    dirY = j;
                    if (!(i == 0 && j == 0))
                    {
                        if (checkIsValidDirection(i_Row, i_Col, i_Sing, dirX, dirY, out numOfSteps))
                        {
                            m_GameMatrix[i_Row, i_Col] = i_Sing;
                            for (int k = 0; k < numOfSteps; k++)
                            {
                                m_GameMatrix[i_Row + dirX, i_Col + dirY] = i_Sing;
                                dirX       += i;
                                dirY       += j;
                                m_XCounter += (int)i_Sing;
                                m_OCounter -= (int)i_Sing;
                            }
                        }
                    }
                }
            }
        }
Exemple #8
0
        private StringBuilder buildMainRow(int i_rowNumber)
        {
            StringBuilder rowBuilder = new StringBuilder();

            rowBuilder.Append("|");

            for (int i = 0; i < m_GameLogic.ColsNumber; i++)
            {
                eBoardSign currentSign = m_GameLogic.Board[i_rowNumber, i];
                if (currentSign == eBoardSign.E)
                {
                    rowBuilder.Append("   ");
                }
                else
                {
                    rowBuilder.Append(" " + currentSign + " ");
                }

                rowBuilder.Append("|");
            }

            return(rowBuilder);
        }
Exemple #9
0
 public UserPlayer(eBoardSign i_Sign)
 {
     m_Sign = i_Sign;
 }