public override bool IsValidMove(Move move, ChessGame game)
{
ChessUtilities.ThrowIfNull(move, "move");
Position origin = move.OriginalPosition;
Position destination = move.NewPosition;
PositionDistance distance = new PositionDistance(origin, destination);
if ((distance.DistanceX != 1 || distance.DistanceY != 1)
&& (distance.DistanceX != 0 || distance.DistanceY != 1)
&& (distance.DistanceX != 1 || distance.DistanceY != 0)
&& (distance.DistanceX != 2 || distance.DistanceY != 0))
return false;
if (distance.DistanceX != 2)
return true;
return CanCastle(origin, destination, game);
}