public Move.eMoveResult MoveTo(Coordinate i_ToCoordinate) { Move.eMoveResult moveResult = Move.eMoveResult.Invalid; if (m_Board.IsValidCoordinate(i_ToCoordinate)) { int rowDelta = Math.Abs(m_Position.Row - i_ToCoordinate.Row); int colDelta = Math.Abs(m_Position.Column - i_ToCoordinate.Column); if (rowDelta == 1 && colDelta == 1) { moveResult = Move.eMoveResult.Moving; } else if (rowDelta == 2 && colDelta == 2) { moveResult = Move.eMoveResult.Skipping; } } if (moveResult != Move.eMoveResult.Invalid) { m_Board.UpdateSoldierPosition(m_Position, i_ToCoordinate); m_Position = i_ToCoordinate; if (m_Position.Row == 0 || m_Position.Row == m_Board.Size - 1) { becomeKing(); } } return(moveResult); }
public bool TryMove(Move i_Move) { bool validMove = false; if (m_CurrentPlayer.IsAvaibleMove(i_Move)) { Soldier soldierToMove = m_Board.GetSoliderAt(i_Move.FromCoordinate); bool wasKing = soldierToMove.IsKing(); Move.eMoveResult moveResult = soldierToMove.MoveTo(i_Move.ToCoordinate); if (moveResult != Move.eMoveResult.Invalid) { OnEventOccured(new SoldierMovedEvent(i_Move)); validMove = true; m_LastMove = i_Move; if (moveResult == Move.eMoveResult.Skipping) { removeSkippedSoldier(i_Move); } if (!wasKing && soldierToMove.IsKing()) { OnEventOccured(new BecameKingEvent(soldierToMove.Symbol, soldierToMove.Position)); } calcPlayersAviableMoves(); if (moveResult == Move.eMoveResult.Skipping && soldierToMove.IsAbleToSkip()) { m_PreviousPlayer = m_CurrentPlayer; } else { switchPlayerTurn(); OnEventOccured(new PlayerSwitchedEvent()); } if (m_CurrentPlayer.Kind == Player.ePlayerKind.Computer) { makeComputerMove(); } } } if (IsGameEnded()) { OnEventOccured(new GameEndedEvent(PreviousPlayer)); } return(validMove); }