📄 enemy.java
字号:
for (int i = 1; i<=9; i++)
{
v.add(new Bullet(x+width/2, y+height+3, 180+i*10, 25, 10,Utility.DOWN_MOVE, Utility.BULLET_1));
v.add(new Bullet(x+width/2, y+height+3, 180-i*10, 25, 10,Utility.DOWN_MOVE, Utility.BULLET_1));
}
}
}
else if (kind==Utility.BOSS_4)
{
if (step==0)
{
for (int i = 0; i<10; i++)
{
v.add(new Bullet(x+width/2, y+height-30+i*15, 180, 25, 10,Utility.DOWN_MOVE, Utility.BULLET_1)); //子弹类型可以改变
}
step++;
}
else if (step==1)
{
for (int i = 0; i<6; i++)
{
v.add(new Bullet(x+width/3, y+height-30+i*15, 180, 25, 10,Utility.DOWN_MOVE, Utility.BULLET_1));
v.add(new Bullet(x+width*2/5, y+height-30+i*15, 180, 25, 10,Utility.DOWN_MOVE, Utility.BULLET_1));
v.add(new Bullet(x+width*3/5, y+height-30+i*15, 180, 25, 10,Utility.DOWN_MOVE, Utility.BULLET_1));
v.add(new Bullet(x+width*2/3, y+height-30+i*15, 180, 25, 10,Utility.DOWN_MOVE, Utility.BULLET_1));
}
step = 0;
}
}
return v.toArray();
}
/**
* 开火
*/
public boolean fire()
{
if (firetype==Utility.FIRE_RANDOM)
{
return fireRandom();
}
else if (firetype==Utility.FIRE_AT_RATE)
{
return fireAtRate();
}
return false;
}
/**
* 随机开火
*/
public boolean fireRandom()
{
if (r.nextInt(bulletSeed)==1)
{
return true;
}
else
{
return false;
}
}
/**
* 以固定的速率开火
*/
public boolean fireAtRate()
{
//抛物线发射速度快一点
if (kind==Utility.LEFT_CURVE_MOVE||kind==Utility.RIGHT_CURVE_MOVE)
{
if ((Utility.CURRENT_Y>=20)&&(Utility.CURRENT_Y%20==0)) //固定开火的速率
{
return true;
}
else
{
return false;
}
}
else
{
if ((Utility.CURRENT_Y>=40)&&(Utility.CURRENT_Y%40==0)) //固定开火的速率
{
return true;
}
else
{
return false;
}
}
}
/**
* 运动区域的边界检测(这里认为当飞机x坐标不在屏幕有效范围时依然可以显示,因为飞机初始的x坐标可能不再有效区域)
*/
public void checkEdge()
{
if (y>Utility.GAME_HEIGHT)
{
isVisible = false;
isDead = true;
}
}
/**
* 判断飞机和圆心为(x,y),半径为r的圆型是否相撞(这里假设飞机的长度和宽度一样)
* @param x 圆心的x坐标
* @param y 圆心的y坐标
* @param r 圆的半径
*/
public boolean isHit(int x, int y, int r)
{
double xcenter = this.x+width/2;
double ycenter = this.y+height/2;
double dis = (xcenter-x)*(xcenter-x)+(ycenter-y)*(ycenter-y);
if (dis<(r+width/2)*(r+width/2))
{
return true;
}
else
{
return false;
}
}
/**
* 设置不同的飞机类型产生奖品的可能性
*/
public void setAwardSeed()
{
if (kind==Utility.ENEMY_1)
{
awardSeed = 1; //不可能
}
else if (kind==Utility.ENEMY_2||kind==Utility.ENEMY_3)
{
awardSeed = 60; //1/60
}
else if (kind==Utility.ENEMY_4||kind==Utility.ENEMY_5)
{
awardSeed = 40; //1/40
}
else if (kind==Utility.ENEMY_6||kind==Utility.ENEMY_7)
{
awardSeed = 20; //1/20
}
else if (kind==Utility.ENEMY_8)
{
awardSeed = 3; //1/10
}
else
{
awardSeed = 1; //比如Boss等
}
}
/**
* 获取随机产生的奖品
* @return Award 返回随机获取的奖品,如果没有返回null
*/
public Award getAward()
{
if (r.nextInt(awardSeed)==2)
{
if (kind==Utility.ENEMY_2||kind==Utility.ENEMY_3||
kind==Utility.ENEMY_4||kind==Utility.ENEMY_5)
{
return new Award(x, y, 2, Utility.AWARD_1);
}
else if (kind==Utility.ENEMY_6||kind==Utility.ENEMY_7)
{
return new Award(x, y, 4, Utility.AWARD_2);
}
else if (kind==Utility.ENEMY_8)
{
return new Award(x, y, 4, Utility.AWARD_3);
}
else
{
return null;
}
}
else
{
return null;
}
}
/**
* 获取isVisible属性
* @return 控制飞机是否显示的isVisible属性
*/
public boolean getVisible()
{
return isVisible;
}
/**
* 设置isVisible的属性
* @param value 用于设置飞机的显示属性
*/
public void setVisible(boolean value)
{
isVisible = value;
}
/**
* 获取isDead属性
* @return 控制飞机是否死亡的isDead属性
*/
public boolean getDead()
{
return isDead;
}
/**
* 设置isDead的属性
* @param value 用于设置飞机死亡状态的属性
*/
public void setDead(boolean value)
{
isDead = value;
}
/**
* 获取敌机的生命值
* @return int 敌机剩余的生命值
*/
public int getLife()
{
return life;
}
/**
* 降低敌机的生命值
* @param value 敌机损失的生命值
*/
public void decLife(int value)
{
life -= value;
}
/**
* 克隆飞机对象
* @return 根据已有属性构建新的敌机对象
*/
public Object clone()
{
Cloneable c = new Enemy(startY, x, y, xspeed, yspeed, movetype,
firetype, life, kind);
return c;
}
/**
* 实现Comparable接口,可以对对象进行排序
* @param o 需要进行比较的对象
* @return int -1,0,1分别表示小于,等于,大于
*/
public int compareTo(Object o)
{
Enemy e = (Enemy)o;
if (startY<e.startY)
{
return-1;
}
else if (startY>e.startY)
{
return 1;
}
else
{
if (x<e.x)
{
return-1;
}
else if (x>e.x)
{
return 1;
}
else
{
return 0;
}
}
} //CompareTo function
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -