diff options
| author | eug-vs <eugene@eug-vs.xyz> | 2022-03-31 21:03:38 +0300 | 
|---|---|---|
| committer | eug-vs <eugene@eug-vs.xyz> | 2022-03-31 21:03:38 +0300 | 
| commit | be2885fc3eb77ec33c5afe10a741ff23a21b0b5d (patch) | |
| tree | f4be67d960d5f9322b3b536ab5268fbaf05d9c8c | |
| parent | 6f4ac9571a0a6df9ec607e5a9a9b8d3e5f7bbc96 (diff) | |
| download | carcassonne-engine-c-be2885fc3eb77ec33c5afe10a741ff23a21b0b5d.tar.gz | |
refactor: use struct for Tile
| -rw-r--r-- | src/board.c | 12 | ||||
| -rw-r--r-- | src/board.h | 26 | ||||
| -rw-r--r-- | src/main.c | 14 | 
3 files changed, 27 insertions, 25 deletions
diff --git a/src/board.c b/src/board.c index 8c33ae3..d885a8c 100644 --- a/src/board.c +++ b/src/board.c @@ -22,7 +22,7 @@ int is_center_index(int index) {    return ((index / BOARD_ROW_BYTES) % 2 == 1) && ((index % BOARD_ROW_BYTES) % 2 == 1);  } -int is_allowed_placement(char* tile, int index, char* board) { +int is_allowed_placement(Tile tile, int index, char* board) {    if (board[index] != EMPTY) return 0;    int neighbor_count = 0; @@ -30,7 +30,7 @@ int is_allowed_placement(char* tile, int index, char* board) {    for (int i = 0; i < 4; i++) {      char neighbor = board[index + neighbor_increments[i]];      if (neighbor != EMPTY) { -      if (neighbor != tile[i + 1]) return 0; +      if (neighbor != tile.edges[i]) return 0;        neighbor_count++;      }    } @@ -38,20 +38,20 @@ int is_allowed_placement(char* tile, int index, char* board) {    return neighbor_count > 0;  } -int place_tile(char* tile, int index, char* board, int force) { +int place_tile(Tile tile, int index, char* board, int force) {    if (!is_center_index(index)) {      printf("Not a valid tile index: %i\n", index);      return 0;    }    if (!force && !is_allowed_placement(tile, index, board)) { -    printf("Can not place tile %s\n", tile); +    printf("Can not place tile %s (%c)\n", tile.edges, tile.center);      return 0;    } -  board[index] = tile[0]; +  board[index] = tile.center;    for (int i = 0; i < 4; i++) { -    board[index + neighbor_increments[i]] = tile[i + 1]; +    board[index + neighbor_increments[i]] = tile.edges[i];    }    return 1; diff --git a/src/board.h b/src/board.h index caa4e69..f369743 100644 --- a/src/board.h +++ b/src/board.h @@ -2,6 +2,7 @@  #define BOARD_ROW_BYTES ((BOARD_WIDTH * 2) + 1)  #define BOARD_BYTES BOARD_ROW_BYTES * BOARD_ROW_BYTES +  char EMPTY = ' ';  int neighbor_increments[] = { @@ -11,27 +12,26 @@ int neighbor_increments[] = {    - 1  }; -// Board -void initialize_board(char* board); -void print_board(char* board); +/* structs */ +typedef struct { +  char edges[4]; +  char center; +} Tile; +/* board */ +void initialize_board(char* board); +void print_board(char* board);  void write_board(char* board, char* filename); -  void read_board(char* board, char* filename); -// Moves -int is_allowed_placement(char* tile, int index, char* board); - +/* moves */ +int is_allowed_placement(Tile tile, int index, char* board);  int translate_coordinate(int index); -  int is_center_index(int index); +int place_tile(Tile tile, int index, char* board, int force); -int place_tile(char* tile, int index, char* board, int force); - -// Structures +/* structures */  void traverse_structure(char id, int index, char* board, char* structures); -  void create_structure_mask(char* board, char* structures); -  int evaluate_structure(int index, char* board, char* structures); @@ -46,12 +46,14 @@ int main() {    char structures[BOARD_BYTES];    initialize_board(board); -  place_tile("RFRCR", translate_coordinate(24), board, 1); + +  Tile tile = { "FRCR", 'R' }; +  place_tile(tile, translate_coordinate(24), board, 1);    /* main loop */ -  char tile[5];    char position[3];    while (1) { +      /* prepare */      initialize_board(structures);      create_structure_mask(board, structures); @@ -67,9 +69,9 @@ int main() {      box(input_box, 0, 0);      mvwaddstr(input_box, 0, 0, "Enter tile:");      wrefresh(input_box); -    wgetstr(input_win, tile); +    wgetstr(input_win, tile.edges);      wclear(input_win); -    if (tile[0] == 'q') break; +    if (tile.edges[0] == 'q') break;      box(input_box, 0, 0);      mvwaddstr(input_box, 0, 0, "Enter position:"); @@ -77,8 +79,8 @@ int main() {      wgetstr(input_win, position);      int result = place_tile(tile, translate_coordinate(atoi(position)), board, 0); -    if (result) wprintw(messages_win, "Placed tile %s at position %i\n", tile, atoi(position)); -    else wprintw(messages_win, "Could not place tile %s at position %i\n", tile, atoi(position)); +    if (result) wprintw(messages_win, "Placed tile %s (%c) at position %i\n", tile.edges, tile.center, atoi(position)); +    else wprintw(messages_win, "Could not place tile %s (%c) at position %i\n", tile.edges, tile.center, atoi(position));      wrefresh(messages_win);    }  |