ajout blocks apparaissant et disparaissant avec clefs

This commit is contained in:
Tituya 2020-07-03 00:17:20 +02:00
parent 6cada13c72
commit 79836d70fe
7 changed files with 46 additions and 8 deletions

BIN
AST3.g3a

Binary file not shown.

BIN
assets-cg/img/key1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

BIN
assets-cg/img/keyblock.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 B

View File

@ -14,7 +14,10 @@ char collide(int x, int y, char level[], char gravity, char block) //detect if p
char collide_solid(int x, int y, char level[], char gravity)
{
return collide(x, y, level, gravity, '1') || collide(x, y, level, gravity, '2');
return collide(x, y, level, gravity, '1')
|| collide(x, y, level, gravity, '2')
|| collide(x, y, level, gravity, '3')
|| collide(x, y, level, gravity, '4');
}
char collide_dead(int x, int y, char level[])

View File

@ -8,6 +8,8 @@ extern bopti_image_t img_solid_1; //another solid block
extern bopti_image_t img_dead; //dead block
extern bopti_image_t img_player; //player
extern bopti_image_t img_end; //end of level
extern bopti_image_t img_key1; //key 1
extern bopti_image_t img_keyblock; //block link to the key1
void draw_player(int x, int y)
{
@ -23,18 +25,30 @@ void draw_level(char level[])
{
switch(level[i])
{
case '1':
case '1': //solid block
dimage(x,y,&img_solid_0);
break;
case '2':
case '2': //another solid block
dimage(x,y,&img_solid_1);
break;
case 'd':
case 'd': //dead block
dimage(x,y,&img_dead);
break;
case 'e':
case 'e': //end of level
dimage(x,y,&img_end);
break;
case '3': //block link to the key1
dimage(x,y,&img_keyblock);
break;
case 'k': //key1
dimage(x,y,&img_key1);
break;
case '4': //block link to the key2
dimage(x,y,&img_keyblock);
break;
case 'K': //key2
dimage(x,y,&img_key1);
break;
}
x+=16;
if(x==16*25)

View File

@ -131,6 +131,22 @@ int main(void)
player_x = start_x;
player_y = start_y;
}
if(collide(player_x, player_y, level, gravity, 'k')) //Collide with key1 = disappearance of blocks
{
for (int i = 0; level[i]!='\0' ; i++)
{
if(level[i]=='3') level[i]='0';
if(level[i]=='k') level[i]='0';
}
}
if(collide(player_x, player_y, level, gravity, 'K')) //Collide with key2 = appearance of blocks
{
for (int i = 0; level[i]!='\0' ; i++)
{
if(level[i]=='a') level[i]='4';
if(level[i]=='K') level[i]='0';
}
}
if(player_y>=212) player_y=-4;
if(player_y<-6) player_y=212;
}

View File

@ -12,12 +12,14 @@ void set_level(int id_level, char level[], int *startx, int *starty, char *gravi
switch(id_level)
{
case 1:
//memcpy(level,"11111ddd111111111111001111000000000000000000000001000000000000001dddd100000000000000111110000000000010000000000001000000000021222000000000d000000000022000000000000d000000000012000000000000200000000001200000000000020000000000110001111000002000001122211000000101111100000100001100000010100020000010000110s00001000002000001000e111122111111dd111121100111",350);
memcpy(level,"11010011111011111111111111101001dd10001111dddd11110001001dd10001000000000001111001dd100010001111ddd110s00010010001000000000011dddd110010001000dd00000100000000010e01000dd00000011111100011111dddddddd1111ddddd00010000111001111111111111101000000000111111000100000100000000000000011010000010001110000001111101000001000111000ddd1111101001111101111111111111",350);
memcpy(level,"111111111111111111111111110000000003a000000000000110000000003a000000000000110000000003a000000000000110000000023a000000000000110000000013a000000000000110000000013a000000000000110000000003a000000000000110000000003a000000000000110000000003a000000000000110000000003a000000000000110000000003a000000000000110s00000k03a00K000000e0011111111111111111111111111",350);
break;
case 2:
memcpy(level,"1210011111111002110011122200000111ddd000111000000120000000000000011100000e1111111ddd111112211111121100000000000000000000d0000122111111dd111111200d000210002100000000011200d000200002100000000012100d000000000000000000011100d00001111dd11200000011100112222000011211ddd0021100111111000011111ddd00211001111110s0021111ddd0012100211111110021111111001110021111",350);
break;
case 3:
memcpy(level,"11010011111011111111111111101001dd10001111dddd11110001001dd10001000000000001111001dd100010001111ddd110s00010010001000000000011dddd110010001000dd00000100000000010e01000dd00000011111100011111dddddddd1111ddddd00010000111001111111111111101000000000111111000100000100000000000000011010000010001110000001111101000001000111000ddd1111101001111101111111111111",350);
break;
}
set_gravity(id_level, gravity);
@ -49,10 +51,13 @@ void set_gravity(int id_level, char *default_gravity)
switch(id_level)
{
case 1:
*default_gravity = 1; //0 down - 1 up
*default_gravity = 0; //0 down - 1 up
break;
case 2:
*default_gravity = 0; //0 down - 1 up
break;
case 3:
*default_gravity = 1; //0 down - 1 up
break;
}
}