Packages
islands_text_client
0.2.11
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/interact.ex
defmodule Islands.Text.Client.Interact do
@moduledoc """
Interacts with a client playing the _Game of Islands_.
"""
use PersistConfig
alias Islands.Text.Client.{Player, RemoteProcedureCall, State}
@default_options Application.get_env(@app, :default_options)
@pause_range Application.get_env(@app, :pause_range)
defguard valid_game_args(game_name, player_name, options)
when is_binary(game_name) and is_binary(player_name) and
is_list(options)
@spec start(String.t(), String.t(), Keyword.t()) :: no_return
def start(game_name, player_name, options \\ [])
when valid_game_args(game_name, player_name, options) do
{mode, pause} = get_options(options)
game_name
|> RemoteProcedureCall.new_game(player_name)
|> State.new(:player1, player_name, mode, pause)
|> Player.play()
end
@spec join(String.t(), String.t(), Keyword.t()) :: no_return
def join(game_name, player_name, options \\ [])
when valid_game_args(game_name, player_name, options) do
{mode, pause} = get_options(options)
game_name
|> RemoteProcedureCall.add_player(player_name)
|> State.new(:player2, player_name, mode, pause)
|> Player.play()
end
## Private functions
@spec get_options(Keyword.t()) :: tuple
defp get_options(options) do
options = Keyword.merge(@default_options, options)
mode = options[:mode]
pause = options[:pause]
pause =
cond do
pause < @pause_range.first -> @pause_range.first
pause > @pause_range.last -> @pause_range.last
true -> pause
end
{mode, pause}
end
end