#define BOARD_WIDTH 7 #define BOARD_ROW_UNITS ((BOARD_WIDTH * 2) + 1) #define BOARD_UNITS BOARD_ROW_UNITS * BOARD_ROW_UNITS char EMPTY = ' '; int neighbor_increments[] = { - BOARD_ROW_UNITS, 1, BOARD_ROW_UNITS, - 1 }; /* structs */ typedef struct { char edges[4]; char center; int shield; } Tile; typedef struct { char feature; int meeple; int structure_group; } BoardUnit; /* board */ void initialize_board(BoardUnit* board); void print_board(BoardUnit* board); void write_board(BoardUnit* board, char* filename); void read_board(BoardUnit* board, char* filename); /* moves */ int is_allowed_placement(Tile tile, int index, BoardUnit* board); int translate_coordinate(int index); int is_center_index(int index); int place_tile(Tile tile, int index, BoardUnit* board, int force); /* structures */ void traverse_structure(int group, int index, BoardUnit* board); void refresh_structure_groups(BoardUnit* board); int evaluate_structure(int index, BoardUnit* board);