EGGG: The Extensible Graphical Game Generator

EGGG: The Extensible Graphical Game Generator
Jon Orwant

Sc.B. Computer Science and Engineering, MIT (1991)
Sc.B. Cognitive Science, MIT (1991)
S.M. Media Arts and Sciences, MIT (1993)

Submitted to the Program in Media Arts and Sciences, School of Architecture and Planning

in partial fulfillment of the requirements for the degree of

Doctor of Philosophy in Media Arts and Sciences

at the

MASSACHUSETTS INSTITUTE OF TECHNOLOGY

February 2000

© 2000 Massachusetts Institute of Technology. All rights reserved.

    
    
    
    
    

Author ___________________________________________________________________

Program in Media Arts and Sciences, School of Architecture and Planning
November 19, 1999

Certified by _________________________________________________________________

Walter Bender
Senior Research Scientist
Program in Media Arts and Sciences
Thesis Supervisor

Accepted by ______________________________________________________________

Stephen A. Benton
Chairman, Department Committee on Graduate Students
Program in Media Arts and Sciences

Thesis Committee

Thesis Supervisor ________________________________________________________

Walter Bender
Senior Research Scientist
Program in Media Arts and Sciences

Reader ___________________________________________________________________

Mitchel Resnick
Associate Professor
Program in Media Arts and Sciences

Reader ___________________________________________________________________

Murray Campbell
Research Scientist
International Business Machines

Table of Contents

                EGGG: The Extensible Graphical Game Generator
                
                                Thesis Committee
                Table of Contents
                Preface
                                About This Dissertation
                                Acknowledgments
                Chapter 1: Introduction
                                What's In A Computer Game?
                                Decoupling Hard from Soft
                                The Tradeoff
                                                Circumventing the Tradeoff: Patching and Burrowing
                                Games As A Domain For Automated Program Generation
                                Design Principles: Languages, Overengineering, and Brevity
                                What This Dissertation Is And Is Not
                                Related Systems
                                                The Programmer's Apprentice
                                                METAGAME
                                                Commercial Products
                                                                GURPS
                                                                Klik & Play
                                Related Fields
                                                Game Theory
                                                Complexity Theory and Game Automata
                                                Condon's Probabilistic Game Automaton
                                The Eight Games
                Chapter 2: Anatomy of a Game
                                A Structural Categorization Of Video Games
                                A Designer's Taxonomy of Games
                                                Frenetics
                                                History
                                The Six Types Of Synchrony
                                Movement
                                                The Move
                                                The Phase
                                                The Turn
                                                The Round
                                                The Step
                                Tangibles
                                                The Board
                                                                The Grid
                                                                The Graph
                                                                The Canvas
                                                                Topology
                                                                Board Summary
                                                The Piece
                                                                More About Color
                                                Compartments
                                                                The Hand
                                                                The Bag
                                Abstract Facets of Play
                                                The Genre
                                                Information
                                                                Referees
                                                Endings
                Chapter 3: The Physiology of EGGG
                                Game Descriptions
                                                How Does EGGG Know That Poker Is A Game Of Rounds?
                                                How Can EGGG Assume That The Cards Are In Descending Order?
                                                How Did EGGG Know To Generate All Those Buttons?
                                A New Game: Deducto
                                                Board Initialization
                                                Functions
                                                Assertions
                                                Variations
                                                A Sample Variation: Color Deducto
                                Software Architecture
                                                Why Perl?
                                                Running EGGG
                                                The Parser
                                                                Ambiguity in the EGGG language
                                                                Interactive Parsing
                                                The Engine
                                                                The Game
                                                                The State
                                                Modules
                                                                Sorting
                                                Timing
                                Documentation
                                                Documenting The Program
                                                Documenting The Game
                                Naming
                                                Abbreviations
                                Error Recovery
                Chapter 4: Enemy of the Game State (Computer Opponents)
                                A Generic Minimax Procedure
                                A Generic Static Evaluator
                                                Estimating Piece Power
                                                Estimating Piece Motility
                                                Estimating Piece Rank
                                                Estimating Piece Rarity
                                                Estimating Piece Expected Value
                                Competition versus Cooperation
                                Common Strategies
                                                Analyzing Strategies With Hidden Markov Models
                                                                Rock Paper Scissors
                                                                Nothing Beats Rock
                                                                Randomness
                                                                Switcheroo
                                                                Generalized Tit For Tat: The Vendetta
                                                                Sacrifice
                                                Synthesizing Strategies
                                                                Freedom As A Universal Strategy
                                                                You Cut, I'll Choose
                                                Hypotheses
                                                                Estimating Player Ability
                                                Bluffing
                                                                Making Interesting Moves
                                                                Probabilistic Bluffing
                                Garnering Trust
                Chapter 5: Beauty on the Inside (Graphic Layout)
                                The Frame
                                                The Window
                                                The Menu Bar
                                                                The File Menu
                                                                The Preferences Menu
                                                                The Help Menu
                                                The Status Line
                                                                The Message Field
                                                                Play Again
                                                                The Score Field
                                The Board
                                                The Geometry Manager: Packing, Placing, and Gridding
                                                Board Shape
                                                Squares
                                                                Checkerings
                                The Pieces
                                Color
                                Get Your Game Face On
                Chapter 6: Connect the Bots (Networking)
                                The Henhouse, And Stateless Connections
                                                Mail Generation
                                                Global History and Adaptive Learning
                                Multiplayer Networked Games, And Stateful Connections
                                                A Sample Networked Game: Mammon
                Chapter 7: Conclusion
                                What We've Learned
                                                Abstraction Revisited
                                                Similarities Revisited
                                                                Similarities of Structure
                                                                Similarities of Strategy
                                                                Similarities of Appearance
                                                Complexity
                                                Tips for Game Designers
                                                                Computer Opponents Should Act Smarter Than They Are
                                                                Make Mistakes
                                                                Include Easter EGGGs
                                                Measuring Playability
                                                                Empirical Evidence Of Playability
                                                                Why There Can Be No Good Measure Of Playability
                                                Making Work Into Play
                                                Lessons Learned
                                What To Do Next
                                                Text Adventures
                                                Speed
                                                How About Some Real Graphics?
                                                What About Sound?
                                                Other Domains
                                                Scriptability and Glass Boxes
                                                Open Source Games
                Bibliography
                Appendix A: EGGG Installation Instructions
                Appendix B: Sample EGGG Games
                                Rock Paper Scissors
                                Tic Tac Toe
                                Poker
                                Crossword
                                Deducto
                                Tetris
                                Chess
                Appendix C: The EGGG Grammar
                Colophon
                Biographical Note

