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];