Feedback from @dsal - use a condition variable rather than polling loop.
Remove the "consume" thing, pretty sure this will cause problems since we will miss crucial changes.
!.game.isThinking -> game.isThinking because we only want to wait if the thinker is thinking.
add Opponent() method