Preface

About This Dissertation

This dissertation is part of an ongoing project called EGGG, the Extensible Graphical Game Generator. As its name suggests, EGGG is a system that creates computer games, and the thesis behind the dissertation is that there exist sufficient commonalities between games that such a software system can be constructed.

In plain English, the thesis is that games are really a lot more alike than most people imagine, and that these similarities can be used to create a generic game engine: you tell it the rules of your game, and the engine renders it into an actual computer game that everyone can play. You can play with EGGG if you want; details are given in Appendices A and B.

In the Introduction, I talk about what drove me to create EGGG, and how my work differs from what others have done.

Anatomy of a Game discusses the common components of games that made this dissertation possible.

In the Physiology of EGGG, I explain the design of the EGGG parser and engine. I also describe the user experience of creating EGGG games: what novices have to know about programming, and what they don't.

Enemy of the Game State explores how EGGG builds computer opponents that can play games designed by users -- including how they can bet and bluff.

Beauty on the Inside: Graphic Layout explains how EGGG generates the graphical elements of computer games.

Connect the Bots: Networking examines the networking components that EGGG uses to link computer games together.

Conclusion and Analysis concludes the dissertation and suggests future research directions.

The Bibliography lists relevant sources for games, computer gaming, game variations, and game creation.

Appendix A: EGGG Installation Instructions describes how to install and use EGGG.

Appendix B: Sample EGGG Games contains some EGGG files for some popular games to demonstrate EGGG rulesets.

Appendix C: The EGGG Grammar contains a Backus-Naur specification of the EGGG language.

Acknowledgments

I've spent a substantial portion of my life at the MIT Media Laboratory, and above all, I would like to thank Walter Bender for the environment he's somehow managed to maintain during all of that time. I defected from the MIT AI Lab in 1988 because Walter gave me the chance to hack image processing on the Connection Machine, and soon became enthralled by the freedom and intellectual camaraderie of the Terminal Garden and now the Cube. Since then, I've worked on news, user modeling, a multitude of other projects, and finally games, the subject of this dissertation. Walter combines a love of ambitious ideas with a laid-back attitude -- an unusual combination, and I cannot imagine a better advisor.

Thanks to the other members of my thesis committee, Mitchel Resnick and Murray Campbell, for their helpful insights and suggestions.

Thanks to my friends who contributed, knowingly or not, to some of the ideas in this dissertation: Sandy Aronson, Alan Blount, Amy Bruckman, Richard Christie, Diego Garcia, Carolyn Grantham, Kyle Pope, Kimberly Scearce, and Sekhar Tatikonda.

I'd like to thank the many members of the Perl community that have provided me with innumerable distractions during my Ph.D.: David Blank-Edelman, Tom Christiansen, Mark-Jason Dominus, Jarkko Hietaniemi, Tuomas J. Lukka, John Macdonald, Linda Mui, Chris Nandor, Andy Oram, Tim O'Reilly, Madeline Schnapp, Mike Stok, Nathan Torkington, and Larry Wall. In particular, Nathan Torkington and Tom Christiansen were a continual source of intellectual amusement. Thanks to the officemates who've put up with my folding bike and my ten pounds of silly putty: Judith Donath, Doug Koen, and Marko Turpeinen. Other members of the Media Lab provided camaraderie, inspiration, and help: Nathan Abramson, Bill Butera, Pascal Chesnais, Klee Dienes, Scott Fullam, Dan Gruhl, Roger Kermode, Jill Kliger, Hakon Lie, Michelle McDonald, Chris Metcalfe, Warren Sack, Laura Teodosio, Sunil Vemuri, and Chris Verplaetse. Thanks to Nicholas Negroponte for creating the Media Lab, and to Felice Gardner and Linda Peterson for making it function so smoothly.

Finally, thanks to Robin Lucas, and to my parents, Jack and Carol.

Chapter 1: Introduction

I think the thing I take the most pride in about Spacewar is that it got so many people hooked on computer programming. It caught a lot of eyes and got a lot of interesting people asking, "How do you do that?"

Steve Russell, author of Spacewar, the first video game.

There are obviously similarities between games. Are those similarities sufficiently numerous and deep that a system can be constructed which turns a written description of a game into a playable program? This dissertation is an attempt to answer that question in the affirmative. In support of this thesis, a system that translates the rules of a game into a program was built: EGGG, the Extensible Graphical Game Generator.

In this chapter, I'll describe what motivated me to create such a system, and survey related work. First, we'll look at the breadth of computer games that exist today.

What's In A Computer Game?

Frenetic shoot-em-up games like Doom and Quake sell millions of copies and tax the abilities of today's most powerful personal computers. Considerably less demanding games like the ubiquitous Windows Solitaire occupy thousands of hours of idle (and not-so-idle) time; Napoleon played the old-fashion version while in exile on Elba. Supercomputers like IBM's Deep Blue defeat the world's greatest human chess player. Internet users circumvent U.S. gambling laws by wagering in Antigua.

Each of these four experiences is considered "computer gaming", even though they differ in who plays them, and why, and how. Games like Doom are graphic-intensive, often violent, and players move from location to location in a virtual world. (In spite of what some detractors say, some of these games have challenging puzzles and intricate narratives.) The various Windows Solitaire games are played with picture-for-picture identical 52-card decks. The heart of Deep Blue is the same as every other chess-playing program: a minimax engine coupled with a static evaluator and a library of opening moves. Gambling games, whether online or off, involve unpredictable outcomes.

In an attempting to categorize computer games, we could treat each of these four scenarios as representative of an entire genre of games:

  

Is this a good categorization? No; many games are missing. Where's tic tac toe, or Tetris? Here's another categorization:

This is still not up to snuff. Some of these categories overlap: is poker a card game or a gambling game? And who cares about a taxonomy of games, anyway?

Programmers do. Once you arrive at a comprehensive categorization of games, you can begin to make the leap from merely categorizing games to drawing inferences about them -- and ultimately, to helping people create them. Here's an elaboration of those categories:

Now we're getting somewhere. This categorization is still quite unclean -- the first category has to do with process, the middle two with structure, and the final category with function -- but it serves to illustrate what I'm talking about when I say that there are similarities between games. These similarities are all obvious, but in Anatomy of a Game (Chapter 2) we'll develop a more comprehensive taxonomy of games, arriving at some far less obvious (but just as useful) observations. For the remainder of this chapter, let's just assume that such a taxonomy exists.

Decoupling Hard from Soft

