forked from Tituya/AST3_C
ajout fin + ajout mort + nouveau niveau
This commit is contained in:
parent
37f11ed00c
commit
9ec8ffc738
Binary file not shown.
After Width: | Height: | Size: 102 B |
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 |
|
@ -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);
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
35
src/main.c
35
src/main.c
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue