X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=dvonn-board.h;h=7a361c3e6e3f3ebc2bdb415f9bae69352b096414;hb=290d2396610f08c48eda9fd2400679176448d7d9;hp=c1c82707c180904fd7a96387a86fbc27716a2b1c;hpb=c63c776c52cb865bc510b1feb9d17abe47086e5c;p=dvonn diff --git a/dvonn-board.h b/dvonn-board.h index c1c8270..7a361c3 100644 --- a/dvonn-board.h +++ b/dvonn-board.h @@ -37,6 +37,7 @@ typedef enum { typedef enum { DVONN_CELL_BLACK = DVONN_PLAYER_BLACK, DVONN_CELL_WHITE = DVONN_PLAYER_WHITE, + DVONN_CELL_RED, DVONN_CELL_EMPTY, DVONN_CELL_INVALID } dvonn_cell_type_t; @@ -44,21 +45,38 @@ 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 #define DVONN_BOARD_Y_SIZE 5 +typedef enum { + DVONN_PHASE_PLACEMENT, + DVONN_PHASE_MOVEMENT +} dvonn_phase_t; + typedef struct { dvonn_cell_t cells[DVONN_BOARD_X_SIZE][DVONN_BOARD_Y_SIZE]; - + dvonn_phase_t phase; dvonn_player_t player; + int moves; } dvonn_board_t; /* Initialize a board for a new game of DVONN. */ void dvonn_board_init (dvonn_board_t *board); +/* Place a piece at (x,y) where (0,0) is at the upper-left corner of + * the board. Returns TRUE if the move is legal and is performed. If + * the move is not legal this function returns FALSE, no change will + * be performed on the board, and *error will be set to a string + * describing why the move is illegal.*/ +int +dvonn_board_place (dvonn_board_t *board, + int x, int y, + char **error); + /* Move a piece from (x1,y1) to (x2,y2) where (0,0) is at the * upper-left corner of the board. Returns TRUE if the move is legal * and is performed. If the move is not legal this function returns @@ -70,4 +88,23 @@ dvonn_board_move (dvonn_board_t *board, int x2, int y2, char **error); +/* Pass rather than moving, allowing the turn to pass to the + * opponent. This should only be allowed if there are no legal moves, + * but that is not yet enforced. Returns TRUE if the pass succeeds. */ +int +dvonn_board_pass (dvonn_board_t *board); + +/* 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) 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