📄 bat.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 + -