I'm tinkering with a framework to implement board games in c# (similar to boardgame.io in JS) part of that is getting a handle on turn structures. (What is a round? what is a turn? who gets to go when? etc)
So I've gone through all my games and looked for recurring patterns and exceptions to them and here's what I've collected so far:
- There's always at least one structure that handles how player act or "take turns"
- the vast majority of games do traditional turns - one player does things, then then another,
- usually in a fixed order maybe going forward some times and backward other times.
- sometimes the order can change
- also possible are:
- turn order decks (you don't know who goes next but know that everyone gets a turn)
- action tracks (where whoever is furthest back gets to go next, possibly resulting in an uneven number of turns)
- the next player is dependent on an action of the previous player
- it's also possible that players can play simultaneously
- a complete free for all is pretty common
- it's also possible that players can act freely to some point, then have to wait for everyone else to catch up
- another consideration, both for concurrent and sequential play is that sometimes some players are excluded (Codenames for example lets all guessers on a given team act concurrently but not the leaders or the other team)
- there can be different rules at different times (like first picking a tile in sequence then everyone can place it simultaneously)
- and there can be nested rules (like every player gets to run an auction but in every auction each player get's to bid as well)
- one relatively common special case is where certain actions on a player's turn result in decisions being needed from other players (trades, attacks, "each player ..." effects)
- the vast majority of games do traditional turns - one player does things, then then another,
- there are often structures that simply subdivide another structure
- they can occur at any level. A game may be divided into "setup" and "play", a round could be divided into different phases but a single player's turn might also be divided into smaller steps.
- these subdivision usually restrict / specify which actions are allowed in them
- these subdivision often come with limits like: you can only do N actions
- sometimes a player can "pass" sometimes they cannot
I'm wondering if anyone can think of an instance that is not covered by these "rules".
In Galaxy Trucker, there is a "distance" or "race" track that manages turn order.
Once all players have built a space ship (simultaneously picking and laying tiles), players place markers on a race track. The first player to finish building their ship is in first, the second player behind them, and so on. I believe there is one empty space between them all as well.
The rest of the game is flipping over event cards one by one and resolving them. Some events are resolved by all players simultaneously. Others are resolved in the order on the race track. First player resolves part of the event. If there's anything left to resolve, second player resolves part, and so on.
Part of resolving an event might involve moving a certain number of steps up or down the race track, skipping over any occupied spaces.
So turn order here would be complicated to work out, especially in a FSM. Effect cards may change turn order, but not always. There may be empty space between two players in the turn order that gets reduced or increased instead. I suppose you could model it with N real players and then X place-holder players that don't actually take their turn.
Thanks! I have Galaxy Trucker too.
In my current draft you can basically say "here is what one player get's to do in their turn" and tell the framework to make a machine that let's every player run through that in some kind of sequence. For now the sequence is fixed. But ultimately all that GT needs is a recalculation of the order after every card. That's relatively simple to add with a post-action trigger.