To meet these requirements, the program is put together in a way that operating system dependencies are encapsulated in a set of generic service classes, such as a Thread class. Together these provide a high level of portability. The environment is composed of a single Referee object. A Referee can create players that play each other. The players can be people playing on the same computer, or players that are remote playing via the Internet or via a modem connection.
Players can be a person or a program.
To accomplish all these different kinds of connections, the Referee creates two PlayerProxy classes, each of which mediates the connections between the actual players, wherever and whatever they may be. The Referee then monitors the game and can interrupt it and record it as necessary. It would be possible to have multiple Referees each with a pair of Players. For some kinds of experimentation, such as Genetic Programming, it is beneficial to support multiple, simultaneous games especially on computers with multiple CPUs as a way to more efficiently evolve populations. The point being that this architecture could be easily elaborated to support this.