| 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 |
|
|