ajout fin + ajout mort + nouveau niveau

This commit is contained in:
Tituya 2020-07-01 21:35:52 +02:00
parent 37f11ed00c
commit 9ec8ffc738
9 changed files with 59 additions and 18 deletions

BIN
AST3.g3a

Binary file not shown.

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 B

After

Width:  |  Height:  |  Size: 115 B

View File

@ -1,2 +1,5 @@
char collide(int x, int y, char level[], char gravity, char block);
char collide_solid(int x, int y, char level[], char gravity);
char collide_dead(int x, int y, char level[]);
char collide_point(int x, int y, char level[], char block);
char collide_end(int x, int y, char level[], char gravity);

View File

@ -1,6 +1,8 @@
#include "collide.h"
#include "define.h"
#define DEAD_COLLISION 3 //make the collision with the deadly block less effective
char collide(int x, int y, char level[], char gravity, char block) //detect if player is in a block
{
if(((level[(int)(x/16) + (int)((y/16) * 25)] == block ||
@ -14,3 +16,21 @@ char collide_solid(int x, int y, char level[], char gravity)
{
return collide(x, y, level, gravity, '1') || collide(x, y, level, gravity, '2');
}
char collide_dead(int x, int y, char level[])
{
return collide_point(x + DEAD_COLLISION, y + DEAD_COLLISION, level, 'd') ||
collide_point(x + PLAYER_HEIGHT - DEAD_COLLISION, y + DEAD_COLLISION, level, 'd') ||
collide_point(x + DEAD_COLLISION, y + PLAYER_HEIGHT - DEAD_COLLISION, level, 'd') ||
collide_point(x + PLAYER_HEIGHT - DEAD_COLLISION, y + PLAYER_HEIGHT - DEAD_COLLISION, level, 'd');
}
char collide_point(int x, int y, char level[], char block)
{
return (level[(int)(x/16) + (int)(y/16) * 25] == block);
}
char collide_end(int x, int y, char level[], char gravity)
{
return collide(x, y, level, gravity, 'e');
}

View File

@ -1,11 +1,12 @@
#include "drawlevel.h"
#include <gint/std/string.h>
#include <gint/display.h>
#include <gint/keyboard.h>
extern bopti_image_t img_solid_0;
extern bopti_image_t img_solid_1;
extern bopti_image_t img_player;
extern bopti_image_t img_solid_0; //solid block
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
void draw_player(int x, int y)
{
@ -27,6 +28,12 @@ void draw_level(char level[])
case '2':
dimage(x,y,&img_solid_1);
break;
case 'd':
dimage(x,y,&img_dead);
break;
case 'e':
dimage(x,y,&img_end);
break;
}
x+=16;
if(x==16*25)

View File

@ -14,7 +14,11 @@ int main(void)
char gravity = 0; //0 down 1 up
char check = 0;
int id_level = 1;
set_level(id_level, level, &player_x, &player_y);
int start_x;
int start_y;
set_level(id_level, level, &start_x, &start_y);
player_x = start_x;
player_y = start_y;
draw_level(level);
while(1)
{
@ -24,15 +28,16 @@ int main(void)
dprint(150,100,C_GREEN,"%d",player_x);
dprint(150,120,C_GREEN,"%d",player_y);
dprint(320,120,C_GREEN,"%d",collide_solid(player_x+1, player_y, level, gravity));
/*dprint(320,120,C_GREEN,"%d",collide_solid(player_x+1, player_y, level, gravity));
dprint(320,140,C_GREEN,"%d",collide_solid(player_x-1, player_y, level, gravity));
dprint(320,160,C_GREEN,"%d",collide_solid(player_x, player_y+1, level, gravity));
dprint(320,180,C_GREEN,"%d",collide_solid(player_x, player_y-1, level, gravity));
dprint(320,180,C_GREEN,"%d",collide_solid(player_x, player_y-1, level, gravity));*/
dprint(300,100,C_GREEN,"%d",collide_dead(player_x, player_y, level));
dprint(300,120,C_GREEN,"%c",level[(int)((player_x-1)/16)+(int)((player_y-1)/16*25)]); //top left
dprint(300,140,C_GREEN,"%c",level[(int)((player_x+PLAYER_HEIGHT)/16)+(int)((player_y-1)/16*25)]); //top right
dprint(300,160,C_GREEN,"%c",level[(int)(player_x/16)+(int)((player_y+PLAYER_HEIGHT)/16*25)]); //bottom left
dprint(300,180,C_GREEN,"%c",level[(int)((player_x+PLAYER_HEIGHT)/16)+(int)((player_y+PLAYER_HEIGHT)/16*25)]); //bottom right
dprint(300,140,C_GREEN,"%c",level[(int)((player_x+PLAYER_HEIGHT+1)/16)+(int)((player_y-1)/16*25)]); //top right
dprint(300,160,C_GREEN,"%c",level[(int)((player_x-1)/16)+(int)((player_y+PLAYER_HEIGHT+1)/16*25)]); //bottom left
dprint(300,180,C_GREEN,"%c",level[(int)((player_x+PLAYER_HEIGHT+1)/16)+(int)((player_y+PLAYER_HEIGHT+1)/16*25)]); //bottom right
dupdate();
@ -68,14 +73,20 @@ int main(void)
if(!collide_solid(player_x, player_y-PLAYER_GRAVITY, level, gravity)) player_y-=PLAYER_GRAVITY;
else if(!collide_solid(player_x, player_y-1, level, gravity)) player_y-=1;
}
if(collide_dead(player_x, player_y, level))
{
player_x = start_x;
player_y = start_y;
}
if(collide_end(player_x, player_y, level, gravity))
{
id_level++;
set_level(id_level, level, &start_x, &start_y);
player_x = start_x;
player_y = start_y;
}
if(player_y>=212) player_y=-4;
if(player_y<-6) player_y=212;
/*else
{
if((player_y-4)%16!=0 && !gravity) player_y--;
else if((player_y)%16!=0 && gravity) player_y++;
}*/
}
return 0;
}

View File

@ -6,10 +6,10 @@ void set_level(int id_level, char level[], int *startx, int *starty)
switch(id_level)
{
case 1:
memcpy(level,"11111111111111111111001111000000000000000000100001000000000000122221010000000000000000000000001000001000011110000000000111101100000001001000000000000110000000100100000000000011000000010012222000000001100000000001000000000000110000001111100000000000011001110100010000000000001100001000001111100000000110s00100000100000000000011111111111111111111100111",350);
memcpy(level,"11111ddd111111111111001111000000000000000000000001000000000000001dddd100000000000000111110000000000010000000000001000000000021222000000000d000000000022000000000000d000000000012000000000000200000000001200000000000020000000000110001111000002000001122211000000101111100000100001100000010100020000010000110s00001000002000001000e111122111111dd111121100111",350);
break;
case 2:
memcpy(level,"000001110",350);
memcpy(level,"1210011111111002110011122200000111ddd000111000000120000000000000011100000e1111111ddd111112211111121100000000000000000000d0000122111111dd111111200d000210002100000000011200d000200002100000000012100d000000000000000000011100d00001111dd11200000011100112222000011211ddd0021100111111000011111ddd00211001111110s0021111ddd0012100211111110021111111001110021111",350);
break;
}