extern "C" { #include #include #include #include } 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; }