link/src/main.c

175 lines
4.8 KiB
C

extern "C" {
#include <gint/display.h>
#include <gint/keyboard.h>
#include <gint/timer.h>
#include <gint/clock.h>
}
extern bopti_image_t img_player;
class Animation{
public:
int frame_1;
int frame_2;
int frame_3;
int frame_4;
int frame_5;
int get_data(int frame){
int f;
if(frame==0){f=frame_1;}
if(frame==1){f=frame_2;}
if(frame==2){f=frame_3;}
if(frame==3){f=frame_4;}
if(frame==4){f=frame_5;}
return f;
}
};
class Player{
public:
/* Position in map */
int x = 0;
int y = 0;
/* Direction currently facing */
int dir;// 0: left, 1: right
int vdir;
int rwalk;
//int animdata[10][5][2];
Animation anim_walk_left;
Animation anim_walk_right;
/* Animation and frame */
Animation anim_playing;
Animation anim_none_right;
Animation anim_none_left;
Animation anim_jump_right;
int twait;
int frame;
int anim =0;
int status; //1: normal, 2: roket, 3: code manipulation
int can_move;
void init(){
anim_walk_right = {0,1,2,3,4};
anim_walk_left = {5,6,7,8,9};
anim_none_right = {0,1,1,0,0};
anim_none_left = {5,6,6,5,5};
anim_jump_right = {1,3,3,3,3};
anim_playing = anim_none_right;
status = 1;
dir = 1;
vdir = 1; // 1:right 2:down 3:left 4:up
twait = 0;
frame = 0;
rwalk = 0;
can_move = 1;
}
void check_anim(){
if(status==1){
if(dir==0){anim_playing = anim_walk_left;}
if(dir==1){anim_playing = anim_walk_right;}
if(can_move==1&&dir==1){anim_playing = anim_none_right;}
if(can_move==1&&dir==0){anim_playing = anim_none_left;}
}
if(twait == 120){
twait = 0;
frame = frame + 1;
if(frame > 4){
frame = 0;
}
}
twait = twait + 1;
anim = anim_playing.get_data(frame);
}
void print(){
dsubimage(x, y,&img_player,0,anim*12,11, 11, DIMAGE_NONE);
dprint(1, 50, C_BLACK, "x=%d y=%d", x, y);
}
};
int select = 1;
int main(void){
extern bopti_image_t img_logo;
extern bopti_image_t img_button;
extern bopti_image_t img_nature;
int playing = 1;
int key = 0;
Player player;
player.init();
int opt = GETKEY_DEFAULT | GETKEY_REP_ARROWS | GETKEY_MENU;
int timeout = 1;
while(playing==1){
while(key != KEY_OPTN){
dclear(C_WHITE);
dimage(25, 3, &img_logo);
//dsubimage(40, 40,&img_player,0* 11, 0, 11, 11, DIMAGE_NONE);
if(select==1){dsubimage(35, 33,&img_button,0, 10, 42, 10, DIMAGE_NONE);}
else{dsubimage(35, 33,&img_button,0, 0, 42, 10, DIMAGE_NONE);}
if(select==2){dsubimage(35, 45,&img_button,0, 30, 42, 10, DIMAGE_NONE);}
else{dsubimage(35, 45,&img_button,0, 20, 42, 10, DIMAGE_NONE);}
dupdate();
key = getkey_opt(opt, NULL).key;
if(key == KEY_UP){select=1;}
if(key == KEY_DOWN){select=2;}
}
if(select==2){
key = 0;
while(1==1){
player.check_anim();
dclear(C_WHITE);
dprint(0, 3, C_BLACK, "anim=%d twait=%d frame=%d", player.anim,player.twait,player.frame);
//dtext(45, 3, C_BLACK, player.twait);
//dtext(55, 3, C_BLACK, player.frame);
player.print();
dupdate();
key = getkey_opt(opt, &timeout).key;
if(player.can_move == 1){
if(key == KEY_RIGHT){player.dir=1;player.vdir=1;player.rwalk=5;player.can_move=0;}
if(key == KEY_LEFT){player.dir=0;player.vdir=3;player.rwalk=5;player.can_move=0;}
if(key == KEY_UP){player.vdir=4;player.rwalk=5;player.can_move=0;}
if(key == KEY_DOWN){player.vdir=2;player.rwalk=5;player.can_move=0;}
}
if(player.can_move == 0 && player.rwalk>0 && player.twait== 50){
player.rwalk--;
if(player.vdir==1){player.x = player.x + 2;}
if(player.vdir==2){player.y = player.y + 2;}
if(player.vdir==3){player.x = player.x - 2;}
if(player.vdir==4){player.y = player.y - 2;}
if(player.rwalk==0){player.can_move = 1;}
}
}
}
if(select==1){
player.x = 30;
player.y = 30;
player.status = 2;
while(1==1){
player.check_anim();
dclear(C_WHITE);
dimage(0, 0, &img_nature);
player.print();
dupdate();
key = getkey_opt(opt, &timeout).key;
}
}
}
return 1;
}