Packages
islands_text_client
0.1.67
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.TextClient do
use PersistConfig
@book_ref Application.get_env(@app, :book_ref)
@moduledoc """
Text client for the _Game of Islands_.
\n##### #{@book_ref}
"""
alias __MODULE__.Interact
@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`
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.TextClient.start("Eden", "Adam")`
## Options
- `:mode` - (`:manual` or `:auto`) specifies whether player1 will play
in manual or auto mode; defaults to `:manual`.
- `:pause` - (positive integer) specifies the duration in milliseconds of the pause between moves in auto mode (should be between 1 and 9,999); defaults to 1 millisecond.
"""
@spec start(String.t(), String.t(), Keyword.t()) :: no_return
defdelegate start(game_name, player1_name, options \\ []), to: Interact
@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.TextClient.join("Eden", "Eve")`
## Options
- `:mode` - (`:manual` or `:auto`) specifies whether player2 will play
in manual or auto mode; defaults to `:manual`.
- `:pause` - (positive integer) specifies the duration in milliseconds of the pause between moves in auto mode (should be between 1 and 9,999); defaults to 1 millisecond.
"""
@spec join(String.t(), String.t(), Keyword.t()) :: no_return
defdelegate join(game_name, player2_name, options \\ []), to: Interact
end