binnworld/src/main.c

145 lines
4.2 KiB
C

extern "C"{
#include <gint/display.h>
#include <gint/keyboard.h>
//#include <gint/std/string.h>
}
#define MAP_X 100
using namespace std;
int sx = 0;
int x = 100;
int y = 30;
extern bopti_image_t img_tilemap;
int game_map[MAP_X+1][7] = {0};
int opt = GETKEY_DEFAULT | GETKEY_REP_ARROWS | GETKEY_MENU;
int optd = GETKEY_DEFAULT | GETKEY_MENU;
int timeout = 1;
int key;
int rwalk =0;
int can_move = 1;
int dir = 1;
int vdir;
int sele = 2;
int vas = 0;
int sinv = 3;
int isCollide(int num){
if(num==0){return 1;}
else if(num==3){return 1;}
else if(num==14){return 1;}
else if(num==15){return 1;}
else if(num==16){return 1;}
else{return 0;}
}
int isMultipleof5 (int n)
{
while ( n > 0 )
n = n - 5;
if ( n == 0 )
return 1;
return 0;
}
void PrintSblock(int num,int x,int y){
dsubimage(x*10, y*10+4 ,&img_tilemap,num*10,10,10, 10, DIMAGE_NONE);
}
void PrintMap(){
int cx = MAP_X;
int cy = 6;
dsubimage(118, 0 ,&img_tilemap,sinv*10,0,10, 10, DIMAGE_NONE);
dhline(11,C_BLACK);
while(cx>0){
cy = 6;
while(cy>0){
dsubimage(cx*10-sx, cy*10+4 ,&img_tilemap,game_map[cx][cy]*10,0,10, 10, DIMAGE_NONE);
/*if(game_map[cx][cy]==2&&game_map[cx][cy]>1&&game_map[cx][cy]<MAP_X){
if(game_map[cx-1][cy]==2&&game_map[cx+1][cy]==2){PrintSblock(4,cx,cy);}
if(game_map[cx-1][cy]!=2&&game_map[cx+1][cy]==2){PrintSblock(3,cx,cy);}
if(game_map[cx-1][cy]==2&&game_map[cx+1][cy]!=2){PrintSblock(5,cx,cy);}
}*/
cy--;
}
cx--;
}
if(dir==0){dsubimage(x-sx, y+4 ,&img_tilemap,5*10,0,10, 10, DIMAGE_NONE);}
if(dir==1){dsubimage(x-sx, y+4 ,&img_tilemap,4*10,0,10, 10, DIMAGE_NONE);}
if(vas==0&& keydown(KEY_VARS)){
if(sele==1){dsubimage(x+10-sx, y+4 ,&img_tilemap,0,20,10, 10, DIMAGE_NONE);}
if(sele==2){dsubimage(x-sx, y+4+10 ,&img_tilemap,0,20,10, 10, DIMAGE_NONE);}
if(sele==3){dsubimage(x-10-sx, y+4 ,&img_tilemap,0,20,10, 10, DIMAGE_NONE);}
if(sele==0){dsubimage(x-sx, y+4-10 ,&img_tilemap,0,20,10, 10, DIMAGE_NONE);}
}
if(vas==1){
if(sele==1){dsubimage(x+10-sx, y+4 ,&img_tilemap,10,20,10, 10, DIMAGE_NONE);}
if(sele==2){dsubimage(x-sx, y+4+10 ,&img_tilemap,10,20,10, 10, DIMAGE_NONE);}
if(sele==3){dsubimage(x-10-sx, y+4 ,&img_tilemap,10,20,10, 10, DIMAGE_NONE);}
if(sele==0){dsubimage(x-sx, y+4-10 ,&img_tilemap,10,20,10, 10, DIMAGE_NONE);}
}
}
int main(void)
{
int i = 10;
while(i<MAP_X-10){
game_map[i][5] = 1;
game_map[i][4] = 2;
i++;
if(i>10 && i<MAP_X-10 && isMultipleof5(i) == 1){
game_map[i][3] = 15;
game_map[i][2] = 15;
game_map[i][1] = 15;
game_map[i][0] = 17;
game_map[i-1][0] = 17;
game_map[i+1][0] = 17;
game_map[i-1][1] = 17;
game_map[i+1][1] = 17;
game_map[i-2][1] = 17;
game_map[i+2][1] = 17;
}
}
game_map[5][3] = 9;
game_map[6][3] = 10;
game_map[7][3] = 11;
while(1==1){
if(keydown(KEY_OPTN)){vas=1;}else{vas=0;}
sx = x-60;
dclear(C_WHITE);
//dtext(12, 1, C_BLACK, "item");
PrintMap();
dupdate();
key = getkey_opt(opt, &timeout).key;
if(keydown(KEY_VARS)==0&&can_move == 1 && game_map[x/10][y/10+1] != 0){
if(keydown(KEY_RIGHT)&&isCollide(game_map[x/10+1][y/10])){rwalk = 10;can_move=0;dir=1;vdir=1;}
if(keydown(KEY_LEFT)&&isCollide(game_map[x/10-1][y/10])){rwalk = 10;can_move=0;dir=0;vdir=3;}
}
if(keydown(KEY_VARS)){
if(keydown(KEY_RIGHT)){sele=1;}
if(keydown(KEY_DOWN)){sele=2;}
if(keydown(KEY_LEFT)){sele=3;}
if(keydown(KEY_UP)){sele=0;}
}
/*if(){
}*/
if(can_move == 1 && game_map[x/10][y/10+1] == 0){
can_move = 0;
rwalk=10;
vdir=2;
}
if(can_move==0&&rwalk>0){
rwalk--;
if(vdir==1){x++;}
if(vdir==2){y++;}
if(vdir==3){x--;}
if(rwalk==0){can_move = 1;}
}
}
getkey();
return 1;
}