Islands.State (Islands State v0.1.17) View Source

A state struct and functions implementing a state machine for the Game of Islands.

Based on the book Functional Web Development by Lance Halvorsen.

Link to this section Summary

Types

Events

Game states

Player states

t()

A state struct for the Game of Islands

Functions

Decides whether to permit the state/event combination. Also decides whether to transition to a new state. Returns {:ok, new_state} if the combination is permissible. Returns :error if it is not.

Callback implementation for Access.fetch/2.

Creates a new state struct.

Callback implementation for Access.pop/2.

Link to this section Types

Specs

event() ::
  :add_player
  | {:position_island, Islands.PlayerID.t()}
  | {:position_all_islands, Islands.PlayerID.t()}
  | {:set_islands, Islands.PlayerID.t()}
  | {:guess_coord, Islands.PlayerID.t()}
  | {:stop, Islands.PlayerID.t()}
  | {:win_check, :no_win | :win}

Events

Specs

game_state() ::
  :initialized | :players_set | :player1_turn | :player2_turn | :game_over

Game states

Specs

player_state() :: :islands_not_set | :islands_set

Player states

Specs

t() :: %Islands.State{
  game_state: game_state(),
  player1_state: player_state(),
  player2_state: player_state()
}

A state struct for the Game of Islands

Link to this section Functions

Specs

check(t(), event()) :: {:ok, t()} | :error

Decides whether to permit the state/event combination. Also decides whether to transition to a new state. Returns {:ok, new_state} if the combination is permissible. Returns :error if it is not.

Callback implementation for Access.fetch/2.

Link to this function

get_and_update(state, key, fun)

View Source

Callback implementation for Access.get_and_update/3.

Specs

new() :: t()

Creates a new state struct.

Examples

iex> Islands.State.new()
%Islands.State{
  game_state: :initialized,
  player1_state: :islands_not_set,
  player2_state: :islands_not_set
}

Callback implementation for Access.pop/2.