📄 class_tank.java
字号:
import java.io.IOException;
// Download by http://www.codefans.net
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.LayerManager;
public class Class_Tank extends Class_GameObject
{
Image imgBullet0,imgBullet1,imgBullet2,imgBullet3;
short dX,dY;
//速度
byte velocity;
//方向
byte direction;
//瞄准器旋转方式:顺时针或逆时针
byte aimRotaDir;
//瞄准角度
short aimAngle;
//生命值
short HP;
//生命值上限
short HPMax;
//是否朝右
boolean isTowardsRight;
//是否获得活动权限
boolean isActive;
//子弹
Class_Bullet bullet;
//是否处于瞄准状态
boolean isAim;
//是否处于蓄力状态
boolean isCharge;
//蓄力附加速度
int chargeV;
//出生点ID
byte CPID;
byte[] bulletCount;
static short[] sqrt={
0,
8,11,14,16,18,20,22,23,25,26,
27,28,30,31,32,33,34,35,36,37,
38,39,40,40,41,42,43,44,45,45,
46,47,48,48,49,50,50,51,52,52,
53,54,54,55,56,56,57,57,58,59,
59,60,60,61,62,62,63,63,64,64,
65,65,66,66,67,67,68,68,69,70,
70,70,71,71,72,72,73,73,74,74,
75,75,76,76,77,77,78,78,78,79,
79,80,80,81,81,81,82,82,83,83,
84,84,84,85,85,86,86,86,87,87,
88,88,88,89,89,90,90,90,91,91,
92,92,92,93,93,93,94,94,95,95,
95,96,96,96,97,97,97,98,98,98,
99,99,100,100,100,101,101,101,102,102,
102,103,103,103,104,104,104,105,105,105,
106,106,106,107,107,107,108,108,108,109,
109,109,110,110,110,110,111,111,111,112,
112,112,113,113,113,114,114,114,115,115,
115,115,116,116,116,117,117,117,118,118,
118,118,119,119,119,120,120,120
};
public Class_Tank(Image img,byte width, byte height,byte ID)
{
super(img, width, height);
try {
imgBullet0=Image.createImage("/imgBullet0.png");
imgBullet1=Image.createImage("/imgBullet1.png");
imgBullet2=Image.createImage("/imgBullet2.png");
imgBullet3=Image.createImage("/imgBullet3.png");
} catch (IOException e) {
e.printStackTrace();
}
velocity=2;
bullet=new Class_Bullet(imgBullet0,(byte)10,(byte)10);
switch(ID)
{
case 0:
{
isActive=true;
HP=60;
HPMax=60;
bulletCount=new byte[]{20,10,5,3};
break;
}
case 1:
{
HP=80;
HPMax=80;
bulletCount=new byte[]{20,10,3,2};
break;
}
case 2:
{
HP=100;
HPMax=100;
bulletCount=new byte[]{20,5,3,2};
break;
}
case 3:
{
HP=60;
HPMax=60;
bulletCount=new byte[]{30,10,5,3};
break;
}
case 4:
{
HP=80;
HPMax=80;
bulletCount=new byte[]{30,10,5,3};
break;
}
case 5:
{
HP=100;
HPMax=100;
bulletCount=new byte[]{30,10,5,3};
break;
}
}
}
//处理移动
public void setMove()
{
switch(direction)
{
case 0:dX=0;break;
case 1:setTransform(0);dX=(short) -velocity;isTowardsRight=false;break;
case 2:setTransform(2);dX=velocity;isTowardsRight=true;break;
}
move(dX,dY);
//根据出生点ID来决定该坦克的活动范围
if(getX()<Class_Map.createPosition[CPID][2]||getX()>Class_Map.createPosition[CPID][3])
{
move(-dX,-dY);
}
}
//处理瞄准
public void setAim(LayerManager lm)
{
if(isAim)
{
switch(aimRotaDir)
{
case 1:if(aimAngle<=87)aimAngle+=3;break;
case 2:if(aimAngle>=3)aimAngle+=-3;break;
}
}
}
//处理蓄力
public void setCharge()
{
if(isCharge)
{
if(chargeV>=160)
chargeV=0;
else chargeV+=8;
}
}
//处理开火
public void setFire(LayerManager lm)
{
if(!bullet.isVisible())
{
if(bulletCount[Canvas_Main.curBulType]<=0)
{
turnInit();
}
else
{
bulletCount[Canvas_Main.curBulType]--;
bullet.add(lm);
isActive=false;
isCharge=false;
//对子弹进行回合初始化
bullet.turnInit(this);
}
}
}
//回合初始化,用于保证下列参数每次进入回合后不受上一回合的影响
public void turnInit()
{
isActive=true;
aimAngle=0;
direction=0;
aimRotaDir=0;
isAim=false;
isCharge=false;
chargeV=0;
}
//绑定坦克出生点ID与坦克初始位置关系,返回值是出生点ID
public byte setCP(byte cpID)
{
setPosition(Class_Map.createPosition[cpID][0],Class_Map.createPosition[cpID][1]);
return cpID;
}
public void setBulSel()
{
switch(Canvas_Main.curBulType)
{
case 0:
{
bullet.setImage(imgBullet0,(byte)10,(byte)10);
bullet.damage=15;
break;
}
case 1:
{
bullet.setImage(imgBullet1,(byte)10,(byte)10);
bullet.damage=10;
break;
}
case 2:
{
bullet.setImage(imgBullet2,(byte)10,(byte)10);
bullet.damage=25;
break;
}
case 3:
{
bullet.setImage(imgBullet3,(byte)10,(byte)10);
bullet.damage=30;
break;
}
}
}
public void lockTarget(Class_Tank ct,byte AI)
{
if(ct.getRefPixelX()<getRefPixelX())
{
setTransform(0);
isTowardsRight=false;
}
else
{
setTransform(2);
isTowardsRight=true;
}
aimAngle=(byte) (AI*5+20);
int a=ct.getRefPixelX()-getRefPixelX();
int b=ct.getRefPixelY()-getRefPixelY();
try{
if(!isTowardsRight) chargeV=sqrt[a*a/(b-a)];
else chargeV=sqrt[a*a/(b+a)];
}catch(ArrayIndexOutOfBoundsException e)
{
chargeV=150;
}catch(ArithmeticException e1)
{
chargeV=80;
}
}
public void setLimit()
{
if(HP>HPMax)HP=HPMax;
if(HP<0)HP=0;
if(aimAngle<0)aimAngle=0;
if(aimAngle>90)aimAngle=90;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -