175 lines
4.8 KiB
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;
|
|
}
|