version 1.4.39b
[polyglot.git] / game.h
1 \r
2 // game.h\r
3 \r
4 #ifndef GAME_H\r
5 #define GAME_H\r
6 \r
7 // includes\r
8 \r
9 #include "board.h"\r
10 #include "move.h"\r
11 #include "util.h"\r
12 \r
13 // defines\r
14 \r
15 #define GameSize 4096\r
16 \r
17 // types\r
18 \r
19 typedef enum {\r
20    PLAYING,\r
21    WHITE_MATES,\r
22    BLACK_MATES,\r
23    STALEMATE,\r
24    DRAW_MATERIAL,\r
25    DRAW_FIFTY,\r
26    DRAW_REPETITION\r
27 } status_t;\r
28 \r
29 // types\r
30 \r
31 typedef struct {\r
32    board_t start_board[1];\r
33    board_t board[1];\r
34    sint16 size;\r
35    sint16 pos;\r
36    sint8 status;\r
37    move_t move[GameSize];\r
38    uint64 key[GameSize];\r
39 } game_t;\r
40 \r
41 // variables\r
42 \r
43 extern game_t Game[1];\r
44 \r
45 // functions\r
46 \r
47 extern bool game_is_ok     (const game_t * game);\r
48 \r
49 extern void game_clear     (game_t * game);\r
50 extern bool game_init      (game_t * game, const char fen[]);\r
51 \r
52 extern int  game_status    (const game_t * game);\r
53 \r
54 extern int  game_size      (const game_t * game);\r
55 extern int  game_pos       (const game_t * game);\r
56 extern int  game_move      (const game_t * game, int pos);\r
57 \r
58 extern void game_get_board (const game_t * game, board_t * board);\r
59 extern void game_get_board_ex (const game_t * game, board_t * board, int pos);\r
60 extern int  game_turn      (const game_t * game);\r
61 extern int  game_move_nb   (const game_t * game);\r
62 \r
63 extern void game_add_move  (game_t * game, int move);\r
64 extern void game_rem_move  (game_t * game);\r
65 \r
66 extern void game_goto      (game_t * game, int pos);\r
67 \r
68 extern void game_disp      (const game_t * game);\r
69 \r
70 #endif // !defined GAME_H\r
71 \r
72 // end of game.h\r
73 \r