Variations on a maze

From Maze

Revision as of 20:30, 29 July 2010 by JeremyDouglass (Talk | contribs) (→Keyboard and Character Map, Hardware and Software)
Jump to: navigation, search

Variations on a Maze: 10 Print as CHR calls

This section examines a set of simple variations in the 10 Print one-liner, each drawing on different graphic characters from the PETSCII table. Although each change is small, every variation has a significant impact on the perceived maze-like qualities of the visual output. The output of 10 Print has a unique visual appeal, which we can understand in terms of design and composition (diagonal vs orthogonal), and in terms of how it plays against the contextual expectations of the historical period when it emerged (graphical software -- particularly video games of the era).

When we attempt to change even the smallest element of 10 Print, we make an interesting discovery -- 10 Print is a kind of optimal solution that is uniquely elegant in its design space (a c64 BASIC one-line maze generator). Any similar attempt is both less concise (requires more code) and less expressive (resembles a maze less). In fact, the concision of the code and the expressiveness of the image are tightly related, and arise out of a unique set of constraints and interactions:

  • the keyboard layout of the PET / C64
  • the sequence of adjacent characters in the PETSCII table
  • graphic design and topology
  • a design goal to make the one-liner short and simple

Because the original program is a concise randomized offset to a region of the PETCSII character table, our variations are limited to other such lookups. The code is limited by the characters available in PETSCII, and the concision or elegance of the code is affected by the adjacency of characters, which must otherwise be randomized in a more complex way than an offset.

Contents

[hide]

Keyboard and Character Map, Hardware and Software

PET_Keyboard.png
800 × 267 pixels
The PET 2001 chicklet keyboard, with the visually complementary arrangement of graphic characters on the keys.

As we will see when exploring visual alternatives below, the PETSCII CHR table contains few related graphical characters the are next to each other and can be easily addressed by offsets -- in fact, many related images (sets of corners, mirror images) appear to have been randomly scattered through the space. This lack of adjacency complicates our ability to generate graphics using a simple offset -- in fact, to use anything but an offset of one, we have to cast the random number generator's float result to an int before multiplying.

Why is the order of graphical characters in the PETSCII table so haphazard? The answer is that arrangement was dictated, not by logically grouping index numbers (a program-up strategy), but by arranging them visually on the PET keyboard design (a hardware-down strategy). Because the PET 2001 keyboard was a chicklet variant of the QWERTY arrangement, yet lacking the row offsets that QWERTY designer Christopher Sholes originally created for mechanical typewriter levers, its grid of keys presented a clear canvas for logical groupings of related symbols. Thus we can see four corners of a square grouped on OPL:, four arcs of a circle on UIJK, and four suits of a card deck on ASZX. This visual logical grouping, however, occurs in the space of the QWERTY keyboard arrangement, which originally attempted to minimize mechanical jams in typewriters by maximizing the distance between common letter pairs. As a side-effect of this principle, few adjacent letters pairs in the alphabetic sequence are actually visual neighbors on the QWERTY keyboard. They are:

FG JK NM (reversed) OP

Other graphical characters, while adjacent on the physical keyboard, are effectively scrambled by the QWERTY layout before being placed in the alphabetized PETSCII index. This preserves their logical relationship to the keys (any graphical character can be transformed into its letter, or vice-versa, by a fixed offset). However it obfuscates their relationship to each other.

Not coincidentally, our 10 Print one-liner uses the NM pair -- because it is visible on the interface, because it is elegant and concise in the code, and because the output is surprising, given the context of maze-like computer graphics at the time.

Context of Expectations: Computer Graphics and Games

(NOTE: List of maze video games)

The representation of mazes in computer graphics was already a staple during the period that finds the 10 Print BASIC one-liner appearing in C64 manuals and journals -- in fact, the use of computers to represent mazes conceptually was common even before the advent of home computer graphics.

(Sidebar? Summary IF and the tradition of box diagram maps, the importance of mazes in Adventure / Zork / Acheton, and the contextual relationship to home computing and dominance of early PC video game industry)

Game-Gotcha-arcade-(1973).jpg
320 × 240 pixels
Gotcha (1973 arcade) a game of tag between two players in a maze-like field of partitions
Game-Amazing_Maze-arcade-(1976).png
225 × 197 pixels
The Amazing Maze Game (1976 arcade) -- a classic maze
Game-Maze_Craze-Atari2600-(1978).png
640 × 350 pixels
Maze Craze (1978 Atari VCS) -- a large set of games -- complete, race-to-complete, tag, etc. -- all played within classic mazes.

In graphical computer games, one common feature of the many different 2D maze games from the period is orientation: all are rectilinear and aligned to the Cartesian axes, rather than being diagonal. This similarity, it turns out, is constituitive of the category -- in fact, it is even more important than the degree to which given games are maze-like, or what impact their maze-ness has on gameplay. Different games have different maze aesthetics. The arcade game Gotcha (1973) stages a game of tag between two players in a maze-like field of disconnected partitions which served as an obstacle course. Conversly, the arcade game The Amazing Maze Game (1976) implements a race (two-player or against a computer) to solve a classic continuous closed maze. A similar implementation on the home Atari VCS, Maze Craze (1978) provides a playable random maze generator as the field for a very a large number of games, including races and tag, and includes modes with invisible walls where the maze must be interactively felt out and remembered.

