Packages
islands_text_client
0.2.21
0.2.65
0.2.64
0.2.63
0.2.62
0.2.61
0.2.60
0.2.59
0.2.58
0.2.57
0.2.56
0.2.55
0.2.54
0.2.53
0.2.52
0.2.51
0.2.50
0.2.49
0.2.48
0.2.47
0.2.46
0.2.45
0.2.44
0.2.43
0.2.42
0.2.41
0.2.40
0.2.39
0.2.38
0.2.37
0.2.36
0.2.35
0.2.34
0.2.33
0.2.32
0.2.31
0.2.30
0.2.29
0.2.28
0.2.27
0.2.26
0.2.25
0.2.24
0.2.23
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.99
0.1.98
0.1.97
0.1.96
0.1.95
0.1.94
0.1.93
0.1.91
0.1.90
0.1.89
0.1.88
0.1.87
0.1.86
0.1.85
0.1.84
0.1.83
0.1.82
0.1.81
0.1.80
0.1.79
0.1.78
0.1.77
0.1.76
0.1.75
0.1.74
0.1.73
0.1.72
0.1.71
0.1.70
0.1.69
0.1.68
0.1.67
0.1.66
0.1.65
0.1.64
0.1.63
0.1.62
0.1.61
0.1.60
0.1.59
0.1.58
0.1.57
0.1.56
0.1.55
0.1.54
0.1.53
0.1.52
0.1.51
0.1.50
0.1.49
0.1.48
0.1.47
0.1.46
0.1.45
0.1.44
0.1.43
0.1.42
0.1.41
0.1.40
0.1.39
0.1.38
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Text client for the Game of Islands.
Current section
Files
Jump to
Current section
Files
lib/islands/text/client.ex
# ┌───────────────────────────────────────────────────────────────────────┐
# │ Inspired by the book "Functional Web Development" by Lance Halvorsen. │
# │ Also inspired by the course "Elixir for Programmers" by Dave Thomas. │
# └───────────────────────────────────────────────────────────────────────┘
defmodule Islands.Text.Client do
use PersistConfig
@course_ref Application.get_env(@app, :course_ref)
@moduledoc """
Text client for the _Game of Islands_.
\n##### #{@course_ref}
"""
alias __MODULE__.{Joiner, Starter}
alias Islands.Player
@doc """
Lets player1 start a game.
App `islands_engine` must run in node with short name `islands`...
- `cd islands_engine`
- `iex --sname islands -S mix`
- `:observer.start # optional to observe the game(s) being played`
Player1 runs in a node with any short name (here `client1`)...
- `cd islands_text_client`
- `iex --sname client1 -S mix`
Player1 (`Adam`) starts a game (`Eden`) from his node like so:
- `Islands.Text.Client.start("Eden", "Adam", :m)`
## Parameters
- `game_name` - game name (string)
- `player1_name` - player1 name (string)
- `gender` - gender as either :f or :m (atom)
- `options` - up to 2 options (keyword)
## Options
- `:mode` - (`:manual` or `:auto`) specifies whether player1 will play
in manual or auto mode; defaults to `:manual`.
- `:pause` - (nonnegative integer) specifies the duration in milliseconds
of the pause between moves in auto mode (should be between 0 and 10,000);
defaults to 0 milliseconds.
"""
@spec start(String.t(), String.t(), Player.gender(), Keyword.t()) :: no_return
defdelegate start(game_name, player1_name, gender, options \\ []), to: Starter
@doc """
Lets player2 join a game.
Player2 runs in a node with any short name (here `client2`)...
- `cd islands_text_client`
- `iex --sname client2 -S mix`
Player2 (`Eve`) joins game `Eden` from her node like so:
- `Islands.Text.Client.join("Eden", "Eve", :f)`
## Parameters
- `game_name` - game name (string)
- `player2_name` - player2 name (string)
- `gender` - gender as either :f or :m (atom)
- `options` - up to 2 options (keyword)
## Options
- `:mode` - (`:manual` or `:auto`) specifies whether player2 will play
in manual or auto mode; defaults to `:manual`.
- `:pause` - (nonnegative integer) specifies the duration in milliseconds
of the pause between moves in auto mode (should be between 0 and 10,000);
defaults to 0 milliseconds.
"""
@spec join(String.t(), String.t(), Player.gender(), Keyword.t()) :: no_return
defdelegate join(game_name, player2_name, gender, options \\ []), to: Joiner
end