Reflecting on a conversation I had on stream yesterday, I think I should simplify the GameState code so that it is more like data rather than a mutable shared state and also extract unrelated code to separate classes.