This refines slightly the Random Seed functionality in the core AbstractGameState, and adds distinct random seeds to control different elements of game behaviour in three games (Seven Wonders, Colt Express and Dominion).
This is straightforward to extend to other games and enables the impact of different sources of stochasticity in a game to be measured. For example, how much the initial deal of boards in Seven Wonders matters compared to the deal of the age cards.
In AbstractGameState the old approach was to inherit the same Random from the parent on a copy()...on the reaonable basis that this did not provide any information that could be exploited.
The downside is that this means future shuffles in the parent game state will vary even if they started with the same Game Seed as the random numbers needed are the Players come from the same source. The new approach removes this entanglement.
Now, AbstractGameState.copy(playerID) generates a new Random so that anything generated by a player has no impact on the main Game. This means that the random 3rd card shuffle/deal will be the same in all games that start with the same seed (for example), regardless of the players.
This refines slightly the Random Seed functionality in the core AbstractGameState, and adds distinct random seeds to control different elements of game behaviour in three games (Seven Wonders, Colt Express and Dominion).
This is straightforward to extend to other games and enables the impact of different sources of stochasticity in a game to be measured. For example, how much the initial deal of boards in Seven Wonders matters compared to the deal of the age cards.
In AbstractGameState the old approach was to inherit the same Random from the parent on a copy()...on the reaonable basis that this did not provide any information that could be exploited. The downside is that this means future shuffles in the parent game state will vary even if they started with the same Game Seed as the random numbers needed are the Players come from the same source. The new approach removes this entanglement.
Now, AbstractGameState.copy(playerID) generates a new Random so that anything generated by a player has no impact on the main Game. This means that the random 3rd card shuffle/deal will be the same in all games that start with the same seed (for example), regardless of the players.