Before the Atari 2600 debuted in 1978 (and its obscure predecessor, the Fairchild Channel F in 1976), videogames were embedded in chips inside chunks of wires and plastic called game consoles. When you tired of whatever games were burned onto the chip, you stopped using the system entirely.

The 2600 (also called the "Atari VCS") revolutionized the game industry because of cartridges -- no longer were chunks of plastic and wires only able to play a fixed set of games. When you got tired of a cartridge, you'd just buy a new one, for a fraction of the console price.

This decoupling of hardware and software was made possible by simpler and more flexible hardware components. The decoupling is what made home video game systems a commercial success, because someone plunking down two hundred dollars wouldn't be restricted to a small fixed number of games. He knew that as long as tens of thousands of fellow gamers had consoles just like his, that new games would be developed for it.

So what's the next step? We can take the decoupling further, thanks to simpler and more flexible software components. Instead of decoupling hardware from software, what we can do is decouple a game's implementation (the "hard software") from the rules of play (the "soft software"). This is what EGGG does, and it does it by incorporating assumptions about game play into a program that translates the rules of play into a fully-functioning game.

The Tradeoff

Programming is hard. But programming for a particular domain needn't be -- when you can build assumptions about the domain into the language. And more to the point, those assumptions can be built into whatever system (compiler, translator, interpreter, or combination of all three) that ultimately turns the program into something you can run.

Let's say your domain is widgets. If you know your clientele will be designing widgets, you could create a software package called a Widget Designer that lets them specify a recipe for building their widget. The recipe can be viewed as a program, and the Widget Designer is a translator that transforms the program into something more complex.

Designing a widget might not seem like programming for two reasons. First, the Widget Designer might be easy to use, and people are unfortunately conditioned to think that programming has to be difficult. Second, the range of behaviors permitted by the Widget Designer will be severely limited: you won't be running spreadsheets or calculating differential equations with it. You just design widgets. There's a tradeoff between expressivity and convenience; the Widget Designer chooses convenience.

Another example: drawing pictures on a screen used to be hard. In the old days, graphics libraries gave you ways of drawing points and lines and circles, and not much more. Creating usable applications with buttons and pictures and scrollbars was tough -- but you had enough low-level control over what the electron gun shot to the CRT that you could do anything. You could be expressive, but it wasn't very convenient. Later, graphics toolkits took away the drudgery, but they also took away some of the low-level control. Applications were developed faster, but they all had a certain similarities of appearance. In Xlib, you could do anything. In Motif, you can do almost anything, and people would look at the result and say, "Oh, you must have used Motif." The same is true of other visual programming environments, like Visual Basic and NeXTSTEP's Interface Builder.

You can see the same phenomenon with HTML. People used to speak about "HTML programming", but that phrase is becoming more and more rare as programs like ColdFusion are used to generate HTML automatically. You don't hear people saying "Oh, you must have used ColdFusion" when they see those web pages, but that's only because web browsers affect how web pages appear.

Every system that helps you build things has to make a tradeoff between the variety of things it lets you build, and the ease with which you can build them. EGGG is an attempt to help people create programs, but it is not a generic programming assistant like the Programmer's Apprentice, described later. Nor is it a visual development environment that lets people drag and drop elements into place, which would permit only a small variety of games.

Circumventing the Tradeoff: Patching and Burrowing

NeXTSTEP's Interface Builder lets you construct applications by dragging and dropping components (buttons, frames, text boxes, and the like), and by establishing links between them. As you would expect, the applications you construct all have the same look and feel; there's only so much customization you can do. But under the hood, what the Interface Builder does is generate Objective C code. Programmers who want to specify the behavior of the component do so in code. The look and feel is still constrained, but the system lets you patch the generic output by writing your own code.

Other systems let you burrow down into internals. For instance, languages like Perl and some versions of LISP let you implement chunks of code in another lower-level language when speed is paramount. Browsers like Netscape, web servers like Apache, and paint programs like the GIMP and PhotoShop provide hooks so that developers can write code for features not provided by the prepackaged application.

EGGG lets you both patch and burrow. Details are provided in Chapter 3, the Physiology of EGGG.

Games As A Domain For Automated Program Generation

What is the right size domain for creating an automated program generator? If the domain is too broad, the assistant won't be able to help much, because it won't be able to infer the intentions of the would-be programmers. If the domain is too narrow, the assistant won't be necessary. No one needs help creating calculator programs, because there aren't that many different programs to create.

Games have several advantages as a domain:

So how can users communicate their intentions to EGGG? They do so by codifying the rules of their game in a pseudo-English language. We call this the EGGG language, and turn to it in the next section.

Design Principles: Languages, Overengineering, and Brevity

It's an uncertain world out there, and classically trained programmers know this. They know to design for scalability: if your program operates on a thousand pieces of data today, it might be called upon to manipulate a million pieces of data next year. And designers decide that since they can't know what protocols or standards or data formats will be around in a year, they create abstractions for those protocols and standards and data formats.

The unfortunate result is that many designers overdesign, abstracting out components too much, and in so doing slow down their programs (that's bad) and make them harder for others to understand (that's worse). The abstractions that seem so clear to a designer are opaque to the next person who has to use the program. When designers assume that their users share their tenacity and attention to detail, the result is bad software.

But this is the wrong approach. The right approach is to be able to program quickly, so when that new protocol arrives, you can throw away your old code and begin anew. The right approach is to create lots of tiny tools that do one thing well, so you can combine them in whatever pipeline you need.

Consider the Berkeley socket library used for networking computers together. The library doesn't do very much: it just creates a connection between two computers on the Internet, or between two processes on the same Unix system. Yet because the designers wanted a uniform interface to both, they ended up with a system that requires you to specify which connection you want. Some of the arguments you have to provide make no sense if you're connecting two computers, and others make no sense if you're connecting two processes. Nowadays Berkeley sockets are used almost exclusively for Internet connections, because there are better ways to communicate between processes on the same computer, like SysV IPC and threads.

What is the right level of abstraction for games? As with the Berkeley socket library, there's a danger here. Abstractions are all well and good, but designers shouldn't force users to cope with their particular organization of the world unless it's intuitive. EGGG disguises its abstractions behind terms with common usages, providing a simple language through which game designers can communicate their intentions to the system.

So "EGGG the engine" and "EGGG the dissertation" include "EGGG the language": a high level language that lets users describe games in as few words as possible while still retaining the precision that the EGGG engine needs to render the language. The language is expressive (you can create nearly any kind of graphical two-dimensional game) and and concise (statements are short and powerful, so that debugging is easy).

