DEFINITION MODULE header; (* This holds all the types, constants, and global variables to *) (* be used for the ataxx program. Everything must therefore explicit- *) (* ly import these types as needed. Data hiding is not used here, but *) (* the types are organized in a decent way. *) (****************************************) CONST (****************************************) boardsize = 7; (* Dimensions of the square playing area *) maxmovetypemoves = 200; (* Maximum number of moves in movetype *) (****************************************) TYPE (****************************************) squaretype = (empty, block, red, blue); (* All the possible states *) (* of a single square. *) playertype = [red..blue]; (* The players. *) boardrange = [-1..boardsize + 2]; (* Limits the values of the board *) (* locations. *) boardtype = ARRAY [-1..boardsize + 2], [-1..boardsize + 2] OF squaretype; histnodeptrtype = POINTER TO histnodetype; (* points of a history node *) histnodetype = RECORD (* Each node contains the board of *) board : boardtype; (* before the move, a pointer to *) turn : playertype; (* the node that shows the board *) previous : histnodeptrtype; (* before that move, after that *) next : histnodeptrtype; (* move (if any), and whose turn *) END; (* it was at that move. *) historytype = RECORD (* The main variable for a list of *) currentmove : histnodeptrtype; (* boards. They are strung out *) nummoves : CARDINAL; (* in reverse order (most recent *) END; (* is pointed at). *) statetype = RECORD (* This describes the current state *) board : boardtype; (* of the game: the status of all *) turn : playertype; (* the squares on the board, whose *) history : historytype; (* turn it is to move, and all the *) END; (* previous moves. *) movetype = RECORD (* This describes an actual move, *) fromX, toX, (* not a board position. *) fromY, toY : boardrange; END; allmovestype = RECORD (* Holds LOTS of moves! *) nummoves : CARDINAL; moves : ARRAY [1..maxmovetypemoves] OF movetype; END; pointercode = (RedCircle, BlueCircle, (* These are the codes for the *) RedPointer, BluePointer, (* possible pointers for the *) EmptySquare, BlockSquare, (* routine, ChangePointer in *) DefaultPointer); (* ataxxgraphics module. *) thinkertype = (human, computer); (* The two types of players. *) printmsgtype = (GameOver, Thinking); (* Message to print at top of *) (* screen. *) (****************************************) (* GLOBALS *) (****************************************) VAR state : statetype; (* Many things will access this. It *) (* describes the current state of the *) (* game. *) gameover : BOOLEAN; (* Indicates when the game is over (or *) (* that there are no more moves left *) (* to play). *) currentpointer : pointercode; (* which pointer is being displayed. *) difficulty : CARDINAL; (* This tells how nasty the compter is *) (* to play. 0 is easiest, and the *) (* higher the number, the harder! *) whoisred, (* These tell who is playing what *) whoisblue : thinkertype; (* color--human, or the computer. *) backedup : BOOLEAN; (* Is true when the player just backed *) (* up a move. *) END header.