#ifndef KHET_GAME_H #define KHET_GAME_H #define NONE 0 #define PHARAO 1 #define DJHED 2 #define PYRAMID 3 #define OBELISK 4 #define OBELISK2 5 #define N_PIECE_TYPES 6 #define SILVER 0 #define RED 1 #define BOARD_WIDTH 10 #define BOARD_HEIGHT 8 #define F_ROTATE 1 #define F_SPLIT 2 #define E_ILLEGAL_MOVE -1 #define E_UNKNOWN_COMMAND -2 #define HUGE_SUCCESS 1 // return values for laser(): #define L_WALL 0 #define L_PIECE 1 #define SILVER_WINS 2 #define RED_WINS 3 typedef struct square { unsigned int piece : 4; unsigned int side : 1; unsigned int dir : 2; } square_t; typedef struct { int move; int winner; square_t board[BOARD_WIDTH][BOARD_HEIGHT]; int laser_pos[2]; } game_t; typedef struct { char ch; char *name; } sideinfo_t; typedef enum { R_CW, R_CCW } rot_t; typedef enum { D_NW=0, D_N, D_NE, D_E, D_SE, D_S, D_SW, D_W } dir_t; extern char classic_setup[]; extern sideinfo_t sideinfo[]; int laser_at(game_t *game, int x, int y); int laser(game_t *game, int side); int movable(game_t *game, int row, int col, int side); int rotate(game_t *game, int side, int row, int col, rot_t dir); int move(game_t *game, int side, int row, int col, int dir, int flags); void place(game_t *game, int row, int col, int piece, int side, int dir); void setup_board(game_t *game, char *desc); void init_game(game_t *game); #endif