{"size": 2199, "ext": "scrbl", "max_stars_repo_path": "scribblings/tally-maze.scrbl", "max_stars_repo_name": "samth/games", "max_stars_repo_stars_event_min_datetime": "2015-01-13T15:10:10.000Z", "max_stars_repo_stars_event_max_datetime": "2021-11-17T14:43:11.000Z", "max_issues_repo_path": "scribblings/tally-maze.scrbl", "max_issues_repo_name": "samth/games", "max_issues_repo_issues_event_min_datetime": "2017-08-25T20:26:37.000Z", "max_issues_repo_issues_event_max_datetime": "2022-02-26T17:48:40.000Z", "max_forks_repo_path": "scribblings/tally-maze.scrbl", "max_forks_repo_name": "samth/games", "max_forks_repo_forks_event_min_datetime": "2015-03-13T22:19:54.000Z", "max_forks_repo_forks_event_max_datetime": "2021-05-28T21:04:36.000Z"}
{"max_stars_count": 48, "max_issues_count": 15, "max_forks_count": 29, "avg_line_length": 43.1176470588, "max_line_length": 91, "alphanum_fraction": 0.6598453843}
#lang scribble/doc
@(require "common.rkt" racket/class racket/draw (only-in pict dc))

@(define (add-commas n)
   (define s (number->string n))
   (apply string-append
          (reverse
           (let loop ([digits (reverse (string->list s))])
             (cond
               [(null? digits) '()]
               [(<= (length digits) 3) (list (apply string (reverse digits)))]
               [else (list* (format ",~a~a~a"
                                    (list-ref digits 2)
                                    (list-ref digits 1)
                                    (list-ref digits 0))
                            (loop (cdddr digits)))])))))

@gametitle["Tally Maze" "tally-maze" "Maze Enumeration Game"]

The object of @game{Tally Maze} is to help the blue ball 
reach the exit of the maze without being caught by the pumpkins.

Control the blue ball with the keyboard: 
@itemlist[@item{the arrow keys move one step in each direction;}
           @item{space and @litchar{.} let the pumpkins move without moving the blue ball;}
           @item{@litchar{z} undoes the most recent move; and}
           @item{@litchar{n} changes the maze.}]

As you can quickly discover, simply moving around in the maze
is a recipe for failure. The pumpkins know the best route 
in the maze to reach your blue ball and they take it.

The @litchar{n} key, however, adjusts the maze. More precisely,
it moves forward to the next maze in an enumeration of all 
@(add-commas 254377512893447941210664002794210519990861507330048)
of the mazes that the game
supports. Each maze is only a little bit different from
the one before, so you have to plan ahead in order to understand
how the current maze differs from the next one. (Use the
undo key to help you plan.)

Beware, however, that planning ahead one maze is not enough;
although one pumpkin just chases you in the current maze,
the other pumpkin tries to track where you might go if
you advance to the next maze and to wait for you there.
Not all games are winnable (although I hope most are).

Thanks to Lazy Crazy (@url{http://lazycrazy.deviantart.com}) for
the blue ball icons and to YOOtheme (@url{http://www.yootheme.com/icons})
for the pumpkin icon.
