#define BOARD_WIDTH 9 #define BOARD_ROW_UNITS ((BOARD_WIDTH * 2) + 1) #define BOARD_UNITS BOARD_ROW_UNITS * BOARD_ROW_UNITS /* constants */ const char EMPTY = ' '; const char ANY = '*'; const char SEPARATOR = '+'; const 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); int translate_coordinate(int index); int is_center_index(int index); /* tiles */ int is_allowed_placement(Tile tile, int index, BoardUnit* board); int place_tile(Tile tile, int index, BoardUnit* board, int force); void rotate_tile(Tile* tile, int increment); /* structures */ void traverse_structure(int group, int index, BoardUnit* board); void refresh_structure_groups(BoardUnit* board); int evaluate_structure(int index, BoardUnit* board);