View Source Perudex.Game (Perudex v0.7.0)
Provides functions to manipulate a game of Perudex.
Link to this section Summary
Functions
Play a Perudo move
on the current game.
Initialize a game of Perudo with players_ids
and specified max_dice
a player can hold.
Link to this section Types
@type bid() :: {:count, :die}
@type game_phase() :: :normal | :palifico
@type instruction() :: {:notify_player, player_id(), player_instruction()}
@type move() :: {:outbid, bid()} | :calza | :dudo
@type player_id() :: any()
@type player_instruction() :: {:move, Perudex.Hand.t()} | {:reveal_players_hands, %{required(player_id()) => Perudex.Hand.t()}, {integer(), integer()}} | {:last_move, player_id(), move_result()} | :unauthorized_move | :invalid_bid | :illegal_move | {:new_hand, Perudex.Hand.t()} | {:winner, player_id()} | {:loser, player_id()} | {:game_started, [player_id()]} | {:phase_change, game_phase()}
@opaque t()
Link to this section Functions
@spec play_move(t(), player_id(), move()) :: {[instruction()], t()}
Play a Perudo move
on the current game.
A move can either be an outbid, a calza (exactly the same amount of dice as the previous bid) or a dudo (bid is too ambitious).
examples
Examples
iex> Perudex.Game.play_move(
...> %Perudex.Game{
...> all_players: [1, 2],
...> current_bid: {2, 3},
...> current_player_id: 2,
...> instructions: [],
...> max_dice: 5,
...> players_hands: %{1 => %Perudex.Hand{dice: [2, 4, 2, 5, 6], remaining_dice: 5}, 2 => %Perudex.Hand{dice: [1, 3, 4, 4, 5], remaining_dice: 5}}},
...> 1,
...> {:outbid, {2, 3}})
{[
{:notify_player, 1, {:last_move, 1, {:outbid, {2, 3}}}},
{:notify_player, 2, {:last_move, 1, {:outbid, {2, 3}}}},
{:notify_player, 2, :move}
],
%Perudex.Game{
all_players: [1, 2],
current_bid: {2, 3},
current_player_id: 2,
instructions: [],
max_dice: 5,
players_hands: %{1 => %Perudex.Hand{dice: [2, 4, 2, 5, 6], remaining_dice: 5}, 2 => %Perudex.Hand{dice: [1, 3, 4, 4, 5], remaining_dice: 5}}
}}
@spec start([player_id()], integer()) :: {[player_instruction()], t()}
Initialize a game of Perudo with players_ids
and specified max_dice
a player can hold.
Returns a tuple containing a list of Perudex.Game.player_instruction()
and a Perudex.Game
struct.
examples
Examples
iex>
:rand.seed(:exsplus, {101, 102, 103})
Perudex.Game.start([1, 2], 5)
{[
{:notify_player, 1, {:game_started, [1, 2]}},
{:notify_player, 2, {:game_started, [1, 2]}},
{:notify_player, 1, {:new_hand, %Perudex.Hand{dice: [5, 5, 2, 6, 4], remaining_dice: 5}}},
{:notify_player, 2, {:new_hand, %Perudex.Hand{dice: [1, 3, 6, 4, 2], remaining_dice: 5}}},
{:notify_player, 1, {:move, %Perudex.Hand{dice: [5, 5, 2, 6, 4]}}
],
%Perudex.Game{
all_players: [1, 2],
current_bid: {0, 0},
current_player_id: 1,
instructions: [],
max_dice: 5,
players_hands: %{1 => hand: %Perudex.Hand{dice: [5, 5, 2, 6, 4], remaining_dice: 5}, 2 => %Perudex.Hand{dice: [1, 3, 6, 4, 2], remaining_dice: 5}}
}}