Packages
islands_engine
0.2.9
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.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.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.13
0.2.12
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.81
0.1.80
0.1.79
0.1.78
0.1.77
0.1.76
0.1.75
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
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.0
Models the Game of Islands.
Current section
Files
Jump to
Current section
Files
lib/islands/engine/board/score.ex
defmodule Islands.Engine.Board.Score do
@moduledoc "Convenience module for client applications."
use PersistConfig
alias __MODULE__
alias Islands.Engine.Game.Tally
alias Islands.Engine.{Board, Game, Island}
alias Islands.Engine
@enforce_keys [:type, :hits, :misses, :forested]
defstruct [:type, :hits, :misses, :forested]
@type t :: %Score{
type: :player | :opponent,
hits: non_neg_integer,
misses: non_neg_integer,
forested: [Island.type()]
}
@player_ids Application.get_env(@app, :player_ids)
@spec new(String.t(), Game.player_id(), atom) :: t
def new(game_name, player_id, type)
when is_binary(game_name) and player_id in @player_ids and
type in [:player, :opponent] do
player_id =
case type do
:player -> player_id
:opponent -> Game.opponent(player_id)
end
%Tally{board: board} = Engine.tally(game_name, player_id)
%Board{islands: islands, misses: misses} = board
%Score{
type: type,
hits:
islands
|> Map.values()
|> Enum.map(&MapSet.size(&1.hits))
|> Enum.sum(),
misses: MapSet.size(misses),
forested:
islands
|> Map.values()
|> Enum.filter(&Island.forested?/1)
|> Enum.map(& &1.type)
}
end
def new(_game_name, _player_id, _type), do: {:error, :invalid_score_args}
end