The importance of brevity shouldn't be underestimated. It's good to be able to see all of the game on a single page -- you never have to visit different files, or even scroll up and down. For instance, here's how one tells EGGG that players alternate turns in chess:

        turns alternate

Here's how one stipulates that the deal moves clockwise in poker:

        deal moves clockwise

Every attempt was made to mimic language that people would normally use to describe games. That's not always possible, of course, and there is a particular danger involved with systems that accept natural language as input: users tend to assume that the parser is much more sophisticated than it actually is [Brennan 90]. Here's the description of a stalemate in chess:

        Stalemate means turn(P) and no moves(P) => tie

This can be read as "A stalemate is a situation where it's P's turn and he doesn't have any moves. If that happens, the result is a tie." This single statement triggers EGGG to do a number of tasks:

  1. Create a subroutine called Stalemate. When EGGG encounters Stalemate means, it sees that Stalemate is capitalized. Lowercased words have special meaning to EGGG; uppercased words are terms that have a per-game or per-rule meaning.

  2. Execute the subroutine at appropriate times. Because the subroutine mentions a turn, it will be executed at the beginning of each turn. Checkmate is checked for at the end of each turn; that's why the Stalemate definition needn't verify that the player isn't in check. If the game designer preferred precision to brevity, the rule could have been written this way:

        Stalemate means turn(P) and no moves(P) 
                  and not Attacking(Q, King) => tie
    

  3. Have the subroutine set a variable, P, to whoever's move it is. Different single letters mean different things. P always means a player, and because it's capitalized, it means a particular player. Had it been p instead, EGGG would have generated a loop that cycled through all players. Of course, in chess there are only two players, but in a game like poker, the rule we saw earlier, deal moves clockwise would indicate how the loop would proceed.

  4. Have the subroutine check to see if P has any available moves. EGGG will already have generated a subroutine that enumerates all of the moves available for each player. no moves(P) causes that subroutine to be invoked, and immediately returns zero if any moves are found.

  5. If there are no available moves, invoke the tie() subroutine. EGGG will already have created a tie() subroutine on a previous pass through the game description; any mention of "tie" triggers that behavior. If the subroutine gets to this point, it must be player P's turn, he must have no available moves, and he must not be in check, so a stalemate occurs and the game is tied.

These game descriptions are stored in single files. The description is very concise: the rules of poker require 19 lines, and even chess requires only 81 lines. The ordering of the lines within the file is immaterial.

There is plenty more to the EGGG language than what is shown here, and we'll see more examples throughout this document. The EGGG language strives to approach the brevity and simplicity of human writing.

When there is ambiguity in the language (in poker, "draw" means to receive cards and "rank" means the strength of a hand, while in chess, "draw" means to tie the game and "rank" means the y-coordinate) EGGG makes its best guess. If it's really stumped, it queries the user.

It is assumed that most users will create their own games by copying game description files from EGGG's central repository and modifying them. As one would expect, variations on traditional games are easier to create than entirely new games.

The design criteria for the EGGG language and engine are the following, in approximately decreasing order of importance:

Game descriptions should be brief.

Easy games should be easy to generate, and hard games should be possible to generate.

The EGGG engine should contain as little a priori information about particular games as possible.

It should be easy to create variations.

The EGGG engine and the games that it generates should be maximally portable.

The games generated by EGGG should be easy to modify.

EGGG shouldn't take a long time to generate games, and the games that it does generate shouldn't run so slowly that playability is affected.

What This Dissertation Is And Is Not

EGGG is not about the "who" or the "why" of games, only about the "what" and "how". It is an exploration of the similarities between traditional games like board games and card games, and how those games are realized in computer programs. The thesis underlying the dissertation is that those similarities are sweeping enough that it is possible to construct a system that generates a computer game from its distilled essence: the rules of play.

This dissertation is not about children, society, gender, culture, education, or any particular community of game players. While there are many interesting research topics in these areas, EGGG's focus is on the similarities between games and the resulting implications for the mechanics of computer game creation. This dissertation offers no opinion about what sort of games should be created, nor about the effects of any game -- good or bad -- on the people who play them. However, we do note that Monopoly sends a rather brutal message to would-be industrialists, and no game generated by EGGG can be as dangerous as the fluoroscopes found in the earliest penny arcades, where medically uninformed amusement seekers paid for the ability to X-ray the bones in their hand.

The games that EGGG creates are those that lend themselves to concise descriptions: the simpler the game, the better. It is best-suited for creating games involving pieces and boards and cards and icons, and not well-suited at all for games like Mortal Kombat, or Doom, or sports simulations. The graphical sheen of games like Mortal Kombat and Doom is intrinsic to their appeal, and EGGG can't supply artistry. Sports simulations might not require so much polish (although the successful ones certainly do), but the sheer number of rules involved in any sport makes it difficult to write the description in such a way that EGGG could know how to render it. If you're creating a baseball game, you can't just tell EGGG to create bases. You have to tell it how far apart to make the bases, and the pitcher's mound, and the outfield wall. You'd have to describe -- algorithmically -- the paths of the different types of pitches. You'd have to express the speeds of the pitches, and maybe even of the runners and the bat. And so on. It is impossible to describe baseball concisely to EGGG, because it is impossible to describe baseball concisely.

Theoretically, EGGG could create any game, since you can always burrow down into the underlying Perl programming language. However, in this dissertation we will restrict ourselves to games that are graphical, but not graphics-intensive or overly complex.

One could argue that these are the best games to study because they are the most timeless: card and dice and board games have been around for centuries, so they best epitomize gameness. I don't agree with this; while arcade games have eclipsed "classic" games, it's unclear whether this is because of changing tastes of youth exposed to incessant marketing or because those games really are more fun to play. It's quite possible that if the ancient Romans had had Nintendo, the empire would have collapsed a lot sooner. I make no claims about the superiority of some games over others, nor do I claim that game play is an intrinsic part of intellectual life. Gaming is less universal than many suspect; despite the best efforts of anthropologists, no one has been able to stake a claim for the universality of games across cultures [Avedon 71].

However, game play is nearly universal among computer scientists, and in the next section we turn to other systems pertaining to computer game creation and automated programming assistance.

Related Systems

The Programmer's Apprentice

Before I came to the MIT Media Laboratory, I worked at the MIT Artificial Intelligence Laboratory on the Programmer's Apprentice, an automated programming effort headed by Charles Rich and Richard Waters. The Programmer's Apprentice project yielded a series of intelligent assistants for software engineers: programs that helped programmers formalize requirements, create and edit programs, and analyze the programs they created.

