Packages
islands_score
0.1.3
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.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.3
0.1.2
0.1.1
A score struct and functions for the Game of Islands.
Current section
Files
Jump to
Current section
Files
lib/islands/score.ex
# ┌───────────────────────────────────────────────────────────────────────┐
# │ Inspired by the book "Functional Web Development" by Lance Halvorsen. │
# └───────────────────────────────────────────────────────────────────────┘
defmodule Islands.Score do
use PersistConfig
@book_ref Application.get_env(@app, :book_ref)
@moduledoc """
Creates a `score` struct for the _Game of Islands_.
\n##### #{@book_ref}
"""
alias __MODULE__
alias Islands.{Board, Island}
@derive [Poison.Encoder]
@derive Jason.Encoder
@enforce_keys [:hits, :misses, :forested_types]
defstruct [:hits, :misses, :forested_types]
@type forested_types :: [Island.type()]
@type hits :: non_neg_integer
@type misses :: non_neg_integer
@type t :: %Score{hits: hits, misses: misses, forested_types: forested_types}
@doc """
Creates a `score` struct for the _Game of Islands_.
## Examples
iex> alias Islands.{Board, Score}
iex> %Score{
...> hits: hits,
...> misses: misses,
...> forested_types: forested_types
...> } = Board.new() |> Score.new()
iex> {hits, misses, forested_types}
{0, 0, []}
"""
@spec new(Board.t()) :: t
def new(%Board{} = board) do
%Score{
hits: Board.hits(board),
misses: Board.misses(board),
forested_types: Board.forested_types(board)
}
end
end