labyrinth
diff src/level.c @ 5:c8826e5ebec1
- changed every data loading function to return dummy objects instead of failing
- fixed mistake in AndroidManifest.xml
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Fri, 01 May 2015 05:58:41 +0300 |
parents | d46f0947a96d |
children |
line diff
1.1 --- a/src/level.c Fri May 01 04:38:43 2015 +0300 1.2 +++ b/src/level.c Fri May 01 05:58:41 2015 +0300 1.3 @@ -13,6 +13,18 @@ 1.4 1.5 #define IS_SOLID(x) ((x) == C_WALL) 1.6 1.7 +#define DEF_LVL_SZ 5 1.8 +static const char def_lvl_cells[DEF_LVL_SZ][DEF_LVL_SZ] = { 1.9 + "#####", 1.10 + "##x##", 1.11 + "#o o#", 1.12 + "# s #", 1.13 + "#####" 1.14 +}; 1.15 + 1.16 + 1.17 +static int default_level(struct level *lvl); 1.18 + 1.19 1.20 void level_init(struct level *lvl) 1.21 { 1.22 @@ -22,6 +34,28 @@ 1.23 lvl->floor_tex_scale = lvl->wall_tex_scale = lvl->ceil_tex_scale = 1.0; 1.24 } 1.25 1.26 +static int default_level(struct level *lvl) 1.27 +{ 1.28 + int i, j; 1.29 + 1.30 + lvl->num_cells[0] = lvl->num_cells[1] = DEF_LVL_SZ; 1.31 + 1.32 + for(i=0; i<DEF_LVL_SZ; i++) { 1.33 + for(j=0; j<DEF_LVL_SZ; j++) { 1.34 + char c = def_lvl_cells[i][j]; 1.35 + lvl->cells[i][j] = c; 1.36 + if(c == 's') { 1.37 + lvl->start_pos[0] = j; 1.38 + lvl->start_pos[1] = i; 1.39 + } else if(c == 'x') { 1.40 + lvl->goal_pos[0] = j; 1.41 + lvl->goal_pos[1] = i; 1.42 + } 1.43 + } 1.44 + } 1.45 + return 0; 1.46 +} 1.47 + 1.48 static void clean_line(char *buf) 1.49 { 1.50 char *end = buf + strlen(buf) - 1; 1.51 @@ -41,23 +75,23 @@ 1.52 1.53 if(!(fp = fopen(fname, "r"))) { 1.54 fprintf(stderr, "failed to open file: %s\n", fname); 1.55 - return -1; 1.56 + return default_level(lvl); 1.57 } 1.58 1.59 if(!fgets(buf, sizeof buf, fp)) { 1.60 fprintf(stderr, "level file %s is empty\n", fname); 1.61 fclose(fp); 1.62 - return -1; 1.63 + return default_level(lvl); 1.64 } 1.65 if(sscanf(buf, "s %dx%d", size, size + 1) != 2) { 1.66 fprintf(stderr, "level file %s doesn't start with size definition\n", fname); 1.67 fclose(fp); 1.68 - return -1; 1.69 + return default_level(lvl); 1.70 } 1.71 if(size[0] > MAX_LEVEL_SIZE || size[1] > MAX_LEVEL_SIZE) { 1.72 fprintf(stderr, "level size %dx%d is larger than compile-time maximum (%d)\n", size[0], size[1], MAX_LEVEL_SIZE); 1.73 fclose(fp); 1.74 - return -1; 1.75 + return default_level(lvl); 1.76 } 1.77 1.78 lvl->num_cells[0] = size[0];