EGGG differs from the Programmer's Apprentice in that its goal is simultaneously both more and less ambitious. EGGG is more ambitious in the sense that it is an attempt to create something that people with a minimum of programming skill can use: its target audience is not programmers, but people who want to create computer games -- people who may not have much (or any) programming experience. EGGG is less ambitious in that it drastically constrains what type of systems you can create. EGGG does not do requirements analysis or program verification; it simply generates games.

METAGAME

METAGAME [Pell 92] is similar in spirit to EGGG, but arose from a different premise. For a long time, chess was considered a formidable problem for AI. The reasoning was that any program that could beat an expert player, or even a competent one, would surely possess some of the intellectual capacity of a human. Yet Deep Blue and other successful chess programs demonstrate that this is not necessarily the case: chess programs have gotten better largely through improvements in computer power and in hardwiring knowledge of chess into the architecture. Put another way, chess is not AI-complete: just because a program is an intelligent chess player doesn't mean that it's intelligent.

Barney Pell's METAGAME strives to bring the AI back to computer game playing. He suggests that the test of a computer's game-playing prowess shouldn't be chess, or even Go, but the ability to play a game with no a priori knowledge. To this end, Pell develops a formalism for representing "Symmetric Chess-Like" (SCL) games, including a proof that all finite two-player games of perfect information (that is, games that can be represented as game trees) can be represented using his formalism. A computer program that can play aribtrary SCL games is called a metagame player.

Pell goes on to develop an evaluation mechanism for metagame players and a program that generates games that are similar to chess, but with random rules. He then tests his METAGAMER program against several such games and reports the results.

METAGAME is a mathematical framework for developing programs that can play games well, in contrast to EGGG, which is a system for developing games. Nevertheless, METAGAME has influenced the design of EGGG in a few ways. In particular, EGGG uses logical predicates that represent changes in the state of game play, cf. [Pell 1993], p. 104:

In addition, these predicates are all logical, in that state is represented as a relation between two variables, StateIn and StateOut, instead of a global structure which is changed by side-effects (as in a current board array used in many traditional playing programs). This enables a program to use the predicates in the domain theory in both directions. For example, by constraining SOut in Figure 12.2 instead of SIn, a program can determine possible predecessor states, thus using the rules "in reverse" to find all the positions which would have been legal before a given move.

EGGG has global structures that are changed by side effects, but it also has "actions" that are passed around, composed, concatenated, and hypothesized about, just like METAGAME.

Commercial Products

There have been several commercial "game construction kits", but they are typically not very expressive: the range of the games you can generate is quite limited. Bally's Pinball Construction Kit, for instance, let you adjust the number and placement of flippers, and it let you change gravity, but at the end of the day all you could create were slightly different variations on the same pinball game. Many game constructions kits are like this.

In this section, we will briefly discuss two commercial products that have broader approaches to game construction: GURPS and Klik & Play.

GURPS

Steve Jackson's GURPS (Generalized Universal Role Playing System) is an ambitious attempt to generalize role-playing games into a single set of all-encompassing rules. It focuses on dice-and-paper simulations and therefore is only tangentially related to computer games, but faces the same problem EGGG does: how do you partition the universe of games, and what are the proper levels of abstraction? For instance, GURPS has a single unifying architecture for all combat, but overrides that architecture when certain conditions occur (for instance, when the combatants are in water). Parallels exist for EGGG: it makes guesses about games and then overrides those guesses as more specific rules are found.

GURPS is a reference manual; it is essentially a compendium of information to help you create your own simulation. It does not create the simulation for you, nor can it supply the creativity that every successful role-playing game requires. (EGGG can't supply the creativity either, of course.)

Nevertheless, GURPS is an ambitious work, and it is a philosophical ancestor of EGGG. Reading it, you can sense Steve Jackson's frustration as an avid scenario designer who recognized the similarities between the different milieus: protecting your body with chain mail against an arrow is not unlike protecting your body with a Kevlar vest against a bullet. In each case you have to establish probabilities that the target will be able to dodge the projectile (the bulkier the protection, the slower the target can react), the probability that the projectile will penetrate the target (which depends on the speed and force of the projectile), and the probability that the wounds caused will be fatal. That, in turn, depends on the health of the target, and so on. Nor is GURPS entirely about combat; it provides guidelines for a scenarios as obscure as loading cargo onto an aircraft without the aircraft having to land.

Implicit in GURPS's design are decisions about when to generalize (social traits that are universal, and combat rules that apply to all milieus) and when not to (a character's skill at xenology -- the knowledge of alien races -- which is unique to space-age milieus). However, GURPS' generalizations are all obvious: you can fight in any game, but laser weapons have no place in Westerns.

Klik & Play

Klik & Play, originally created by Europress Software and distributed in the U.S. by Maxis, is a game construction kit that has met with some commercial success. In contrast to GURPS, Klik & Play is more than a reference guide: like EGGG, it creates computer games.

Klik & Play is aimed at children. It's a visual application builder that provides you with predefined objects -- a running man, walls, monsters, and the like -- and lets kids assemble them into video games. There is an "event editor" that lets you define complex actions -- but these actions are all essentially simple conditionals that depend on the other objects. Klik & Play games aren't Turing complete.

The video games all look pretty much the same: in J.C. Herz's categorization of games (see The Game Space in Chapter 2), they are all "shooters", a subgenre of action games. Herz's genres, in turn, are all subgenres of video games. You can't make crosswords, or poker, or chess, with Klik & Play.

The system touts its object orientation, which only means that its monsters and walls and objects have independent picture, animation, and movement properties. Klik & Play is good, but it is not a universal game generation engine. In the tradeoff between expressivity and ease, it favors ease to a much higher degree than EGGG.

Related Fields

Game Theory

EGGG is about games, and EGGG is about theory, but EGGG is only tangentially about game theory. Game theory is a branch of mathematics (some would say economics) that deals with human interactions where the outcomes depend on the interactive strategies of two or more people with opposing motives. Game theory began with a simple betting card game called le Her, in which two players each drew a card and could optionally exchange the card for another based on simple rules. An optimal strategy for playing le Her was discovered in 1713, and that optimal strategy was applied to all two-player deterministic games with the Generalized Minimax Theorem by John von Neumann in 1928.

One well-studied game in game theory is the Prisoner's Dilemma, which has this scenario: Two criminals, in cahoots, are arrested for the same crime. They are placed in separate interrogation booths where they can't communicate with one another, and each is encouraged to confess to the crime. If one criminal confesses and indicts the other, the confessor gets a light sentence while the holdout does heavy time. If both confess, they both get a heavy sentence, but not as heavy as a single holdout. If both hold out, they both get a light sentence -- but not as light as a single confessor.

