This is a documentation for Board Game Arena: play board games online !
Zombie Mode: Difference between revisions
(Created page with "{{Studio_Framework_Navigation}} == What is the Zombie mode == When a player leaves a game for any reason (being expelled out of time or quitting the game), he becomes a "zombie player". In this case, the results of the game won't count for statistics, but we must let the other players finish the game anyway. That's why zombie mode exists: allow the other player to finish the game, against the Zombie (a bot) that replaces the Zombie player (a bot). == The different Z...") |
No edit summary |
||
| Line 10: | Line 10: | ||
;Level 0 - the passing zombie | ;Level 0 - the passing zombie | ||
:Just pass to the next step without doing any action | :Just pass to the next step without doing any action | ||
: | :''For example, in 7 wonders, take a random card and discard it (we cannot just pass in this game as it would mess with the next player hand)'' | ||
;Level 1 - the random zombie | ;Level 1 - the random zombie | ||
:Code a random possible action | :Code a random possible action | ||
: | :''For example, in 7 wonders, take a random card and play it'' | ||
;Level 2 - the simple zombie | ;Level 2 - the simple zombie | ||
:Take the action that will bring the most value given the visible information. Isn't planning for future move, nor remember previously known information. Does not try to take a lower value in order to block the opponent. | :Take the action that will bring the most value given the visible information. Isn't planning for future move, nor remember previously known information. Does not try to take a lower value in order to block the opponent. | ||
: | :''For example, in 7 wonders, take a card that will bring the most points to the players. If there is a tie, the one that will cost less. If there is still a tie, randomly in the subset'' | ||
;Level 3 - the smart zombie | ;Level 3 - the smart zombie | ||
:Can plan and/or remember previously revealed information. | :Can plan and/or remember previously revealed information. | ||
:For example, in 7 wonders, it could remember which cards could be back in the next turn to make the best move. | :''For example, in 7 wonders, it could remember which cards could be back in the next turn to make the best move.'' | ||
Ideally, aim for level 1 or 2 for your implementation. | Ideally, aim for level 1 or 2 for your implementation. | ||
| Line 34: | Line 32: | ||
* The idea is NOT to develop an artificial intelligence for the game. | * The idea is NOT to develop an artificial intelligence for the game. | ||
* Do not try to end the game early, even in a two-player game. The zombie is there to allow the game to continue, not to end it. | * Do not try to end the game early, even in a two-player game. The zombie is there to allow the game to continue, not to end it. | ||
== Implementing the Zombie mode == | == Implementing the Zombie mode == | ||
| Line 67: | Line 63: | ||
Note that in the example above, all corresponding game state should implement "zombiePass" as a transition. | Note that in the example above, all corresponding game state should implement "zombiePass" as a transition. | ||
'''Very important''': your zombie code will be called when the player leaves the game. This action is triggered from the main site and propagated to the gameserver from a server, not from a browser. As a consequence, there is no current player associated to this action. In your zombieTurn function, you must '''never''' use getCurrentPlayerId() or getCurrentPlayerName(), otherwise it will fail with a "Not logged" error message. | '''Very important''': your zombie code will be called when the player leaves the game. This action is triggered from the main site and propagated to the gameserver from a server, not from a browser. As a consequence, there is no current player associated to this action. In your zombieTurn function, you must '''never''' use getCurrentPlayerId() or getCurrentPlayerName(), otherwise it will fail with a "Not logged" error message. Just use the $active_player id instead. | ||
[[Category:Studio]] | [[Category:Studio]] | ||
Revision as of 08:49, 4 September 2025
What is the Zombie mode
When a player leaves a game for any reason (being expelled out of time or quitting the game), he becomes a "zombie player". In this case, the results of the game won't count for statistics, but we must let the other players finish the game anyway. That's why zombie mode exists: allow the other player to finish the game, against the Zombie (a bot) that replaces the Zombie player (a bot).
The different Zombie levels
- Level 0 - the passing zombie
- Just pass to the next step without doing any action
- For example, in 7 wonders, take a random card and discard it (we cannot just pass in this game as it would mess with the next player hand)
- Level 1 - the random zombie
- Code a random possible action
- For example, in 7 wonders, take a random card and play it
- Level 2 - the simple zombie
- Take the action that will bring the most value given the visible information. Isn't planning for future move, nor remember previously known information. Does not try to take a lower value in order to block the opponent.
- For example, in 7 wonders, take a card that will bring the most points to the players. If there is a tie, the one that will cost less. If there is still a tie, randomly in the subset
- Level 3 - the smart zombie
- Can plan and/or remember previously revealed information.
- For example, in 7 wonders, it could remember which cards could be back in the next turn to make the best move.
Ideally, aim for level 1 or 2 for your implementation.
While developing your zombie mode, keep in mind that:
- Do not refer to the rules, because this situation is not planned by the rules.
- Try to figure that you are playing with your friends and one of them has to leave: how can we finish the game without killing the spirit of the game?
- The idea is NOT to develop an artificial intelligence for the game.
- Do not try to end the game early, even in a two-player game. The zombie is there to allow the game to continue, not to end it.
Implementing the Zombie mode
Each time a zombie player must play, your "zombieTurn" method is called.
Parameters:
- $state: the current game state.
- $active_player: the id of the active player.
Most of the time, your zombieTurn method looks like this:
function zombieTurn( $state, $active_player )
{
$statename = $state['name'];
if( $statename == 'myFirstGameState'
|| $statename == 'my2ndGameState'
|| $statename == 'my3rdGameState'
....
)
{
$this->gamestate->nextState( "zombiePass" );
}
else
throw new BgaVisibleSystemException( "Zombie mode not supported at this game state: ".$statename );
}
Note that in the example above, all corresponding game state should implement "zombiePass" as a transition.
Very important: your zombie code will be called when the player leaves the game. This action is triggered from the main site and propagated to the gameserver from a server, not from a browser. As a consequence, there is no current player associated to this action. In your zombieTurn function, you must never use getCurrentPlayerId() or getCurrentPlayerName(), otherwise it will fail with a "Not logged" error message. Just use the $active_player id instead.