Pac-Man (1980) is perhaps the most famous classic maze-like arcade game, although, like Gotcha, it is less a maze than a free-form obstacle course, using the free-floating wall partitions to complicate the game of tag rather than obfuscating any path to escape. When Pac-Man was reimplemented for the Atari VCS in 1982, vertical field was redesigned in horizontal format and for lower resolution display, however the essential topology of the game (partitions, looped corners, and warp gates connecting one side to the other) remained the same.

Another feature shared by all these games (both arcade and for home video game consoles) is their treatment of the screen display as a single complete visual unit, like the board of a board game. An interesting contrast to this aesthetic is a close-up design that puts the player in the Maze, the Atari VCS game Adventure (1979) implements a maze as a series of many close-up screens. Adventure was extremely loosely based on the interactive fiction work of the same name, and featured a hero with a sword collecting treasures despite the efforts of four dragons. Unlike Pac-Man, in which the player can guide Pac-Man out a warp gate on one side of the screen and see him enter on the other side, Adventure contains numerous topologically impossible warps that are always hidden from view, and can only be deduced. Instead of an overview map of the total maze, each screen is a claustrophobic close-up of simple paths, often emphasizing discontinuous fragments of other paths that can't easily be reached. This kind of claustrophobic, discontinuous maze-space was later further explored in Haunted House (1981), particularly in the use of darkness and the addition of keys in some modes to restrict and sequence room access.

Isometric Games

(NOTE: Isometric video games)

(presence of the diagonal line at all -- isometric projection itself not unheard of, but far from the norm -- Marble Madness not until 1984)

Whether close up or distant, continuous mazes or partitioned obstacle courses, what all these period maze-games have in common is that, unlike the diagonal orientation of 10 Print, all are constructed of horizontal/vertical walls that are orthogonal to the edges of the screen and the scan line of the display.

Diagonal orientation did have a place in the design of early maze-like games, but not in simple 2D fields -- instead, it emerged through isometric games that introduced diagonal motion at the same time it challenged the picture plane through the pseudo-3D effect of isometric perspective. In the arcade, two isometric games emerged in 1982: Q*bert, an completion/avoidance platform on an isometric pyramid, and Zaxxon, an obstacle-racer emphasizing pseudo-3D elements. Neither of these game designs is particularly maze-like.

Later games did incorporate maze-like obstacle elements into isometric gameplay. Part of this limitation was due to available resolution at the time, particularly on home systems. Graphics with isometric effects took up a lot of space, which limited the ability to design large complex level structures like mazes on a unified field. Thus, when Ant Attack (1983) and Marble Madness (1984) introduced isometric obstacle course elements on a large field, both did so using scrolling.** By contrast, Knight Lore (1984) follows the design pattern of Adventure for the VCS, showing a close-up view of one room at a time in a maze-like castle.

(** Ant Attack also alters the camera view when navigating behind objects.)

Even here, however, we see how extremely different aesthetic of early isometric maze games was when compared to the 10 Print output. While both have a dynamic diagonal orientation, the move from 2D design to volumetric pseudo-3D space leaves them, visually, worlds apart.

Patterns

Diagonals

10print-diagonal.png
464 × 366 pixels
10 PRINT CHR$(109+RND(1)*2); : GOTO 10

By contrast, the maze output of 10 PRINT is oriented diagonally, giving it a distinctive visual look.

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.

10 PRINT CHR$(109+RND(1)*2); : GOTO 10

Orthogonal Weave

10print-orthogonal-weave.png
464 × 366 pixels
10 PRINT CHR$(102+RND(1)*2); : GOTO 10

There are no other two characters in the PETSCII 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

Corners

10print-elbows.png
464 × 366 pixels
10 PRINT CHR$(108+(INT(RND(1)+.5)*3)); : GOTO 10

Randomly selecting corner pieces such as "L", on the other hand, simply turn the image into a honeycomb.

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.

Four Walls

10print-orthogonal-rough.png
464 × 366 pixels
10 PRINT CHR$(181+(INT(RND(1)+.5)*3)+(INT(RND(1)+.5))); : GOTO 10

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

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.

Two Walls

10print-orthogonal.png
464 × 366 pixels
10 PRINT CHR$(181+(INT(RND(1)+.5)*3)); : GOTO 10

(...discuss how 181/184 is the best approximation of the classic orthogonal game aesthetic, but it is still less elegant than 109/110 -- we have to carefully force the random result to an INT before introducing an offset multiplier, which adds length to the line, conceptual complexity to the demo, AND as a result we get a less visually interesting output -- that is, it is both less formally dynamic as a design and less contextually unexpected).

10 PRINT CHR$(181+(INT(RND(1)+.5)*3)); : GOTO 10

See Also

Notes

Additional Images

Game-Pac-Man-arcade-(1980).png
224 × 288 pixels
Pac-Man (1980 arcade) -- a maze-like field of partitions must be run while being chased by ghosts
Atari2600-Adventure-v2-(vgmaps).png
1920 × 2317 pixels
Map of Adventure for Atari 2600 (VGmaps)
Personal tools