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); }
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); }
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); }
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; } } } } } }
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); }
public UserPlayer(eBoardSign i_Sign) { m_Sign = i_Sign; }