#ident "$Id: panex.h,v 1.4 2004/11/17 17:27:36 pwh Rel $" /* * Panex puzzle object. */ #if !defined ( _PANEX_PUZZLE_H_ ) #define _PANEX_PUZZLE_H_ #define PUZZLE_TITLE "Panex Puzzle" #define ESC 27 /* Peg mnemonics. */ #define LEFT_PEG 0 #define CENTER_PEG 1 #define RIGHT_PEG 2 #define OTHER_PEG(a,b) (3-(a)-(b)) /* Animation speed settings. */ #define WARP_SPEED 2 #define XTREME_SPEED 10 #define HIGH_SPEED 20 #define NORMAL_SPEED 50 #define SLOW_SPEED 100 /* Solution methods. */ #define OBVIOUS_SOLUTION 1 #define RECURSIVE_SOLUTION 2 #define ALTERNATING_SOLUTION 3 #define BETTER_ALTERNATING_SOLUTION 4 #define ZIGZAG_SOLUTION 5 #define BETTER_ZIGZAG_SOLUTION 6 #define BOTTOM_UP_SOLUTION 7 #define BETTER_BOTTOM_UP_SOLUTION 8 #define EFFICIENT_SOLUTION DEFAULT_SOLUTION #define DEFAULT_SOLUTION 10000 typedef struct { int size; int color; int peg; int height; int solved; } DISK; /* Puzzle object. */ typedef struct { int height; /* Height of tower. */ int y0; /* Upper left corner of puzzle space. */ int x0; /* Upper left corner of puzzle space. */ int yc; /* Current row being updated. */ int xc; /* Center column of screen. */ int speed; /* Animation speed. */ int warpFactor; /* Animation speed. */ int moves; /* Move count. */ int unsolved; /* Number of disks out of place. */ int peg_tops [3]; /* Number of disks on each peg. */ DISK *disks [2]; /* Location of each disk. */ DISK **pegs [3]; /* Internal representaion of puzzle. */ } PUZZLE; #define isInteractive(a) ((a)->speed) #define isSolved(a) (!((a)->unsolved)) int displayPuzzle ( PUZZLE *puzzle ); void closePuzzle ( PUZZLE *puzzle ); void resetPuzzle ( PUZZLE *puzzle ); PUZZLE *openPuzzle ( int height, int interactive, int speed ); int moveDisk ( PUZZLE *puzzle, int src, int dest ); /* Solution modules. */ #define generalSolution(a,b) (resetPuzzle (a),displayPuzzle(a),\ timeout(200),getch(),timeout(-1),\ solvePuzzle((a),(b),DEFAULT_SOLUTION)) int solvePuzzle ( PUZZLE *puzzle, int height, int solution ); /* Game module. */ int playGame ( PUZZLE *puzzle ); #endif /* !_PANEX_PUZZLE_H_ */