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

📄 bat.java

📁 恶魔城-晓月圆舞曲 JAVA手機遊戲
💻 JAVA
字号:
import java.util.Random;

import javax.microedition.lcdui.Graphics;

public class Bat extends Enemy{
	private short[][] fly = new short[][]{
			{15,181,27,191,0,0,0,0},	
			{32,186,43,204,0,0,0,0},
			{48,181,61,200,0,-10,0,-10}
	};
	static final byte RIGHT_FlY = 0;
	static final byte LEFT_FlY = 1;
	static final byte DEAD = 2;
	static final byte DELETE = 3;
	byte att,def;
	byte hp;
	private byte count;
	private final short restTime = 1000;
	private long timeS;
	private boolean isRest;
	private boolean isAtt;
	private boolean acq;
	private final byte flyH = 127;//蝙蝠的出现的高度
	private byte steps;
	private short step[][]  = new short[4][2];
	private boolean isBack;
	public Bat()
	{
		initAction();
		initBase();
	}
	private void initBase()
	{
		setRoleY((short)flyH);
		brTime = 400;
		speed = 3;
		att = 10;
		def = 2;
		hp = 12;
		changState(RIGHT_FlY);
	}
	private void initAction()
	{
		actionFrame = new byte[]{
				(byte)fly.length,
				(byte)fly.length,
				(byte)dead.length,
				1
		};
	}
	protected boolean isDead() {
		if(enemyState==DEAD || enemyState==DELETE)
			return true;
		return false;
	}
	private void attackFly()
	{
		if(roleX<CastleCanvas.soma.roleX)
		{
			if(enemyState!=RIGHT_FlY )
				changState(RIGHT_FlY);
			roleX += speed+1;
		}
		else
		{
			if(enemyState!=LEFT_FlY )
				changState(LEFT_FlY);
			roleX -= speed+1;
		}
		if(roleY<CastleCanvas.soma.roleY)
			roleY += speed+1;
		if(hit(CastleCanvas.soma))
			isAtt = true;
	}
	private void backFly()
	{
		move();
		if(roleY>flyH)
			roleY -= speed;
		if(roleY<=flyH)
			isBack = true;
	}
	private void tickAI()
	{
		short dis = (short)(CastleCanvas.soma.roleX-roleX);
		if(isBack)
		{
			if(!isRest)
			{
				isRest = true;
				timeS = System.currentTimeMillis();
			}
			if(System.currentTimeMillis() - timeS >= restTime)
			{
				isRest = false;
				isAtt = false;
				isBack = false;
			}
		}
		if(!isBack && isAtt)
		{
			backFly();
		}
		if(Math.abs(dis)<50 && !isRest)
		{
			if(!isAtt)
				attackFly();
		}	
		else if(Math.abs(dis)<105 && Math.abs(dis)>=50 || isRest)
		{
			if(!isRest)
			{
				if(dis>=0)
				{
					if(enemyState!=RIGHT_FlY )
						changState(RIGHT_FlY);
					move();
				}
				else
				{
					if(enemyState!=LEFT_FlY)
						changState(LEFT_FlY);
					move();
				}
			}
			else
			{
				switch(enemyState)
				{
				case RIGHT_FlY:
					if(enemyState!=RIGHT_FlY )
						changState(RIGHT_FlY);
					move();
					break;
				case LEFT_FlY:
					if(enemyState!=LEFT_FlY )
						changState(LEFT_FlY);
					move();
					break;
				}
			}
		}
	}
	private void tickFly()
	{
		if(count<10)
			roleY--;
		else
			roleY++;
		count++;
		count%=20;
	}
	public void paint(Graphics g) {
		if(!isDead())
		{
			tickAI();
			tickFly();
		}
		tickEnemyXY();
		if(x<190 && x>-20 && y>-20 && y<240)
		switch(enemyState)
		{
		case RIGHT_FlY:
			drawRightFly(g);
			setDir(true);
			
			break;
		case LEFT_FlY:
			drawLeftFly(g);
			setDir(false);
			
			break;
		case DEAD:
			drawDead(g);
			changWaitState(DELETE);;
			break;
		case DELETE:
			CastleCanvas.enemy.removeElement(this);
			break;
		}
	}
	private void drawLeftFly(Graphics g)
	{
		tickArgmentMirror(fly);
		drawLeftRole(g,enemy);
	}
	private void drawRightFly(Graphics g)
	{
		tickArgment(fly);
		drawRightRole(g,enemy);
	}
	private void drawDead(Graphics g)
	{
		tickArgment(dead);
		drawRightRole(g,enemy);
	}
	protected void dead() {
		if(enemyState!=DEAD)
		{
			changState(DEAD);
		}
	}
//	byte maxS = 4;
//	if(!acq)
//	{
//		acq = true;
//		short cx = (short)Math.abs(roleX-Castle.soma.roleX);
//		short cy = (short)Math.abs(roleY-Castle.soma.roleY);
//		for(byte i=0;i<maxS;i++)
//		{
//			if(cx>=cy)
//			{
//				step[i][0] = (short)(cx/cy);
//				step[i][1] = 0;
//				if(cx!=0 && cy!=0)
//					cx -= (short)(cx/cy);
//			}
//			else
//			{
//				step[i][0] = 0;
//				step[i][1] = (short)(cy/cx);
//				if(cx!=0 && cy!=0)
//					cy -= (short)(cy/cx);
//			}
//		}
//	}
//	if((roleX-Castle.soma.roleX)>0)
//		roleX -= step[steps][0];
//	else
//	{
//		roleX += step[steps][0];
//	}
//	if((roleY-Castle.soma.roleY)<0)
//		roleY += step[steps][1];
//	else
//	{
//		roleY -= step[steps][1];
//	}
//	steps++;
//	if(steps>=maxS)
//	{
//		acq = false;
//		steps = 0;
//	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -