Variations on a maze
From Maze
---
One common feature of the many different maze games from the period is orientation: all both rectilinear and aligned to the Cartesian axes. Different examples have their own aesthetics -- Pac Man partitions the screen space into an open field a indirect routes, Maze Craze creates a traditional full-screen overview with a single solution, while Adventure produces a claustrophobic view in which only part of the impossibly wrapping maze topology is visible at any time -- usually nearby but inaccessible paths. What all have in common is that they are constructed of horizontal/vertical walls that are orthogonal to the edges of the screen and the scan line of the display.
By contrast, the maze output of 10 PRINT is oriented diagonally, giving it a distinctive visual look.
10 PRINT CHR$(109+RND(1)*2); : GOTO 10
10print-diagonal.png
464 × 366 pixels
Several things about this visual orientation are surprising. First, when we visually trace the maze the long runs or paths that lead through the maze do not follow the lines along which the algorithm constructs the maze (which remains left-right, top-bottom). Second, this feature of being diagnol is not an elaboration in the code, but instead an elegant simplification that is part of the essence of the succinct one-liner.
There are no other two characters in the <a href="http://en.wikipedia.org/wiki/PETSCII">PETSCII</a> data set that, when substituted for our "\" and "/", will result in the construction of a traditional orthogonal maze. Vertical and horizontal bars, for example, result in a disconnected weave, while solid and empty squares result in rough static.
10 PRINT CHR$(102+RND(1)*2); : GOTO 10
10print-orthogonal-weave.png
464 × 366 pixels
Randomly selecting corner pieces such as "L", on the other hand, simply turn the image into a honeycomb.
10 PRINT CHR$(108+(INT(RND(1)+.5)*3)); : GOTO 10
10print-elbows.png
464 × 366 pixels
As it turns out, diagonal mazes are symbolically efficient on a Cartesian grid due to the fact that four characters meet at the corners, whereas only two meet along an edge. Thus, intersections of up to four lines (the building blocks of a rectilinear maze) can be created at corners if we use diagonal lines.
One of the most intuitive methods of constructing a maze-grid is to take an approach like graph paper, using four characters to signify either a top-wall, bottom-wall, left-wall or right-wall for each cell on the grid. Such characters exist in PETSCII in both "thick" and "thin" variants. Such a process is unfortunately less elegant, as these characters are never placed continuously in the PETSCII character set, and so cannot be addressed with a simple offset.
One can, of course, construct an orthogonal maze instead in a variety of other ways. One way is to address a set of four or more horizontal character elements a l. There are two styles of these characters (thick and thin) available in the Commodore 64 ASCII character set. However, these four character types never appear continuously in the table, so the elegant method of using a simple RND offset must be made a bit more verbose -- for example, selecting between 181, 182, 184 and 185 using two random offsets.
10 PRINT CHR$(181+(INT(RND(1)+.5)*3)+(INT(RND(1)+.5))); : GOTO 10
10print-orthogonal-rough.png
464 × 366 pixels
The image that emerges is indeed mazelike, but (like the code) lacks simplicity and elegance. potential redundancy between the top / bottom and left / right elements creates apparent variation in the thickness of the walls -- an interesting but potentially distracting implication of messiness and texture.
10 PRINT CHR$(181+(INT(RND(1)+.5)*3)); : GOTO 10
10print-orthogonal.png
464 × 366 pixels
---
