General game players are computer systems able to play strategy games based solely on formal game descriptions supplied at "runtime". (In other words, they don't know the rules until the game starts.) Unlike specialized game players, such as Deep Blue, general game players cannot rely on algorithms designed in advance for specific games; they must discover such algorithms themselves. General game playing expertise depends on intelligence on the part of the game player and not just intelligence of the programmer of the game player.

GGP is an interesting application in its own right. It is intellectually engaging and more than a little fun. But it is much more than that. It provides a theoretical framework for modeling discrete dynamic systems and for defining rationality in a way that takes into account problem representation and complexities like incompleteness of information and resource bounds. It has practical applications in areas where these features are important, e.g. in business and law. More fundamentally, it raises questions about the nature of intelligence and serves as a laboratory in which to evaluate competing approaches to artificial intelligence.

This book is an elementary introduction to General Game Playing (GGP). (1) It presents the theory of General Game Playing and leading GGP technologies. (2) It shows how to create GGP programs capable of competing against other programs and humans. (3) And it offers a glimpse of some of the real world applications of General Game Playing.

Although the book is elementary, it does assume some basic background. (1) First of all, readers should be familiar with Symbolic Logic. Game descriptions are written in the language of Symbolic Logic, and it helps to be able to read and write such descriptions. (2) Second, readers should be familiar with the concepts of computer programming. At the very least, they should be able to read and understand program fragments written in modern programming languages. We use Javascript in all of our examples. Javascript is fairly simple. If readers are familiar with languages like Java and C, they should be able to read Javascript without any further training.

Before getting started, we want to acknowledge the contributions of various people. First of all, there are the various students who over the years helped to craft the course - notably Nathaniel Love, David Haley, Eric Schkufza, Evan Cox, Alex Landau, Peter Pham, Mirela Spasova, and Bertrand Decoster. Special mention goes to Sam Schreiber for maintaining the GGP configurable player and the Java code base used by many students. He is also the creator and maintainer of, a website for all things GGP.

And thanks as well to the students who over the years have had to endure early versions of this material, in many cases helping to get it right by suffering through experiments that were not always successful. It is a testament to the intelligence of these students that they seem to have learned the material despite multiple bumbling mistakes on our part. Their patience and constructive comments were invaluable in helping us to understand what works and what does not.