📄 game.cpp
字号:
game_blit(-1,1);
while (game_key(0)||game_key(1)) world.noop(0);
while (lkpressed()) lkgetch(0);
return 0;
}
int TEXPRESS::menu_choice(int max,char *argv[],int dark,int actor_face,int color,int startx,int starty)
{ short i,j,k,ok,start,index;
short boxx=20, boxy=starty;
short len,wid,pic,g,count=7;
short ylist[16],l;
short inst_win[4]={ 0,10+starty+5*34, 320,240 };
int step=100;
char line[80],*p;
layer.active(0);
if (dark) for (j=0;j<240;j++) for (i=0;i<320;i++)
lpixel(i,j,color_map.data[240][lrpixel(i,j)]);
put_box(startx,starty,5,5);
if (actor_face>=0) put_status(actor_face,boxx,boxy);
for (i=0;i<12;i++) ylist[i]=starty+24+i*20;
scr_save();
while (game_key(0)||game_key(1));
while (lkpressed()) lkgetch(0);
for (index=0,ok=0,start=0;ok==0;)
{ scr_restore();
for (i=0;i<count&&start+i<max;i++)
{ p=argv[start+i];
if (p) {
lsetColor(color);
express.outtextxy(startx+20,ylist[i],p,0);
}
}
put_selector(startx+5*17,ylist[index]-1,5*34-10);
sprintf(line,"金%6d",LGAME.money);
lsetColor(c_dark);
express.put_button(217,2,line);
game_blit(-1,1);
while (!lkpressed()) world.noop(game_delay);
lkgetch(&k);
switch (k)
{ case KEY_UP: if (--index<0) index=0,start--;
if (start<0) start=0;
break;
case KEY_DOWN: if (start+index<max-1)
if (++index>=count) index=count-1,start++;
if (start>max-count) start=max-count;
if (start<0) start=0; break;
case KEY_PGUP: start-=count; if (start<0) start=0; break;
case KEY_PGDN: start+=count; if (start>max-count) start=max-count;
if (start<0) start=0; break;
case KEY_ALT: case KEY_ESC: ok=-1; break;
case KEY_SPACE: case KEY_ENTER: case KEY_CTRL:
ok=1;
break;
}
}
if (ok==-1) return -1;
return start+index;
}
int TEXPRESS::actor_choice()
{ short len,wid,xx[4],my_id;
short ac[3],i,j,ok,count,k;
short x,y,my_x,my_y=180;
static char save[320*240+10];
lgetSize(&len,&wid,syspic.LpcImage[20]);
xx[1]=160-len/2;
xx[0]=160-80-len/2;
xx[2]=160+80-len/2;
for (i=0;i<3;i++) ac[i]=-1;
for (i=0,j=0,count=0;i<3;i++) {
k=game_findactor(i);
if (k>=0) ac[j++]=i,count++;
}
while (game_key(0)||game_key(1)) world.noop(game_delay);
while (lkpressed()) lkgetch(0);
if (count==0) return -1;
layer.active(0);
lgetBlock(0,0,319,239,save);
for (j=0,ok=0;ok==0;)
{ lputBlock(0,0,save);
for (i=0;i<count;i++)
{ my_x=xx[ac[i]]; my_id=ac[i];
put_status(my_id,my_x,my_y);
if (i!=j) {
for (y=0;y<wid;y++) for (x=0;x<len;x++)
lpixel(x+my_x,y+my_y,color_map.data[240][lrpixel(x+my_x,y+my_y)]);
}
}
game_blit(-1,1);
while (!lkpressed()) world.noop(game_delay);
lkgetch(&k);
switch (k)
{ case KEY_LEFT: if (--j<0) j=0; break;
case KEY_RIGHT: if (++j>=count) j=count-1; break;
case KEY_ALT: case KEY_ESC: ok=-1; break;
case KEY_ENTER: case KEY_SPACE: case KEY_CTRL: ok=1; break;
}
}
if (ok==-1) return -1;
return j;
}
int TEXPRESS::goods_choice(int _movie,int mode)
{ short i,j,k,ok,start,index;
short startx=128,starty=18;
short boxx=20, boxy=starty;
short len,wid,pic,g,count=7;
short ylist[16],l;
short inst_win[4]={ 0,10+starty+5*34, 320,240 };
int step=100;
char line[80];
char text1[40];
char text2[40];
layer.active(0);
if (_movie) {
for (j=0;j<240;j++) for (i=0;i<320;i++)
lpixel(i,j,color_map.data[240][lrpixel(i,j)]);
scr_save();
for (i=200,k=0;k==0;)
{ world.noop(game_delay);
scr_restore();
layer.active(0);
i-=32; if (i<0) i=0,k=1;
put_box(startx+i,starty,5,5);
game_blit(-1,1);
}
}
put_box(startx,starty,5,5);
lputBlock(boxx,boxy,syspic.LpcImage[19]);
for (i=0;i<12;i++) ylist[i]=starty+24+i*20;
scr_save();
while (game_key(0)||game_key(1));
while (lkpressed()) lkgetch(0);
for (index=0,ok=0,start=0;ok==0;)
{ g=LGAME.goods[start+index];
scr_restore();
lgetSize(&len,&wid,syspic.LpcImage[19]);
if (g>=0) {
pic=goods_dat[g].pic;
lputImage(boxx+len/2-24,boxy+wid/2-23,syspic.LpcImage[goods+pic]);
}
for (i=0;i<count;i++)
{ g=LGAME.goods[start+i];
if (g>=0) {
lsetColor(c_dark); text1[0]=0;
louttextxy(startx+20,ylist[i],goods_dat[g].name);
lsetColor(c_white);
louttextxy(inst_win[0],inst_win[1]-10,"说明:");
if (goods_dat[g].mode>=0||goods_dat[g].mode<=3)
sprintf(text1,"%3d%4d",goods_dat[g].ahp,goods_dat[g].dmp);
lsetColor(c_blue);
if (mode==1) louttextxy(startx+20+80,ylist[i],text1);
lsetColor(c_white);
if (i==index) louttext(inst_win,goods_dat[g].inst);
} else {
lsetColor(c_dark);
louttextxy(startx+20,ylist[i],"无");
}
}
put_selector(startx+5*17,ylist[index]-1,5*34-10);
game_blit(-1,1);
while (!lkpressed()) world.noop(game_delay);
lkgetch(&k);
switch (k)
{ case KEY_UP: if (--index<0) index=0,start--;
if (start<0) start=0;
break;
case KEY_DOWN: if (index+start<MAX_GOODS-1)
if (++index>=count) index=count-1,start++;
if (start>MAX_GOODS-count) start=MAX_GOODS-count;
if (start<0) start=0; break;
case KEY_PGUP: start-=count; if (start<0) start=0; break;
case KEY_PGDN: start+=count; if (start>MAX_GOODS-count) start=MAX_GOODS-count;
if (start<0) start=0; break;
case KEY_ALT: case KEY_ESC: ok=-1; break;
case KEY_SPACE: case KEY_ENTER: case KEY_CTRL:
if (mode==0) { ok=1; break; }
g=LGAME.goods[start+index]; if (g<0) break;
if (goods_dat[g].mode==3||goods_dat[g].mode==4)
{ out_say(5,0,"现在还无法使用");
while (game_key(0)||game_key(1));
while (lkpressed()) lkgetch(NULL);
break;
}
l=actor_choice(); if (l<0) break;
if (yes_no()) LGAME.goods_use(start+index,l);
break;
}
}
if (ok==-1) return -1;
return start+index;
}
int TEXPRESS::movie(int m)
{ int i,j,k;
scr_save();
switch (m)
{ case 0: for (i=200,j=20,k=0;k==0;)
{ world.noop(game_delay);
scr_restore();
layer.active(0);
i-=j; if (i<0) i=0, k=1;
put_button(80,80,i,-1);
game_blit(-1,1);
}
break;
case 1: for (i=200,k=0;k==0;)
{ world.noop(game_delay);
scr_restore();
layer.active(0);
i-=32; if (i<0) i=0,k=1;
put_box(main_bx+i,main_by,4,5);
game_blit(-1,1);
}
break;
case 2: for (i=0,j=13;i<45;i+=4)
{ world.noop(game_delay);
scr_restore();
layer.active(0);
lsetColor(j--);
put_rectangle(main_bx+15,main_by+15,main_bx+34*4-1-15,main_by+34*5-1-15,i);
game_blit(-1,1);
if (j<0) j=0;
}
put_box(main_bx,main_by,4,5);
game_blit(-1,1);
break;
}
return 0;
}
int TEXPRESS::put_selector(int mx,int my,int len)
{ int i,width=(len/2)/20;
lputImage(mx-len/2,my-10+1,syspic.LpcImage[9]);
lputImage(mx+len/2-20,my-10+1,syspic.LpcImage[11]);
for (i=0;i<width;i++)
{ lputImage(mx-i*20-20,my-10+1,syspic.LpcImage[10]);
lputImage(mx+i*20,my-10+1,syspic.LpcImage[10]);
}
return 0;
}
int TEXPRESS::put_rectangle(int x1,int y1,int x2,int y2,int step)
{ int left,top,right,bottom,dy,dx;
int mx=(x1+x2)/2+1, my=(y1+y2)/2+1;
int len=x2-x1+1, wid=y2-y1+1, div_num=7;
dy=wid/div_num; dx=len*2/div_num;
left=mx-dx-step/2; right=mx+dx+step/2;
top =my+dy-step*2; bottom=my-dy+step*2;
if (left<x1) left=x1;
if (right>x2) right=x2;
if (top<y1) top=y1;
if (bottom>y2) bottom=y2;
lrectangle(left,top,right,bottom);
return 0;
}
int TEXPRESS::put_button(int x,int y,int step,int choice)
{ int i,down[4],t[4];
for (i=0;i<4;i++) down[i]=0,t[i]=0;
if (choice>0&&choice<=4) down[choice-1]=3,t[choice-1]=4;
if (choice>=-4&&choice<0) t[-1-choice]=4;
lputSpirit(x,y-32-step+down[0],syspic.LpcImage[button+0+t[0]]);
lputSpirit(x,y+32+step+down[1],syspic.LpcImage[button+3+t[1]]);
lputSpirit(x-40-step,y+down[2],syspic.LpcImage[button+1+t[2]]);
lputSpirit(x+40+step,y+down[3],syspic.LpcImage[button+2+t[3]]);
return 0;
}
int TEXPRESS::put_button(int x,int y,char *line)
{ short len,wid,sl=strlen(line)*8;
lgetSize(&len,&wid,syspic.LpcImage[12]);
lputImage(x,y,syspic.LpcImage[12]);
louttextxy(x+len/2-sl/2+1,y+16,line);
return 0;
}
int TEXPRESS::put_status(int actor_id,int x,int y)
{ int lhp,lmp,i=actor_id;
int chp=c_green, cmp=c_blue;
if (actor_id<0||actor_id>2) return -1;
lputImage(x,y,syspic.LpcImage[20+actor_id]);
if (LGAME.ac[i].hp<0) LGAME.ac[i].hp=0;
if (LGAME.ac[i].mp<0) LGAME.ac[i].mp=0;
if (LGAME.ac[i].hp>LGAME.ac[i].mhp) LGAME.ac[i].hp=LGAME.ac[i].mhp;
if (LGAME.ac[i].mp>LGAME.ac[i].mmp) LGAME.ac[i].mp=LGAME.ac[i].mmp;
lhp=44*LGAME.ac[i].hp/LGAME.ac[i].mhp;
lmp=44*LGAME.ac[i].mp/LGAME.ac[i].mmp;
if (lhp<22) chp=c_red;
if (LGAME.ac[i].hp>0) {
lsetColor(chp);
lbar(x+1,y+1+44-lhp,x+2,y+44);
}
if (LGAME.ac[i].mp>0) {
lsetColor(cmp);
lbar(x+43,y+1+44-lmp,x+44,y+44);
}
return 0;
}
int TEXPRESS::put_box(int x,int y,int len,int wid)
{ int i,j,plen=34,m=len-2,n=wid-2;
if (m<0||n<0) return -1;
lputBlock(x,y,syspic.LpcImage[0]);
lputBlock(x+(len-1)*plen,y,syspic.LpcImage[2]);
lputBlock(x,y+(wid-1)*plen,syspic.LpcImage[6]);
lputBlock(x+(len-1)*plen,y+(wid-1)*plen,syspic.LpcImage[8]);
for (i=0;i<m;i++)
{ lputBlock(x+(i+1)*plen,y,syspic.LpcImage[1]);
lputBlock(x+(i+1)*plen,y+(wid-1)*plen,syspic.LpcImage[7]);
}
for (j=0;j<n;j++)
{ lputBlock(x,y+(j+1)*plen,syspic.LpcImage[3]);
lputBlock(x+(len-1)*plen,y+(j+1)*plen,syspic.LpcImage[5]);
}
for (j=0;j<n;j++) for (i=0;i<m;i++)
lputBlock(x+(i+1)*plen,y+(j+1)*plen,syspic.LpcImage[4]);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -