static void free_tiles(tmx_tile *t) { if (t) { free_tiles(t->next); free_props(t->properties); free_image(t->image); tmx_free_func(t); } }
static void free_ts(tmx_tileset *ts) { if (ts) { free_ts(ts->next); tmx_free_func(ts->name); free_image(ts->image); free_props(ts->properties); free_tiles(ts->tiles); tmx_free_func(ts); } }
static void free_tiles(tmx_tile *t) { if (t) { free_tiles(t->next); free_props(t->properties); free_image(t->image); free_obj(t->collision); tmx_free_func(t->animation); tmx_free_func(t); } }
double min_possibility(int* board) { int modifier[] = { // Top left corner 15, 14, 13, 12, 8, 9, 10, 11, 7, 6, 5, 4, 0, 1, 2, 3 }; int sub = 15 - max_tile(board); int min_possibility = INT_MAX; int sum = 0; for (int i = 0; i < 16; i++) { if (modifier[i] - sub >= 0) { modifier[i] = sub - modifier[i]; } if (board[i] == 0) { modifier[i] = 0; } else { modifier[i] = (modifier[i] + board[i]) * (16 - modifier[i]) * board[i] * board[i]; } sum = sum + abs(modifier[i]); } if (sum < min_possibility) { min_possibility = sum; } return (-(float)min_possibility) + ((float)free_tiles(board) * (float)free_tiles(board) * (float)free_tiles(board) * 5.15); }
double evaluation_function(int* board) { if (is_impossible(board)) { return INT_MIN; } if(heuristic == 1) { return min_possibility(board); } return ( (smoothness(board) * smoothness_constant) + (max_tile(board) * max_tile_constant) + (log(free_tiles(board)) * free_tiles_constant) + (max_placement(board) * max_placement_constant) + (monotonicity(board) * monotonicity_constant) ); }