Current section

Files

Jump to
islands_text_client lib islands text_client input random_guess.ex
Raw

lib/islands/text_client/input/random_guess.ex

defmodule Islands.TextClient.Input.RandomGuess do
use PersistConfig
alias Islands.Engine.Coord
alias Islands.Engine.Game.Tally
alias Islands.Engine.Guesses
alias Islands.TextClient.State
@board_range Application.get_env(@app, :board_range)
@spec pick_guess(State.t()) :: [Coord.row() | Coord.col()]
def pick_guess(
%State{tally: %Tally{guesses: %Guesses{hits: hits, misses: misses}}} =
_state
) do
coords =
for row <- @board_range, col <- @board_range do
{:ok, coord} = Coord.new(row, col)
coord
end
%Coord{row: row, col: col} =
coords
|> Enum.reject(&MapSet.member?(hits, &1))
|> Enum.reject(&MapSet.member?(misses, &1))
|> Enum.random()
[row, col]
end
end