private int?GetHorizontalVerticalDirectionIndicator(string to) { if (LocationToNumberMapper.ContainsKey(to)) { var valueFrom = LocationToNumberMapper[CurrentLocation]; var valueTo = LocationToNumberMapper[to]; var diff = valueTo - valueFrom; if (diff < 0 && diff % UP_INDICATOR == 0) { return(UP_INDICATOR); } if (diff > 0 && diff % DOWN_INDICATOR == 0) { return(DOWN_INDICATOR); } if (diff < 0 && CurrentLocation[1] == to[1]) { return(LEFT_INDICATOR); } if (diff > 0 && CurrentLocation[1] == to[1]) { return(RIGHT_INDICATOR); } return(null); } throw new InvalidFieldException($"Destination field [{to}] doesn't exist!"); }
private bool CanMoveHorizontally(IBoard board, string to, int directionIndicator) { if (LocationToNumberMapper.ContainsKey(to)) { return(IsHorizontalMoveValid(to, _validHorizontalMoves) && !IsCollisionOnPath(board, to, directionIndicator)); } return(false); }
private bool CanMakeMoveToDestination(string field) { if (LocationToNumberMapper.ContainsKey(field)) { var valueFrom = LocationToNumberMapper[CurrentLocation]; var valueTo = LocationToNumberMapper[field]; foreach (var validMove in _validMoves) { if (valueTo - valueFrom == validMove) { return(true); } } } return(false); }
private bool IsHorizontalMoveValid(string to, IEnumerable <int> validMoves) { if (LocationToNumberMapper.ContainsKey(to)) { var valueFrom = LocationToNumberMapper[CurrentLocation]; var valueTo = LocationToNumberMapper[to]; foreach (var validMove in validMoves) { if (Math.Abs(valueTo - valueFrom) == validMove) { return(true); } } } return(false); }
private bool IsMoveValid(string to) { if (LocationToNumberMapper.ContainsKey(to)) { var valueFrom = LocationToNumberMapper[CurrentLocation]; var valueTo = LocationToNumberMapper[to]; foreach (var validMove in _validMoves) { if (valueTo - valueFrom == validMove) { return(true); } } } return(false); }
public override bool CanAttackField(IBoard board, string to) { if (LocationToNumberMapper.ContainsKey(to)) { var locationDifference = LocationToNumberMapper[to] - LocationToNumberMapper[CurrentLocation]; switch (Math.Abs(locationDifference)) { case CAPTURE1_MOVE_DIFFERENCE: case CAPTURE2_MOVE_DIFFERENCE: return(GetColor() == Color.White ? locationDifference < 0 : locationDifference > 0); default: return(false); } } return(false); }
private bool IsMoveValid(IBoard board, string to) { if (LocationToNumberMapper.ContainsKey(to)) { if (board.GetChessman(to)?.GetColor() == GetColor()) { return(false); } var locationDifference = LocationToNumberMapper[to] - LocationToNumberMapper[CurrentLocation]; switch (Math.Abs(locationDifference)) { case NORMAL_MOVE_DIFFERENCE: if (board.GetChessman(to) != null) { return(false); } return(GetColor() == Color.White ? locationDifference < 0 : locationDifference > 0); case CAPTURE1_MOVE_DIFFERENCE: case CAPTURE2_MOVE_DIFFERENCE: if (board.GetChessman(to) == null) { return(false); } return(board.GetChessman(to).GetColor() != GetColor() && GetColor() == Color.White ? locationDifference < 0 : locationDifference > 0); case FIRST_MOVE_DIFFERENCE: if (!IsFirstMove) { return(false); } return(GetColor() == Color.White ? locationDifference < 0 : locationDifference > 0 && IsPrecedingFieldEmpty(board, GetColor())); default: return(false); } } return(false); }