📄 swordcanvas.java
字号:
screen[ii+16]=Image.createImage(16,16);
g1=screen[ii+16].getGraphics();
g1.drawImage(screenPic,-(ii+68)%10*16,-(ii+68)/10*16,0);
g1=null;
}
break;
case 5:
screen=new Image[22];
for(int ii=0;ii<6;ii++)
{
screen[ii+16]=Image.createImage(16,16);
g1=screen[ii+16].getGraphics();
g1.drawImage(screenPic,-(ii+77)%10*16,-(ii+77)/10*16,0);
g1=null;
}
break;
case 6:
screen=new Image[19];
for(int ii=0;ii<3;ii++)
{
screen[ii+16]=Image.createImage(16,16);
g1=screen[ii+16].getGraphics();
g1.drawImage(screenPic,-(ii+83)%10*16,-(ii+83)/10*16,0);
g1=null;
}
break;
default:
break;
}
for(int ii=0;ii<16;ii++)
{
screen[ii]=Image.createImage(16,16);
g1=screen[ii].getGraphics();
g1.drawImage(screenPic,-ii%10*16,-ii/10*16,0);
g1=null;
}
screenPic=null;
if(imgNPC==null)
imgNPC=Image.createImage("/NPCSprite.png");
if(spic==null)
{
spic=new Image[6];
for(int i=0;i<6;i++)
spic[i]=Image.createImage("/"+String.valueOf(i)+".png");
}
if(imgHero==null)
imgHero=Image.createImage("/player.png");
if(atpic==null)
atpic=Image.createImage("/attackSprite.png");
}
catch(java.io.IOException ioe)
{
}
}
int getExperience(int s)
{
return(s*(s+1)*(2*s+1)*25/6);
}
public void changeMap(int l)
{
isTranMenu=false;
sl=l;
x=startX[sl];
y=startY[sl];
if(x>=w/2)
{
if(x<=W[sl]*16-w/2)
x0=x-w/2;
else
x0=W[sl]*16-w;
}
else
x0=0;
if(y>=h/2)
{
if(y<=H[sl]*16-h/2)
y0=y-h/2;
else
y0=H[sl]*16-h;
}
else
y0=0;
is=getClass().getResourceAsStream("/Screen"+toString(sl)+".dat");
readMap(is);
if(sl!=6)
{
is=getClass().getResourceAsStream("/sprite"+toString(sl)+".dat");
readSprite(is);
}
changeMapTask=null;
changeMapTask=new TimerTask(this,13);
timer.schedule(changeMapTask,0,200);
isChange=true;
}
public void cancelMove()
{
moveTask.cancel();
moveTask=null;
}
public void cancelAttackTask()
{
attackTask.cancel();
while(attackTask.cancel())
{
}
attackTask=null;
}
public void move()
{
if(direction%3==0&&step==0)//||direction%3==0)
{
if(getMapMark()>1&&getMapMark()<10)//对话NPC出现的Tile
{
if(getMapMark()==4)
{
if(tn[0]==10&&tn[1]==5&&tn[2]==10&&tn[3]==5)
message(4);
}
else
message(getMapMark());
cancelMove();
direction=direction/3*3;
repaint();
}
else
if(getMapMark()==99)//场景出入口
{
if(hasBoat)
{
isTranMenu=true;
i=0;
}
else
strTip="请去找船工买船";
cancelMove();
direction=direction/3*3;
repaint();
}
else
if(getMapMark()==97)
{
cancelMove();
if(tn[0]==10&&tn[1]==5&&tn[2]==10&&tn[3]==5&&tn[4]==20)
setAttack(1,15);
else
{
isTranMenu=true;
direction=direction/3*3;
repaint();
}
}
else
if(getMapMark()==98)
{
cancelMove();
int ii=getRandom(2*sl+1)*10;
gold+=ii*(2*sl+1);
strTip=ii>0?"获得"+toString(ii*(2*sl+1))+"两银子":"一无所获";
switch(direction/3)
{
case 1:
if(y<H[sl]*16-32)
mapArray[((y+31)/16+1)*W[sl]+x/16]=mapArray[(y+31)/16*W[sl]+x/16];
break;
case 0:
if(x!=0)
mapArray[(y+31)/16*W[sl]+x/16-1]=mapArray[(y+31)/16*W[sl]+x/16];
break;
case 3://向右
if(x!=W[sl]*16-16)
mapArray[(y+31)/16*W[sl]+x/16+1]=mapArray[(y+31)/16*W[sl]+x/16];
break;
case 2://向上
if(y!=0)
mapArray[((y+31)/16-1)*W[sl]+x/16]=mapArray[(y+31)/16*W[sl]+x/16];
break;
}
repaint();
}
else
if(getMapMark()>10&&getMapMark()<21)
{
setAttack(getEnemyNum(),getMapMark()-10);
if(!isFighting)
{
if(direction%3==0&&step==0)
{
direction+=1;
step=1;
}
if(direction%3==0&&step==1)
{
direction+=2;
step=0;
}
if(direction%3==1||direction%3==2)
direction=direction/3*3;
switch(direction)
{
case 7://向上1
y-=speed;
if(y0>0&&y-y0<=h/2)
y0-=speed;
repaint();
break;
case 4://向下1
y+=speed;
if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2)
y0+=speed;
repaint();
break;
case 1://向左1
x-=speed;
if(x0>0&&x-x0<=w/2)
x0-=speed;
repaint();
break;
case 10://向右1
x+=speed;
if(x0<(W[sl]-w/16)*16&&x-x0>=w/2)
x0+=speed;
repaint();
break;
default://静止状态
repaint();
break;
}
}
else
{
switch(direction/3)
{
case 0://向左
x-=16;
break;
case 1://向下
y+=16;
break;
case 2://向上
y-=16;
break;
case 3://向右
x+=16;
break;
}
if(x>=w/2)
{
if(x<=W[sl]*16-w/2)
x0=x-w/2;
else
x0=W[sl]*16-w;
}
else
x0=0;
if(y>=64)
{
if(y<=H[sl]*16-h/2)
y0=y-h/2;
else
y0=H[sl]*16-h;
}
else
y0=0;
}
cancelMove();
}
else
if(getMapMark()==1)
{
if(direction%3==0&&step==0)
{
direction+=1;
step=1;
}
else
if(direction%3==0&&step==1)
{
direction+=2;
step=0;
}
else
if(direction%3==1||direction%3==2)
direction=direction/3*3;
switch(direction)
{
case 7://向上1
y-=speed;
if(y0>0&&y-y0<=h/2)
y0-=speed;
repaint();
break;
case 4://向下1
y+=speed;
if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2)
y0+=speed;
repaint();
break;
case 1://向左1
x-=speed;
if(x0>0&&x-x0<=w/2)
x0-=speed;
repaint();
break;
case 10://向右1
x+=speed;
if(x0<(W[sl]-w/16)*16&&x-x0>=w/2)
x0+=speed;
repaint();
break;
default://静止状态
repaint();
break;
}
}
else
{
moveTask.cancel();
moveTask=null;
direction=direction/3*3;
repaint();
}
}
else
{
if(direction%3==0&&step==0)
{
direction+=1;
step=1;
}
else
if(direction%3==0&&step==1)
{
direction+=2;
step=0;
}
else
if(direction%3==1||direction%3==2)
direction=direction/3*3;
switch(direction)
{
case 6:
if(step==1)//向上2
{
y-=speed;
if(y0>0&&y-y0<=h/2)
y0-=speed;
repaint();
}
if(step==0)//向上4
{
y-=speed;
if(y0>0&&y-y0<=h/2)
y0-=speed;
if(!isWalking)
cancelMove();
repaint();
}
break;
case 7://向上1
y-=speed;
if(y0>0&&y-y0<=h/2)
y0-=speed;
repaint();
break;
case 8://向上3
y-=speed;
if(y0>0&&y-y0<=h/2)
y0-=speed;
repaint();
break;
case 3:
if(step==1)
{
y+=speed;
if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2)
y0+=speed;
repaint();
}
if(step==0)
{
y+=speed;
if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2)
y0+=speed;
repaint();
if(!isWalking)
cancelMove();
}
break;
case 4://向下1
y+=speed;
if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2)
y0+=speed;
repaint();
break;
case 5://向下2
y+=speed;
if(y0<(H[sl]-(h+15)/16)*16&&y-y0>=h/2)
y0+=speed;
repaint();
break;
case 0:
if(step==1)
{
x-=speed;
if(x0>0&&x-x0<=w/2)
x0-=speed;
repaint();
}
if(step==0)
{
x-=speed;
if(x0>0&&x-x0<=w/2)
x0-=speed;
repaint();
if(!isWalking)
cancelMove();
}
break;
case 1://向左1
x-=speed;
if(x0>0&&x-x0<=w/2)
x0-=speed;
repaint();
break;
case 2://向左2
x-=speed;
if(x0>0&&x-x0<=w/2)
x0-=speed;
repaint();
break;
case 9:
if(step==1)
{
x+=speed;
if(x0<(W[sl]-w/16)*16&&x-x0>=w/2)
x0+=speed;
repaint();
}
if(step==0)
{
x+=speed;
if(x0<(W[sl]-w/16)*16&&x-x0>=w/2)
x0+=speed;
repaint();
if(!isWalking)
cancelMove();
}
break;
case 10://向右1
x+=speed;
if(x0<(W[sl]-w/16)*16&&x-x0>=w/2)
x0+=speed;
repaint();
break;
case 11://向右2
x+=speed;
if(x0<(W[sl]-w/16)*16&&x-x0>=w/2)
x0+=speed;
repaint();
break;
default://静止状态
repaint();
break;
}
}
}
public void setAttack(int k)
{
attackTask=null;
switch(k)
{
case 0:
if(energy>=10*skillArray[0])
{
attackTask=new TimerTask(this,4);
energy-=10*skillArray[0];
isAttMenu=false;
if(isHiding)
{
isHiding=!isHiding;
SPI[0].p=130;
}
}
break;
case 1:
if(energy>=10*skillArray[1])
{
attackTask=new TimerTask(this,5);
energy-=10*skillArray[1];
isAttMenu=false;
if(isHiding)
{
isHiding=!isHiding;
SPI[0].p=130;
}
}
break;
case 2:
if(energy>=20*skillArray[2]&&life>=4*skillArray[2]*maxlife/100)
{
attackTask=new TimerTask(this,6);
energy-=20*skillArray[2];
life-=4*skillArray[2]*maxlife/100;
SPI[0].life=life;
isAttMenu=false;
if(isHiding)
{
isHiding=!isHiding;
SPI[0].p=130;
}
}
break;
case 3:
if(energy>=(20*skillArray[3]))
{
SPI[1]=new Sprite(8*skillArray[3]*skillArray[3]+40,4*skillArray[3]*skillArray[3]+10);
SPI[1].p=120;
SPI[1].x=36;
SPI[1].y=112+32+40;
energy-=20*skillArray[3];
isAttMenu=false;
attackNumber=4;
repaint();
}
break;
case 4://召熊
if(energy>=(30*skillArray[4]))
{
SPI[2]=new Sprite(20*skillArray[4]*skillArray[4]+60,skillArray[4]*skillArray[4]+7);
SPI[2].p=100;
SPI[2].x=36;
SPI[2].y=64+32+40;
energy-=30*skillArray[4];
isAttMenu=false;
attackNumber=4;
repaint();
}
break;
case 5:
if(energy>=30*skillArray[5])
{
SPI[3]=new Sprite(10*skillArray[5]*skillArray[5]+40,0);
SPI[3].p=110;
SPI[3].x=36;
SPI[3].y=32+32+40;
energy-=30*skillArray[5];
isAttMenu=false;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -