void game_destroy(struct game_t* g) { assert(g != NULL); game_terminate(g); free(g); }
void level_generate(struct game_data *game) { int x, y, i; FILE *level; char tmp, filename[256]; /* Choose a random text file. */ snprintf(filename, 256, "%s%s-%d.txt", game->datadir, "/levels/level", rand() % game->num_levels); /* Load the text file. */ level = fopen(filename, "r"); if (level == NULL) { printf("Error: Level file '%s' not found!\nExiting...\n", filename); game_terminate(0); } /* Parse text file into 'level' array. */ for (y = 0; y <= LEVEL_H; y++) { for (x = 0; x <= LEVEL_W; x++) { fscanf(level, "%c", &tmp); if (tmp == ' ') x--; else if (tmp == '\n') break; else game->level[y][x] = tmp; } if (feof(level)) break; } /* Should we mirror the level? */ if (rand() % 2) { for (y = 0; y < LEVEL_H; y++) { for (x = 0, i = LEVEL_W - 1; x < LEVEL_W / 2; x++, i--) { tmp = game->level[y][i]; game->level[y][i] = game->level[y][x]; game->level[y][x] = tmp; } } } /* Should we flip the level? */ if (rand() % 2) { for (x = 0; x < LEVEL_W; x++) { for (y = 0, i = LEVEL_H - 1; y < LEVEL_H / 2; y++, i--) { tmp = game->level[i][x]; game->level[i][x] = game->level[y][x]; game->level[y][x] = tmp; } } } fclose(level); }