Current section

Files

Jump to
islands_text_client lib islands text_client player.ex
Raw

lib/islands/text_client/player.ex

defmodule Islands.TextClient.Player do
# @moduledoc """
# Models an Islands game player.
# """
@moduledoc false
alias IO.ANSI.Plus, as: ANSI
alias Islands.Engine.Tally
alias Islands.TextClient.Player.React
alias Islands.TextClient.Player.React.GameOver
alias Islands.TextClient.{Mover, Prompter, State, Summary}
# :initialized, :players_set, :player1_turn, :player2_turn, :game_over
@spec play(State.t()) :: no_return
def play(%State{tally: %Tally{game_state: game_state}} = state) do
state |> React.to(game_state) |> continue()
end
## Private functions
@spec continue(State.t()) :: no_return
defp continue(%State{tally: %Tally{game_state: :game_over}} = state) do
state
|> Summary.display()
|> GameOver.message()
|> ANSI.format()
|> IO.puts()
GameOver.clear_messages()
exit(:normal)
end
defp continue(state) do
state
|> Summary.display()
|> Prompter.accept_move()
|> Mover.make_move()
|> play()
end
end