nouvelle gravité + nouveau niveau + temps et fps
This commit is contained in:
parent
fe8bb1c25b
commit
6cada13c72
|
@ -1,3 +1,2 @@
|
|||
#define PLAYER_SPEED 3
|
||||
#define PLAYER_GRAVITY 6
|
||||
#define PLAYER_HEIGHT 11
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
void draw_level(char level[]);
|
||||
void draw_player(int x, int y);
|
||||
void draw_timer(unsigned int frame);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "drawlevel.h"
|
||||
#include <gint/std/string.h>
|
||||
#include <gint/display.h>
|
||||
#include "define.h"
|
||||
|
||||
extern bopti_image_t img_solid_0; //solid block
|
||||
extern bopti_image_t img_solid_1; //another solid block
|
||||
|
@ -44,3 +45,8 @@ void draw_level(char level[])
|
|||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
void draw_timer(unsigned int frame)
|
||||
{
|
||||
dprint_opt(0, 0, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "%u.%02u",(frame)/45, (frame)%45);
|
||||
}
|
||||
|
|
62
src/main.c
62
src/main.c
|
@ -1,14 +1,29 @@
|
|||
#include <gint/display.h>
|
||||
#include <gint/keyboard.h>
|
||||
#include <gint/clock.h>
|
||||
#include <gint/timer.h>
|
||||
|
||||
#include "setlevel.h"
|
||||
#include "drawlevel.h"
|
||||
#include "collide.h"
|
||||
|
||||
#include "define.h"
|
||||
|
||||
#define ACCELERATION 0.4
|
||||
#define MAX_VSPD 9.0
|
||||
|
||||
int callback(volatile int *frame_elapsed)
|
||||
{
|
||||
*frame_elapsed = 1;
|
||||
return TIMER_CONTINUE;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
dclear(C_WHITE);
|
||||
volatile int frame_elapsed = 1;
|
||||
int timer = timer_setup(TIMER_ANY, 16500, callback, &frame_elapsed);
|
||||
timer_start(timer);
|
||||
|
||||
unsigned int frame = 0;
|
||||
int player_x = 20, player_y = 20;
|
||||
char level[351];
|
||||
char gravity = 0; //0 down 1 up
|
||||
|
@ -16,15 +31,24 @@ int main(void)
|
|||
int id_level = 1;
|
||||
int start_x;
|
||||
int start_y;
|
||||
|
||||
float vspd = 1.0;
|
||||
int vert_spd = 1;
|
||||
|
||||
set_level(id_level, level, &start_x, &start_y, &gravity);
|
||||
player_x = start_x;
|
||||
player_y = start_y;
|
||||
draw_level(level);
|
||||
while(1)
|
||||
{
|
||||
draw_level(level);
|
||||
draw_player(player_x,player_y);
|
||||
while(!frame_elapsed) sleep();
|
||||
frame_elapsed = 0;
|
||||
|
||||
frame++;
|
||||
|
||||
draw_level(level);
|
||||
draw_player(player_x,player_y);
|
||||
draw_timer(frame);
|
||||
dprint(150,100,C_GREEN,"%d",player_x);
|
||||
dprint(150,120,C_GREEN,"%d",player_y);
|
||||
|
||||
|
@ -65,16 +89,37 @@ int main(void)
|
|||
if(keydown(KEY_EXIT)) break;
|
||||
if(!gravity)
|
||||
{
|
||||
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_solid(player_x, player_y+vert_spd, level, gravity))
|
||||
{
|
||||
if (vspd<MAX_VSPD) vspd+=ACCELERATION;
|
||||
vert_spd = vspd;
|
||||
player_y+=vert_spd;
|
||||
}
|
||||
else if(!collide_solid(player_x, player_y+1, level, gravity))
|
||||
{
|
||||
vspd = 1;
|
||||
player_y+=1;
|
||||
}
|
||||
else vspd = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
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_solid(player_x, player_y-vert_spd, level, gravity))
|
||||
{
|
||||
if (vspd<MAX_VSPD) vspd+=ACCELERATION;
|
||||
vert_spd = vspd;
|
||||
player_y-=vert_spd;
|
||||
}
|
||||
else if(!collide_solid(player_x, player_y-1, level, gravity))
|
||||
{
|
||||
vspd = 1;
|
||||
player_y-=1;
|
||||
}
|
||||
else vspd = 1;
|
||||
}
|
||||
if(collide_dead(player_x, player_y, level))
|
||||
{
|
||||
vspd = 1;
|
||||
player_x = start_x;
|
||||
player_y = start_y;
|
||||
set_gravity(id_level, &gravity);
|
||||
|
@ -89,5 +134,6 @@ int main(void)
|
|||
if(player_y>=212) player_y=-4;
|
||||
if(player_y<-6) player_y=212;
|
||||
}
|
||||
timer_stop(timer);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,12 +1,19 @@
|
|||
#include "setlevel.h"
|
||||
#include <gint/std/string.h>
|
||||
|
||||
/*How to add your level ?
|
||||
|
||||
You must to copy + paste your level info into the switch(id_level) The number after "case" correspond to the number of your level
|
||||
Then you must to set the default gravity into the function set_gravity() like the previous one. 0 down and 1 is up.
|
||||
*/
|
||||
|
||||
void set_level(int id_level, char level[], int *startx, int *starty, char *gravity)
|
||||
{
|
||||
switch(id_level)
|
||||
{
|
||||
case 1:
|
||||
memcpy(level,"11111ddd111111111111001111000000000000000000000001000000000000001dddd100000000000000111110000000000010000000000001000000000021222000000000d000000000022000000000000d000000000012000000000000200000000001200000000000020000000000110001111000002000001122211000000101111100000100001100000010100020000010000110s00001000002000001000e111122111111dd111121100111",350);
|
||||
//memcpy(level,"11111ddd111111111111001111000000000000000000000001000000000000001dddd100000000000000111110000000000010000000000001000000000021222000000000d000000000022000000000000d000000000012000000000000200000000001200000000000020000000000110001111000002000001122211000000101111100000100001100000010100020000010000110s00001000002000001000e111122111111dd111121100111",350);
|
||||
memcpy(level,"11010011111011111111111111101001dd10001111dddd11110001001dd10001000000000001111001dd100010001111ddd110s00010010001000000000011dddd110010001000dd00000100000000010e01000dd00000011111100011111dddddddd1111ddddd00010000111001111111111111101000000000111111000100000100000000000000011010000010001110000001111101000001000111000ddd1111101001111101111111111111",350);
|
||||
break;
|
||||
case 2:
|
||||
memcpy(level,"1210011111111002110011122200000111ddd000111000000120000000000000011100000e1111111ddd111112211111121100000000000000000000d0000122111111dd111111200d000210002100000000011200d000200002100000000012100d000000000000000000011100d00001111dd11200000011100112222000011211ddd0021100111111000011111ddd00211001111110s0021111ddd0012100211111110021111111001110021111",350);
|
||||
|
@ -42,10 +49,10 @@ void set_gravity(int id_level, char *default_gravity)
|
|||
switch(id_level)
|
||||
{
|
||||
case 1:
|
||||
*default_gravity = 0; //0 down - 1 up
|
||||
*default_gravity = 1; //0 down - 1 up
|
||||
break;
|
||||
case 2:
|
||||
*default_gravity = 1; //0 down - 1 up
|
||||
*default_gravity = 0; //0 down - 1 up
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue