|
defmodule Hexalixir.Grid do |
|
@grid_size 20 |
|
|
|
def new do |
|
for x <- 0..(@grid_size - 1), |
|
y <- 0..(@grid_size - 1), |
|
into: %{} do |
|
{{x, y}, nil} |
|
end |
|
end |
|
|
|
def get_adjacent_coords({x, y}) do |
|
[ |
|
{x + 1, y}, {x - 1, y}, |
|
{x, y + 1}, {x, y - 1}, |
|
{x + 1, y - 1}, {x - 1, y + 1} |
|
] |
|
|> Enum.filter(fn {x, y} -> |
|
x >= 0 && x < @grid_size && y >= 0 && y < @grid_size |
|
end) |
|
end |
|
|
|
def random_color do |
|
["#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#FF00FF", "#00FFFF"] |
|
|> Enum.random() |
|
end |
|
|
|
def check_win(grid) do |
|
grid |
|
|> Map.values() |
|
|> Enum.reject(&is_nil/1) |
|
|> case do |
|
[] -> false |
|
[color | rest] -> Enum.all?(rest, &(&1 == color)) |
|
end |
|
end |
|
end |
|
|