Packages
hangman_text_client
0.1.57
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.37
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
Text client for the Hangman Game.
Current section
Files
Jump to
Current section
Files
lib/hangman/text/client.ex
# ┌──────────────────────────────────────────────────────────────┐
# │ Based on the course "Elixir for Programmers" by Dave Thomas. │
# └──────────────────────────────────────────────────────────────┘
defmodule Hangman.Text.Client do
@moduledoc """
Text client for the _Hangman Game_.
##### Based on the course [Elixir for Programmers](https://codestool.coding-gnome.com/courses/elixir-for-programmers) by Dave Thomas.
"""
alias __MODULE__.{Engine, Player, State}
alias Hangman.Game
@doc """
Starts locally or remotely a _Hangman Game_ named `game_name`.
The default value for `game_name` is provided by function
`Hangman.Game.random_name/0`.
## Locally when local node is not alive
Start each client like so:
- `cd hangman_text_client`
- `iex -S mix`
- `:observer.start() # optional`
- `Hangman.Text.Client.start()`
## Remotely when local node is alive
App `:hangman_engine` must run in node `:hangman_engine@<hostname>`
where `<hostname>` is either the full host name if long names are used,
or the first part of the full host name if short names are used.
### Short names
Start the engine:
- `cd hangman_engine`
- `iex --sname hangman_engine -S mix`
- `:observer.start() # optional`
Start each client in a different node:
- `cd hangman_text_client`
- `set "MIX_ENV=dev" && iex --sname mike -S mix`
- `Hangman.Text.Client.start()`
* `cd hangman_text_client`
* `set "MIX_ENV=dev" && iex --sname joe -S mix`
* `Hangman.Text.Client.start()`
- etc.
### Long names
Start the engine:
- `cd hangman_engine`
- `iex --name hangman_engine@rays.supratech.ca -S mix`
- `:observer.start() # optional`
Start each client in a different node:
- `cd hangman_text_client`
- `set "MIX_ENV=prod" && iex --name mike@rays.supratech.ca -S mix`
- `Hangman.Text.Client.start()`
* `cd hangman_text_client`
* `set "MIX_ENV=prod" && iex --name joe@rays.supratech.ca -S mix`
* `Hangman.Text.Client.start()`
- etc.
### Short names using releases
Start the engine:
- `cd hangman_engine`
- `iex --sname hangman_engine --cookie fortune -S mix`
- `:observer.start() # optional`
Start each client in a different node:
- `cd hangman_text_client`
- `set RELEASE_NODE=mike@rays`
- `"_build/dev/rel/hangman_text_client/bin/hangman_text_client" start_iex`
- `Hangman.Text.Client.start()`
* `cd hangman_text_client`
* `set RELEASE_NODE=joe@rays`
* `"_build/dev/rel/hangman_text_client/bin/hangman_text_client" start_iex`
* `Hangman.Text.Client.start()`
- etc.
### Long names using releases
Start the engine:
- `cd hangman_engine`
- `iex --name hangman_engine@rays.supratech.ca --cookie fortune -S mix`
- `:observer.start() # optional`
Start each client in a different node:
- `cd hangman_text_client`
- `set RELEASE_NODE=mike@rays.supratech.ca`
- `"_build/prod/rel/hangman_text_client/bin/hangman_text_client" start_iex`
- `Hangman.Text.Client.start()`
* `cd hangman_text_client`
* `set RELEASE_NODE=joe@rays.supratech.ca`
* `"_build/prod/rel/hangman_text_client/bin/hangman_text_client" start_iex`
* `Hangman.Text.Client.start()`
- etc.
"""
@spec start(Game.name()) :: no_return
def start(game_name \\ Hangman.Game.random_name()) do
Engine.new_game(game_name) |> State.new() |> Player.play()
end
end