abstract out mouse events; add next_game_state to Button; and it works!