⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 class_tank.java

📁 05年游戏学院一个学生写的项目
💻 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 + -