public bool LegalMove(Player i_player, Point i_point, eOnlyCheck i_mode) { bool moveResult = m_GameRules.LegalMove(i_player, i_point, i_mode); List <int> scores = m_GameRules.GameScore; m_FirstPlayer.PlayerScore = scores[0]; m_SecondPlayer.PlayerScore = scores[1]; return(moveResult); }
public bool LegalMove(Player i_Player, Point i_Point, eOnlyCheck i_Mode) { bool moveResult = false; if (m_Board.GetCellOnBoard(i_Point).SignValue == (char)eGameSigns.None) { if (i_Point > m_StartRange && i_Point < m_EndRange) { moveResult = SummaryCallsCheckLegalMoveNotInBorders(i_Player, i_Point, i_Mode); } } return(moveResult); }
private bool UpdateBoard(Player i_Player, Point i_Point, eDirections i_Rule, eOnlyCheck i_Mode) { Point copyPoint = new Point(i_Point.AxisXValue, i_Point.AxisYValue); char washerAgainstPlayer = GetAgainstCurrentPlayerSign(i_Player); int amountOppositeWasher = 0; bool moveResult = false; while (copyPoint > m_StartRange && copyPoint < m_EndRange) { copyPoint = CalculateCellsToChange(copyPoint, i_Rule); if (m_Board.GetCellOnBoard(copyPoint).SignValue == washerAgainstPlayer) { amountOppositeWasher++; } else if (amountOppositeWasher > 0 && m_Board.GetCellOnBoard(copyPoint).SignValue == i_Player.PlayerWasher) { amountOppositeWasher++; moveResult = true; break; } else { break; } } if (moveResult && i_Mode == eOnlyCheck.No) { for (int i = 0; i < amountOppositeWasher; i++) { copyPoint = RecoverPreviousPointValue(copyPoint, i_Rule); m_Board.UpdateSignCellOnBoardByPoint(i_Player.PlayerWasher, copyPoint); onUpdateCellSignValue(i_Player.PlayerWasher, copyPoint); } } else if (moveResult && i_Mode == eOnlyCheck.Yes) { for (int i = 0; i < amountOppositeWasher; i++) { copyPoint = RecoverPreviousPointValue(copyPoint, i_Rule); } onUpdateLegalCell(copyPoint); } return(moveResult); }
private bool SummaryCallsCheckLegalMoveNotInBorders(Player i_Player, Point i_Point, eOnlyCheck i_Mode) { bool[] legalMoves = new bool[8]; int indexLegalMove; indexLegalMove = 0; legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.UpperLeftDiagonal, i_Mode); legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.UpperRow, i_Mode); legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.UpperRightDiagonal, i_Mode); legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.RightColoum, i_Mode); legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.DownRightDiagonal, i_Mode); legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.DownRow, i_Mode); legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.DownLeftDiagonal, i_Mode); legalMoves[indexLegalMove++] = UpdateBoard(i_Player, i_Point, eDirections.LeftColoumn, i_Mode); return(IndicateForLegalMoves(legalMoves)); }