 
   @doc """
   Places a bomb on `count` number of randomly selected board squares.
+
+  The board's PRNG seed is used to make this operation idempotent.
   """
   @spec place_random_bombs(pid, pos_integer) :: :ok
   def place_random_bombs(pid, count \\ @bomb_count) do

  @default_size 15
  @bomb_count 22

  @spec start_link :: Agent.on_start
  def start_link do
    start_link(new)
  end

  @spec start_link(t) :: Agent.on_start
  def start_link(board) do
    Agent.start_link(fn -> board end)
  end

  @spec new(pos_integer) :: t
  def new(size \\ @default_size) do
    new(size, Utils.unique_seed)
  end

  @spec new(pos_integer, seed) :: t
  def new(size, seed) do
    %LexibombServer.Board{

defmodule LexibombServer.Board do
  @moduledoc """
  Maintains the state of game boards and provides the high-level public API for
  interacting with them througout gameplay.

  A default Lexibomb board consists of a 15 x 15 grid of squares. The squares
  are referred to using a coordinate system where the rows are numbered
  1 through 15, and the columns are numbered "a" through "o". A number combined
  with a letter specify a square on the board.
  """

  defstruct [:grid, :seed]
