62 lines
1.4 KiB
C
62 lines
1.4 KiB
C
#include <gint/keyboard.h>
|
|
#include "draw.h"
|
|
#include "collide.h"
|
|
#include "levels.h"
|
|
|
|
void jump_test(char *jump_pressed, char *jump_buffer); //test if jump pressed
|
|
|
|
int main(void)
|
|
{
|
|
char level[100];
|
|
char *level_ptr;
|
|
level_ptr = level;
|
|
unsigned char level_id = 0;
|
|
char jump_pressed = 0; //avoid holding jump
|
|
char jump_buffer = 0; //jump buffer, last 3 frames
|
|
double vspd = 0; //player vertical speed
|
|
char hspd = 0; //player horizontal speed
|
|
char on_ground = 6; //remember if player is on solid
|
|
int player_x = 0;
|
|
int player_y = 0;
|
|
int old_x, old_y;
|
|
const double jump_spd = -4; //default jump speed
|
|
const double grav = 0.2;
|
|
dclear(0); //0 -> black
|
|
draw_level(level, &player_x, &player_y);
|
|
old_x = player_x + 1; //offset to draw it on first cycle
|
|
old_y = player_y;
|
|
get_level(level_id, level);
|
|
while (1) {
|
|
draw_player(old_x, old_y, player_x, player_y);
|
|
dupdate();
|
|
old_x = player_x;
|
|
old_y = player_y;
|
|
pollevent();
|
|
//horizontal movement
|
|
hspd = 0;
|
|
if (keydown(KEY_LEFT)) hspd--;
|
|
if (keydown(KEY_RIGHT)) hspd++;
|
|
if (!collide(player_x + hspd, player_y, level, '0', 10))
|
|
{
|
|
player_x += hspd;
|
|
}
|
|
//vertical movement
|
|
jump_test(&jump_pressed, &jump_buffer);
|
|
if (jump_buffer) {}//if jump is pressed
|
|
if (keydown(KEY_EXIT)) return 0; //exit
|
|
}
|
|
}
|
|
|
|
void jump_test(char *jump_pressed, char *jump_buffer)
|
|
{
|
|
if (keydown(KEY_SHIFT))
|
|
{
|
|
if (!*jump_pressed)
|
|
{
|
|
*jump_pressed = 1;
|
|
*jump_buffer = 3;
|
|
}
|
|
}
|
|
else *jump_pressed = 0;
|
|
}
|