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}, # right, left {x, y + 1}, {x, y - 1}, # up, down {x + 1, y - 1}, {x - 1, y + 1} # diagonals ] |> 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