nouvelle gravité + nouveau niveau + temps et fps

This commit is contained in:
Tituya 2020-07-02 20:09:23 +02:00
parent fe8bb1c25b
commit 6cada13c72
6 changed files with 71 additions and 12 deletions

BIN
AST3.g3a

Binary file not shown.

View File

@ -1,3 +1,2 @@
#define PLAYER_SPEED 3
#define PLAYER_GRAVITY 6
#define PLAYER_HEIGHT 11

View File

@ -1,2 +1,3 @@
void draw_level(char level[]);
void draw_player(int x, int y);
void draw_timer(unsigned int frame);

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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;
}
}