Module Grid_move

type dir =
  1. | Up
  2. | Down
  3. | Left
  4. | Right
  5. | Stop
val delta : dir -> int * int
val opposite : dir -> dir
type grid = {
  1. tile : int;
  2. cols : int;
  3. rows : int;
}
type mover = {
  1. gx : int;
  2. gy : int;
  3. dir : dir;
  4. wanted : dir;
}
val mover_at : grid -> (int * int) -> mover
val at_center : grid -> mover -> bool
val tile_of : grid -> mover -> int * int
val next_tile : grid -> mover -> dir -> int * int
val slide : grid -> choose:(mover -> mover) -> int -> mover -> mover
val steer : grid -> open_:((int * int) -> bool) -> mover -> mover
val move_player : grid -> open_:((int * int) -> bool) -> int -> mover -> mover