private Square NextSquare(Square from, Direction direction, int distance = 1) { int file = (int)from.File; int rank = from.Rank; switch (direction) { case Direction.Up: rank += distance; break; case Direction.Down: rank -= distance; break; case Direction.Left: file -= distance; break; case Direction.Right: file += distance; break; case Direction.UpperLeft: rank += distance; file -= distance; break; case Direction.UpperRight: rank += distance; file += distance; break; case Direction.LowerLeft: rank -= distance; file -= distance; break; case Direction.LowerRight: rank -= distance; file += distance; break; default: return(null); } if (rank > Board.Size || rank < 0 || file > Board.Size || file < 0) { return(null); } return(Board[Square.GetId((File)file, rank)]); }