In join_game, why are you initializing the PDA again? Presumably this already exists after game is created?
Pass it in as an account without the initialize? You should already know the PDA address at the point you are joining a game.
Sorry if I missed some important detail here and if this is a non sequiter answer for you.
EDIT: I misread the code originally and I am retracting this response. It appears you are using the same seed twice for two different accounts in the join_game.rs. Didn't hear back but I assume this was the problem.