File size: 796 Bytes
8752997
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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