Packages
islands_grid
0.1.31
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.3
0.1.2
0.1.1
A grid (map of maps) and functions for the Game of Islands.
Current section
Files
Jump to
Current section
Files
lib/islands/grid/tile.ex
defmodule Islands.Grid.Tile do
@moduledoc """
Creates a tile from a cell value.
"""
alias IO.ANSI.Plus, as: ANSI
@doc """
Creates a tile (with embedded ANSI escapes) from `cell_value`.
## Examples
iex> alias Islands.Grid.Tile
iex> Tile.new(:atoll) # => A sandy brown tile
[[[[[] | "\e[38;5;215m"] | "\e[48;5;215m"], "<a>"] | "\e[0m"]
iex> alias Islands.Grid.Tile
iex> Tile.new(:atoll_hit) # => An islamic green tile
[[[[[] | "\e[38;5;34m"] | "\e[48;5;34m"], ">a<"] | "\e[0m"]
"""
@spec new(atom) :: IO.chardata()
def new(cell_value)
def new(:atoll), do: format(:sandy_brown, "<a>")
def new(:dot), do: format(:teak, "<d>")
def new(:l_shape), do: format(:tenne, "<l>")
def new(:s_shape), do: format(:khaki, "<s>")
def new(:square), do: format(:chocolate, "<q>")
def new(:atoll_hit), do: format(:islamic_green, ">a<")
def new(:dot_hit), do: format(:spring_green, ">d<")
def new(:l_shape_hit), do: format(:dark_green, ">l<")
def new(:s_shape_hit), do: format(:pale_green, ">s<")
def new(:square_hit), do: format(:lawn_green, ">q<")
def new(:hit), do: format(:islamic_green, ">h<")
def new(:miss), do: format(:blue_ribbon, "<m>")
# def new(:board_miss), do: format(:dodger_blue, "<m>")
def new(:board_miss), do: format(:blue_ribbon, "<m>")
def new(nil), do: format(:deep_sky_blue, "<o>")
## Private functions
@spec format(atom, String.t()) :: IO.chardata()
defp format(tile_color, value) do
# Background color same as foreground color making `value` invisible...
ANSI.format([tile_color, :"#{tile_color}_background", value], _emit? = true)
end
end