What should a criminal do if he wants to minimize his jail time? Tough question, and this is the bread and butter of game theory. Active research topics include variants of this scenario. What if there are repeated trials? What if they are able to communicate? What if they aren't rational? What if there are three criminals instead of two? What if the criminals aren't sure of the penalties? What if one criminal is less averse to jail than the other? And so on, applied to many other scenarios: arms control, marriage, patents, college applications.

Game theory has nothing to do with actual computer game creation; it is only about strategies for making the best decision, in games where it's possible to reason about what a best decision is (as opposed to arcade games or crossword puzzles). EGGG uses the results of game theory when it generates computer opponents for a game, but the strategies it uses are not the cutting-edge game theory research. The strategies are discussed in Chapter 4, Enemy Of The Game State.

Complexity Theory and Game Automata

It's possible to view games as problems to be solved. Can the first player guarantee a win in tic tac toe? No. Can the first player guarantee a win in chess? No one knows; it's a problem yet to be solved. You can try to solve this problem with brute force, but you'll fail. There are thought to be 10120 chess games, and there are thought to be about 1070 protons in the universe. If every proton in the universe were evaluating a trillion chess boards per second, you still wouldn't be able to answer the problem before the universe ended.

Complexity theory is the branch of computer science that analyzes how hard problems are to solve. If a problem can be solved in polynomial time, it is said to belong to P. (More precisely, P is the class of languages that are decidable by some Turing machine in a number of steps that is bounded by a polynomial.) If a problem can be solved by a nondeterministic Turing machine in polynomial time, it belongs to NP. Every problem in P is obviously in NP as well. It has not yet been proven that there are problems in NP that aren't in P as well, although it's a good bet. Much of complexity theory involves proving that a given problem can be "reduced" to a known problem in P or NP, where "reduced" means, roughly, "translated into, if you change how you represent the problem in a nonintrusive way."

Garey and Johnson [Gar 79] list the known complexities of hundreds of problems, including crossword puzzle construction (which is NP-complete), checkers (PSPACE-hard), and Go (PSPACE-hard). This translates roughly into:

   

These results may seem far removed from the practical concerns involved in determining a game designer's intentions and converting them into working programs, and for the most part they are. When a typical game opponent is created, its designer has a rough idea of how complex the problem is. Perhaps he can't determine it to the satisfaction of a theoretical computer scientist, but he knows whether a brute-force approach is feasible or not, and he can choose an appropriate strategy accordingly. EGGG doesn't have that luxury.

Condon's Probabilistic Game Automaton

Condon's Computational Models of Games [Con 89] notes that "Traditional models of computation, such as Turing machines, do not reflect the game-like properties of many problems of interest to computer scientists. On the other hand, the traditional approach of mathematicians to game theory did not focus on questions regarding the computational complexity of the game."

To rectify this, Condon defines a theoretical construct called a probabilistic game automaton that combines elements of several game-theoretic models. The probabilistic game automaton is able to model features of games that traditional game theory can't accommodate: randomness, secrecy, and limited resources of the players.

The different types of probabilistic game automatons can be classified along three dimensions:

Universal steps Coin-tossing steps Degree of information
B (bounded) Z (zero)
U (unbounded) P (partial)
C (complete)

In Condon's analysis, every probabilistic game automaton has at most one symbol from each of the left and center columns, and exactly one symbol from the right column. The left column, Universal steps, has only a single symbol, the "for all" operator. Universal steps are situations where a player has a move available to him without any randomization involved. The middle column, Coin-tossing steps, are situations where what a player does is determined randomly. B or U are chosen depending on whether the automaton needed to model the game is finite or infinite. The right column, Degree of information, indicate how much information a player reveals. A completely secretive game reveals zero information, Z; a game in which the player reveal some information is P, and a game where no information is concealed is C.

These games are all between two players. Multiplayer games like poker, or single-person games like crosswords, cannot be modeled by probabilistic game automatons. And games that depend on hand-eye coordination can't be easily modeled by any automaton at all.

The Eight Games

Computer science has a narrower view of games than the broader population, and so for exploring the similarities between games and describing EGGG's capabilities, we'll focus on a representative core of eight games that, taken together, portray the versatility of EGGG:

EGGG can generate an infinite number of games, and it can generate games that are substantially different from these eight, but in the interests of having concrete examples that can be continued throughout the discussion of EGGG, we will restrict ourselves to these.

In the next chapter, we'll take a deeper look at the similarities between games that made EGGG possible.

Chapter 2: Anatomy of a Game

[Game] genres do seem to hold together in the middle, weathering revolutions in chip speed and licensing. It's like the proverbial fourteen novels that have been endlessly rewritten throughout history. The costumes change, but the basic matrices remain. There are certain things that people want to see on a video screen. There are certain strategies that are inherently satisfying. There are certain ways of organizing obstacles that are hard to improve upon.

J.C. Herz, in Joystick Nation (page 25).

In this chapter, we will develop a taxonomy of games, laying the foundation for Chapter 3, The Physiology of EGGG, where we discuss the actual mechanics of game generation.

How are games organized? Is there some Platonic essence of gameness, an ur-game from which all other games have evolved over millennia? A romantic thought, but the answer is no: even if Australopithecus took turns seeing how far they could throw a rock, plotting a gradual evolution from that to Myst would require shoehorning cricket, logic puzzles, Pac-man, card tricks, and professional wrestling all into the same family tree. With games, as with most other collectible things, categorizing is messier than it would first appear.

If we're going to make sweeping conclusions, we first need to identify what it is that we're making conclusions about. Is baseball a game? What about hide and go seek? Anthropological literature typically divides leisure activity into game, play, and sport. Play has no explicit goal, sport involves a test of physical ability, and everything else falls under the catchall category: games. This has the curious corollary that a baseball game played on a field is a sport, while a baseball game played on a computer is a game, even though the two differ only in which muscles are being strained. Nevertheless, it is this definition that we will use when we categorize games and game elements. Game strategies are deferred until Chapter 4, Enemy of the Game State.

A Structural Categorization Of Video Games

We showed some overly simplistic categorizations in the Introduction. For another, deeper categorization, we can examine a particular genre of computer games: the arcade game. J.C. Herz, in Joystick Nation, divides up the space of arcade games as follows:

Herz is only attempting to categorize video games here, but note how she does it: she categorizes them by the player's experience. That makes sense, because her audience is players.

