Module Lightcycles

val size : int
type layout = string * string list
val layouts : layout list
val arena_of : layout -> Tilemap.t
type dir =
  1. | Up
  2. | Down
  3. | Left
  4. | Right
val delta : dir -> int * int
val opposite : dir -> dir
type cycle = {
  1. col : int;
  2. row : int;
  3. dir : dir;
  4. wanted : dir;
  5. mark : char;
  6. corners : (int * int) list;
  7. alive : bool;
  8. energy : int;
  9. boosting : bool;
}
type round = {
  1. arena : Tilemap.t;
  2. cycles : cycle list;
  3. over : int list option;
  4. pause : int;
  5. frames : int;
}
type brain =
  1. | Room of int
  2. | Search of int
type settings = {
  1. riders : int;
  2. humans : int;
  3. brain : brain;
  4. arenas : layout list;
}
type game = {
  1. round : round;
  2. scores : int list;
  3. settings : settings;
  4. round_no : int;
}
type scene =
  1. | Title
  2. | Playing of game
  3. | Winner of game
type model = scene Scene2d.t
val initial_model : model
val step : int
val rounds_to_win : int
val boost_max : int
val new_game : settings -> game
val update_game : Playground.keyboard -> game -> game
val winner : game -> int option
val update : Playground.computer -> model -> model
val room : Tilemap.t -> (int * int) -> int -> int
val computer_turn : ?limit:int -> Tilemap.t -> cycle -> dir
val voronoi : ((int * int) -> bool) -> (int * int) -> (int * int) -> int
val search_turn : depth:int -> Tilemap.t -> cycle list -> int -> dir