Move if possible, throw exception if making an invalid move?