Packages
hangman_text_client
0.1.38
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/prompter.ex
defmodule Hangman.Text.Client.Prompter do
@moduledoc """
Prompts a player for a move.
"""
alias Hangman.Text.Client.{Player, State}
@doc """
Accepts a player's move.
"""
@spec accept_move(State.t()) :: State.t() | no_return
def accept_move(%State{} = state) do
"Your guess (or stop): "
|> IO.gets()
|> check_input(state)
end
## Private functions
# "Player's input"
@typep input :: String.t() | {:error, atom} | :eof
@spec check_input(input, State.t()) :: State.t() | no_return
defp check_input({:error, reason}, state),
do: Player.end_game(state, "Game ended: #{inspect(reason)}.")
defp check_input(:eof, state),
do: Player.end_game(state, "Looks like you gave up somehow.")
defp check_input(input, state) do
case String.trim(input) do
"stop" ->
Player.end_game(state, "Looks like you gave up.")
<<char>> = guess when char in ?a..?z ->
put_in(state.guess, guess)
_bad_input ->
IO.puts("Please enter a single lowercase letter.\n")
accept_move(state)
end
end
end