]> git.cworth.org Git - dvonn/blobdiff - dvonn-board.h
Implement automatic pass (when there is no legal move) and end-of-game
[dvonn] / dvonn-board.h
index b0ee8cc46a449dfd5d7d4f4201b68140520567fe..a150b2541f7fdc5fe9566fded72662d6bec196d0 100644 (file)
@@ -45,6 +45,7 @@ typedef enum {
 typedef struct {
     dvonn_cell_type_t type;
     int height;
+    dvonn_bool_t contains_red;
 } dvonn_cell_t;
 
 #define DVONN_BOARD_X_SIZE 11
@@ -52,7 +53,8 @@ typedef struct {
 
 typedef enum {
     DVONN_PHASE_PLACEMENT,
-    DVONN_PHASE_MOVEMENT
+    DVONN_PHASE_MOVEMENT,
+    DVONN_PHASE_GAME_OVER
 } dvonn_phase_t;
 
 typedef struct {
@@ -60,6 +62,7 @@ typedef struct {
     dvonn_phase_t phase;
     dvonn_player_t player;
     int moves;
+    int score[2]; /* index by dvonn_player_t */
 } dvonn_board_t;
 
 /* Initialize a board for a new game of DVONN. */
@@ -87,4 +90,24 @@ dvonn_board_move (dvonn_board_t *board,
                int x2, int y2,
                char **error);
 
+/* Is the cell at (x,y) occupied by a piece. Returns FALSE for all
+ * out-of-bounds coordinates. */
+dvonn_bool_t
+dvonn_board_cell_occupied (dvonn_board_t *board,
+                          int x, int y);
+
+/* Is the cell at (x,y) occupied by a piece (or stack) with the given
+ * player's piece at the top. Returns FALSE for all out-of-bounds
+ * coordinates. */
+dvonn_bool_t
+dvonn_board_cell_owned_by (dvonn_board_t *board,
+                          int x, int y, dvonn_player_t player);
+
+/* Is the cell at (x,y) surrounded by other pieces, (such that it is
+ * not legal for a piece at (x,y) to move. */
+dvonn_bool_t
+dvonn_board_cell_surrounded (dvonn_board_t *board,
+                            int x, int y);
+
+
 #endif