2020-06-25 23:53:57 +02:00
|
|
|
#include <gint/display.h>
|
|
|
|
#include <gint/keyboard.h>
|
2020-07-02 20:09:23 +02:00
|
|
|
#include <gint/clock.h>
|
|
|
|
#include <gint/timer.h>
|
|
|
|
|
2020-06-25 23:53:57 +02:00
|
|
|
#include "setlevel.h"
|
|
|
|
#include "drawlevel.h"
|
2020-06-26 19:08:51 +02:00
|
|
|
#include "collide.h"
|
2020-06-27 14:47:58 +02:00
|
|
|
#include "define.h"
|
2020-06-25 23:53:57 +02:00
|
|
|
|
2020-07-02 20:09:23 +02:00
|
|
|
#define ACCELERATION 0.4
|
|
|
|
#define MAX_VSPD 9.0
|
|
|
|
|
|
|
|
int callback(volatile int *frame_elapsed)
|
|
|
|
{
|
|
|
|
*frame_elapsed = 1;
|
|
|
|
return TIMER_CONTINUE;
|
|
|
|
}
|
|
|
|
|
2020-06-25 23:53:57 +02:00
|
|
|
int main(void)
|
|
|
|
{
|
2020-07-02 20:09:23 +02:00
|
|
|
volatile int frame_elapsed = 1;
|
|
|
|
int timer = timer_setup(TIMER_ANY, 16500, callback, &frame_elapsed);
|
|
|
|
timer_start(timer);
|
|
|
|
|
|
|
|
unsigned int frame = 0;
|
2020-06-29 22:31:30 +02:00
|
|
|
int player_x = 20, player_y = 20;
|
2020-06-26 01:46:28 +02:00
|
|
|
char level[351];
|
|
|
|
char gravity = 0; //0 down 1 up
|
2020-06-29 00:08:48 +02:00
|
|
|
char check = 0;
|
2020-06-25 23:53:57 +02:00
|
|
|
int id_level = 1;
|
2020-07-01 21:35:52 +02:00
|
|
|
int start_x;
|
|
|
|
int start_y;
|
2020-07-02 20:09:23 +02:00
|
|
|
|
|
|
|
float vspd = 1.0;
|
|
|
|
int vert_spd = 1;
|
|
|
|
|
2020-07-02 00:00:04 +02:00
|
|
|
set_level(id_level, level, &start_x, &start_y, &gravity);
|
2020-07-01 21:35:52 +02:00
|
|
|
player_x = start_x;
|
|
|
|
player_y = start_y;
|
2020-06-25 23:53:57 +02:00
|
|
|
draw_level(level);
|
|
|
|
while(1)
|
|
|
|
{
|
2020-07-02 20:09:23 +02:00
|
|
|
while(!frame_elapsed) sleep();
|
|
|
|
frame_elapsed = 0;
|
2020-06-29 00:08:48 +02:00
|
|
|
|
2020-07-02 20:09:23 +02:00
|
|
|
frame++;
|
|
|
|
|
|
|
|
draw_level(level);
|
|
|
|
draw_player(player_x,player_y);
|
|
|
|
draw_timer(frame);
|
2020-06-29 00:08:48 +02:00
|
|
|
dprint(150,100,C_GREEN,"%d",player_x);
|
|
|
|
dprint(150,120,C_GREEN,"%d",player_y);
|
|
|
|
|
2020-07-01 21:35:52 +02:00
|
|
|
/*dprint(320,120,C_GREEN,"%d",collide_solid(player_x+1, player_y, level, gravity));
|
2020-06-30 19:13:03 +02:00
|
|
|
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));
|
2020-07-01 21:35:52 +02:00
|
|
|
dprint(320,180,C_GREEN,"%d",collide_solid(player_x, player_y-1, level, gravity));*/
|
2020-06-29 22:31:30 +02:00
|
|
|
|
2020-07-02 00:00:04 +02:00
|
|
|
/*dprint(300,100,C_GREEN,"%d",collide_dead(player_x, player_y, level));
|
2020-06-29 00:08:48 +02:00
|
|
|
dprint(300,120,C_GREEN,"%c",level[(int)((player_x-1)/16)+(int)((player_y-1)/16*25)]); //top left
|
2020-07-01 21:35:52 +02:00
|
|
|
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
|
2020-07-02 00:00:04 +02:00
|
|
|
dprint(300,180,C_GREEN,"%c",level[(int)((player_x+PLAYER_HEIGHT+1)/16)+(int)((player_y+PLAYER_HEIGHT+1)/16*25)]); //bottom right*/
|
2020-06-29 00:08:48 +02:00
|
|
|
|
2020-06-25 23:53:57 +02:00
|
|
|
dupdate();
|
2020-06-29 00:08:48 +02:00
|
|
|
|
2020-06-25 23:53:57 +02:00
|
|
|
pollevent();
|
2020-06-30 17:12:33 +02:00
|
|
|
if(keydown(KEY_RIGHT))
|
2020-06-25 23:53:57 +02:00
|
|
|
{
|
2020-06-30 19:13:03 +02:00
|
|
|
if(!collide_solid(player_x+PLAYER_SPEED, player_y, level, gravity)) player_x+=PLAYER_SPEED;
|
|
|
|
else if(!collide_solid(player_x+1, player_y, level, gravity)) player_x+=1;
|
2020-06-28 17:38:12 +02:00
|
|
|
if(player_x>=388) player_x=-4;
|
2020-06-25 23:53:57 +02:00
|
|
|
|
|
|
|
}
|
2020-06-30 17:12:33 +02:00
|
|
|
else if(keydown(KEY_LEFT))
|
2020-06-25 23:53:57 +02:00
|
|
|
{
|
2020-06-30 19:13:03 +02:00
|
|
|
if(!collide_solid(player_x-PLAYER_SPEED, player_y, level, gravity)) player_x-=PLAYER_SPEED;
|
|
|
|
else if(!collide_solid(player_x-1, player_y, level, gravity)) player_x-=1;
|
2020-06-29 00:08:48 +02:00
|
|
|
if(player_x<-9) player_x=384;
|
|
|
|
}
|
2020-06-30 19:13:03 +02:00
|
|
|
if(keydown(KEY_SHIFT) && !check && (collide_solid(player_x, player_y-1, level, gravity) || collide_solid(player_x, player_y+1, level, gravity)))
|
2020-06-29 00:08:48 +02:00
|
|
|
{
|
|
|
|
if(!gravity) gravity=1;
|
|
|
|
else gravity=0;
|
|
|
|
check=1;
|
2020-06-25 23:53:57 +02:00
|
|
|
}
|
2020-06-29 00:08:48 +02:00
|
|
|
else if(!keydown(KEY_SHIFT) && check) check=0;
|
2020-06-30 17:12:33 +02:00
|
|
|
if(keydown(KEY_EXIT)) break;
|
2020-06-30 19:13:03 +02:00
|
|
|
if(!gravity)
|
2020-06-26 19:08:51 +02:00
|
|
|
{
|
2020-07-02 20:09:23 +02:00
|
|
|
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;
|
2020-06-26 01:46:28 +02:00
|
|
|
}
|
2020-06-30 19:13:03 +02:00
|
|
|
else
|
|
|
|
{
|
2020-07-02 20:09:23 +02:00
|
|
|
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;
|
2020-06-30 19:13:03 +02:00
|
|
|
}
|
2020-07-01 21:35:52 +02:00
|
|
|
if(collide_dead(player_x, player_y, level))
|
|
|
|
{
|
2020-07-02 20:09:23 +02:00
|
|
|
vspd = 1;
|
2020-07-01 21:35:52 +02:00
|
|
|
player_x = start_x;
|
|
|
|
player_y = start_y;
|
2020-07-02 00:00:04 +02:00
|
|
|
set_gravity(id_level, &gravity);
|
2020-07-01 21:35:52 +02:00
|
|
|
}
|
|
|
|
if(collide_end(player_x, player_y, level, gravity))
|
|
|
|
{
|
|
|
|
id_level++;
|
2020-07-02 00:00:04 +02:00
|
|
|
set_level(id_level, level, &start_x, &start_y, &gravity);
|
2020-07-01 21:35:52 +02:00
|
|
|
player_x = start_x;
|
|
|
|
player_y = start_y;
|
|
|
|
}
|
2020-06-30 19:13:03 +02:00
|
|
|
if(player_y>=212) player_y=-4;
|
|
|
|
if(player_y<-6) player_y=212;
|
2020-06-25 23:53:57 +02:00
|
|
|
}
|
2020-07-02 20:09:23 +02:00
|
|
|
timer_stop(timer);
|
2020-06-26 01:46:28 +02:00
|
|
|
return 0;
|
2020-06-25 23:53:57 +02:00
|
|
|
}
|