Burns categorizes non-video games into the following categories [Burns 98]:

    
    
    

However, if we try to categorize games from the developer's perspective, we need different criteria. When you're programming, the difference between a shooter and a raining game is far less than the difference between either of those games and a card game. Likewise, the difference between the software architecture of a Go game and a rendition of Capture The Flag is tremendous, even though Burns would classify them both a territorial games.

A taxonomy of games from the player's perspective focuses on structure. A taxonomy from a mathematician's perspective focuses on information and probability, as Condon's probabilistic game automata suggest. A taxonomy of games from the designer's perspective focuses on process.

A Designer's Taxonomy of Games

In the rest of this chapter, we will explore the similarities of games by creating a game taxonomy: an organization of games. Each game will be described by a categorization string that describes the process of game play. The categorization strings don't contain the rules of the game, and knowing the categorization doesn't enable one to reconstruct the game, or even visualize it. But if you know the categorization string for a game, you can generate the entire software infrastructure of the game. Everything else is just frosting.

In our taxonomy, we attempt to use familiar English words wherever possible. While the taxonomy would sound loftier if we used precise terms (OccludingBarrier, PlayingSurface, IntrinsicAttribute) we have chosen to use imprecise terms instead (Hand, Board, Color) in the interest of making our study of games a little more accessible.

Frenetics

The first criterion of how a game is to be programmed is whether it is frenetic -- whether it requires "quick" action. We can divide those games into "twitch" games that require near-continuous quick action (most arcade games) and those that are simply time-based, like chess when it is played with a chess clock.

Any game that requires moves in a fixed period of time requires a program that can record how much time has elapsed, which in turn requires that any sort of pause feature not provide a player with an undue advantage.

This provides us with the first category of our taxonomy, which we will depict with a table:

Frenetic
Frenetic and fast
ff
Frenetic, but merely timed
ft

If an ff is present in the categorization string for a game, it means that the game is frenetic and fast; if an ft is present, it means that game is merely timed. If there's nothing at all, the game isn't time-critical at all. These categorization strings were part of the design of EGGG, but are not part of its implementation; they serve only to help us identify the similarities between games.

Some Tetris implementations blank out the screen when you pause, so that you can't analyze where a piece would best fit, unpause, and play the perfect game. There are right ways to pause and wrong ways to pause; that's a right way to pause. However, any pause feature would defeat the purpose of timed chess; since chess has relatively little state (any reasonably good chess player will be able to reconstruct the board from memory), blanking out the screen isn't sufficient.

Thus, a universal game generator that renders games from descriptions first needs to determine whether the game is time-based, and then needs to determine what to do when pausing: the more frenetic the game is, the more sufficient it will be to simply blank out the screen.

This provides the second category of our taxonomy:

Frenetic? History-critical?
f
h

Let's classify the eight games described in the Introduction according to these three bits:

Frenetic History
Tic tac toe
Chess (with chess clock)
ft
h
Poker
h
Crosswords (untimed)
Tetris
ff
Rock Paper Scissors
ft
h
Deducto
h
Mammon
ft

Throughout this chapter, we'll add new categories to our classification scheme as we define the other components of our taxonomy. Before we add more bits to our classification scheme, we'll examine history in greater depth.

History

In this section, we turn to the notion of a game's history. This has nothing to do with how or when the game itself was developed; instead, it refers to the succession of moves made in a game, and their importance to deciding how future moves should be played.

In particular, we turn to what we call local history, which is what Condon calls simply "history": the sequence of moves in a particular game between particular players.

Condon [Condon 89] defines Markov games as games where history is irrelevant. If you look at a tic tac toe game in progress, you know everything you need to know just from looking at the board and identifying whose turn it is. Tic tac toe is a Markov game; so are crosswords. To say that something is a Markov game is the same as saying that you can choose your move without remembering earlier moves.

Text adventure games are not Markov games, because what happens to the player at a given point depends on actions he took earlier.

Chess, to the surprise of some, is not a Markov game. You cannot capture a pawn en passant unless the opponent moved that pawn forward two squares in his last turn -- so you need to remember the last turn: a history of one move. Furthermore, you cannot castle unless you have never moved your king. Therefore, a chess program has to remember all of the moves back to move 2, which is the earliest that a king could be moved. You need to remember almost the entire history. Go also requires history: even though Go books teach readers by depicting boards and asking what the player should do, which suggests that the board contents are all you need to know to render a decision, Go is not a Markov game due to the rule of ko, which prevents a board from having the exact same arrangement of stones on successive turns.

When you peer closer at what it means to be a Markov game, the distinction between Markov games and non-Markov games gets even more slippery. For instance, consider Rock Paper Scissors. Is it a Markov game? It might seem so, because the previous rounds don't affect the play of the current round: the rules are all still the same. Yet the strategy of the game involves analyzing the history of your opponent.

When the history is itself part of the board, the distinction blurs even more. Consider Mastermind, where a player inserts pegs into the lowest level of the board on turn 1, level 2 on turn 2, and so on up to the top of the board. On turn N, the pegs in levels 1 to N-1 are there only to provide a record of the game history. Yet you can look at the board and immediately have all the information you need to decide the perfect move -- clearly a Markov game. The play of Mastermind would be exactly the same if the player had only one level available to him, which he would fill with pegs and then remove when his next turn began. He'd just have to remember all of his previous moves -- clearly a non-Markov game.

Classifying games into Markov games and non-Markov games seems clear-cut when you consider the idealized games of theoretical computer science, but it falls down upon closer scrutiny.

Condon's probabilistic game automata view history as something that a particular game possesses. But EGGG takes a broader view with a global history, defined in Chapter 6, Connect the Bots: Networking.

The Six Types Of Synchrony

In this section, we continue our emphasis on the process of the game, rather than its structure. Once we know whether the game is time critical, whether it is frenetic, and whether it has to remember everything it's done, we can turn to the actual game construction.

In a game like bridge or chess or tic tac toe, the turns alternate. If you assume that the game is not networked (networked games will be explored in Chapter 6), you could envision players taking turns playing the game on a single computer, with one player using the keyboard and then handing it off to the next player; the game program then has to rotate the board so that it is presented from the appropriate viewpoint for each player.

But there are some games for which this doesn't make sense. Consider Diplomacy, in which everyone decides where to move their armies and navies, and submit their moves simultaneously. Or consider Spit, a card game where two players are racing to place their cards on top of a central pile. Even one-person games like Doom, which have no discrete moves at all, aren't without synchrony: the monsters move at the same time you do.

