with the reader/writer abstraction it was too awkward to force get_move on player and aiplayer to take the same args