Currently, every for every possible relative move (as in file +=x, rank += y) has to be checked manually.
Implement a method for Field to return Some(Field after the move) if the resulting move is valid (on the board).
If the move would end up outside the bounds of the board, return None.