We classify the synchrony of a game as follows: If all players move simultaneously, we call that complete synchronization. If only a subset of the players (which we'll call a team) move simultaneously, that is partial synchronization. And if the game is sequential, we call that zero synchronization.

If only one thing happens at a time, we call that a sequential game. Poker is sequential, because only one person at a time can move. In sequential games, the turns might alternate between two players, as they do in chess, or they might circulate in a particular order, as in the clockwise betting rotation of poker. They might be arbitrary but fixed, as they are in Monopoly. They might have no order at all, as in quiz shows or Charades: you "move" whenever you like.

Here, then, are the different types of synchrony. We have no categorization for simple alternation, since alternation between two players can be viewed as a degenerate form of clockwise or counterclockwise rotation. (Below, we refer to counterclockwise rotation by its more esoteric and evocative name, "widdershins", so that we can have a unique one-letter descriptor for the six types of synchrony.

Synchronization
Total synchronization
st
Partial synchronization
sp
Sequential movement (rotation clockwise)
sc
Sequential movement (rotation widdershins)
sw
Sequential movement (other ordering)
so
Sequential movement (random)
sr

Games that are not sequential usually require multiple strands of execution: either the threads provided by many operating systems, or distributed computing, or a fork/exec computation model. At the very least, they will require emulating multiple threads of execution.

Games that are sequential can use the ordering to loop through the players in the appropriate order.

Now we can classify the eight games of our dissertation according to their synchrony as well as the previous time and history criteria.

Frenetic History Synchrony
Tic tac toe
sc
Chess
ft
h
sc
Poker
h
sc
Crosswords
sr
Tetris
ff
sr
Rock Paper Scissors
ft
h
st
Deducto
h
sr
Mammon
ft
sp

Movement

Now that we've classified the sequence of play in the game, we can turn to what is being synchronized: the moves. Our taxonomy defines several components to movement: the move, the phase, the turn, the round, and the step. Few games have all five components. (Magic: The Gathering is one such game.) Each of these components is denoted with a single letter following m: A game with moves is denoted mm. A game with moves and phases is denoted mmp.

To a first approxmation, these components form a hierarchy: a round can consist of multiple turns; a turn can consist of several moves; a move can consist of multiple phases; and a phase can consist of multiple steps. However, there is not strictly adhered to: in Nine-Men's Morris, phases consist of multiple moves, and is denoted mpm to indicate that moves constitute a phase instead of the other way around.

We now discuss each of the five components of movement.

The Move

In games like tic tac toe and chess, the notion of a move is intuitive, and we hear it in "X should move here", or "Black moved his king's pawn forward two squares." Yet even these moves are slightly different. In tic tac toe, the movement is really placement: a player chooses which square to occupy, and by so doing occupies it. In chess, choosing a square is not enough. You have to choose two squares: a source and a destination. In Diplomacy, even the source and destination of a move aren't enough.

In a crossword, a move is writing a letter in a square. But a crossword move can also be erasing a letter in a square. Thus, moves aren't always steps toward a goal, and they don't always add information to the game state.

At this point, the astute reader will note that we've corrupted the intuitive definition of move -- casual users would never call filling in a crossword grid as a series of moves. That's okay, because here we are only talking about the abstractions inside EGGG. The casual user never sees these abstractions, because they can use the more familiar terminology when describing games. EGGG maps the familiar terms to the internal abstractions described in this chapter. Multiple words in the EGGG vocabulary trigger the same abstraction; the choice of abstraction depends on their context.

The Phase

The picture becomes further complicated when we consider the moves of other games. People don't speak of making "moves" in poker, but it's not difficult to broaden the concept of moves to include what it is that players do in poker: ante, bet, call, raise, fold, and discard. Now we have several different types of moves, and each is valid only at particular times during the game. Likewise, deciding who goes first in Monopoly or backgammon or billiards implies a sequence of actions entirely different from the regular play of the game.

We call these distinct times phases, and if a game has phases, it is represented as mp. The movement letters can be concatenated; a game with both moves and phases is denoted mmp if the phases are part of the move (as in poker) or mpm if the moves are part of the phase (as in backgammon).

The Turn

Where does a game like Progressive Chess fit into this categorization? In Progressive Chess, the first player takes one move; the second player takes two moves; the first player take three moves, and so on. Games typically last about seven or eight turns [Burns 98].

When a sequence of moves are made at a time, we call that a turn, and designate it mt. In Progressive Chess, EGGG needs to know not just that moves are combined into turns; it also needs to know how. Unfortunately, this requires that you burrow down into the underlying representation and specify how: with code. When a component of the taxonomy requires writing code, we designate it with an additional opening curly brace, {.

In games like that have tricks, like bridge and pinochle, the moves are individuals playing cards, and the turns are the tricks.

The Round

When a game consists of a series of short, independent games, each with its own winner, it is said to consist of rounds. Poker has rounds, as does Rock Paper Scissors. In both of these games, there is no state kept between independent rounds. You can play one round of poker, but in practice many rounds are played at a sitting. A game with rounds consisting of turns would be represented mrt.

The Step

Some games have complicated moves that require compound actions. If the actions are integral to the play of the game, they are the moves and phases that we discussed earlier. If they are merely customary or superficial, they are called steps. Rapping your knuckle on the table to signify the end of a phase in Magic, or sorting the cards in your hand, or saying "Check" in chess: these are all inconsequential actions that are nevertheless important for any faithful rendition of the game by a computer.

Here is a summary of the five components of movement:

Movement
Move
mm
Phase
mp
Turn
mt
Round
mr
Step
ms

And here are the categorization strings for our eight games:

Frenetic History Synchrony Movement
Tic tac toe
sc
mm
Chess
ft
h
sc
mms
Poker
h
sc
mrmp
Crosswords
sr
mm
Tetris
ff
sr
mtm
Rock Paper Scissors
ft
h
st
mrm
Deducto
h
sr
mrpms
Mammon
ft
sp
mmp

We've now classified when players act, and the sequence of actions. But we haven't talked about what it is the players are acting upon. We turn to that in the next section, Tangibles.

Tangibles

Descriptions of games from the player's perspective typically begin with the look and feel of the tangible objects: board, pieces, cards, and so on. Or they begin with what the user first sees in the game. "You have a sideline view of a basketball court, and you control one character at a time in a game of two-on-two."

This is precisely the way you want to describe a game to a person, because it helps them visualize the game. Pictures first, rules and buttons and controls later. However, we have delayed introducing tangible objects into our taxonomy for a reason: they actually aren't that important to the design of a game. You can play chess with cards instea