A board struct and functions for the Game of Islands.
The board struct contains the fields:
islandsmisses
representing the properties of a board in the Game of Islands.
Based on the book Functional Web Development by Lance Halvorsen.
Summary
Functions
Checks if all islands have been positioned on board.
Returns a list of island types for forested islands.
Returns a map assigning the CSS grid position of each island
on board to its island type.
Checks if guess has hit any island on board and returns a response tuple.
Returns a map assigning the list of hit "cells" of each island
on board to its island type.
Returns board's total number of hits.
Returns a map assigning to :squares the list of square numbers
from board's misses.
Returns board's total number of misses.
Returns an empty board struct.
Positions island on board and returns an updated board or
{:error, reason} if island overlaps another island on board.
Types
@type islands() :: %{required(Islands.Island.type()) => Islands.Island.t()}
A map assigning islands to their island types
@type t() :: %Islands.Board{islands: islands(), misses: Islands.Island.coords()}
A board struct for the Game of Islands
Functions
Checks if all islands have been positioned on board.
@spec forested_types(t()) :: [Islands.Island.type()]
Returns a list of island types for forested islands.
@spec grid_positions(t()) :: %{ required(Islands.Island.type()) => Islands.Island.grid_position() }
Returns a map assigning the CSS grid position of each island
on board to its island type.
@spec guess(t(), Islands.Coord.t()) :: Islands.Board.Response.t()
Checks if guess has hit any island on board and returns a response tuple.
@spec hit_cells(t()) :: %{ required(Islands.Island.type()) => [Islands.Island.grid_cell()] }
Returns a map assigning the list of hit "cells" of each island
on board to its island type.
@spec hits(t()) :: non_neg_integer()
Returns board's total number of hits.
@spec miss_squares(t()) :: %{squares: [Islands.Coord.square()]}
Returns a map assigning to :squares the list of square numbers
from board's misses.
@spec misses(t()) :: non_neg_integer()
Returns board's total number of misses.
@spec new() :: t()
Returns an empty board struct.
@spec position_island(t(), Islands.Island.t()) :: t() | {:error, atom()}
Positions island on board and returns an updated board or
{:error, reason} if island overlaps another island on board.
Error reason:
:overlapping_island- overlaps another island