📄 plane.java
字号:
import java.util.Vector;
/**
* 英雄飞机类
* @author fantasyer
* @version 1.0
*/
class Plane
{
//飞机属性
//飞机的xy坐标、图片宽度和高度、速度、生命值、类型
int x, y, speed, life, kind;
//得分
static int score;
//飞机图片的高度和宽度
int width, height;
//子弹的类型和子弹的等级
int bulletType, bulletLevel;
//是否显示
boolean isVisible;
//是否无敌
boolean unbeatable;
/**
* 初始化飞机的相关属性
*/
Plane()
{
kind = Utility.HERO;
width = height = Utility.getSize(kind);
x = (Utility.GAME_WIDTH-width)/2;
y = Utility.GAME_HEIGHT-5;
speed = Utility.HERO_SPEED;
life = Utility.HERO_HP;
bulletType = Utility.BULLET_2;
bulletLevel = 1;
isVisible = true;
unbeatable = true;
}
/**
* 控制飞机的移动
* @param dir 飞机移动的方向
*/
public void move(int dir)
{
if (dir==Utility.MOVE_LEFT)
{
x -= speed;
}
else if (dir==Utility.MOVE_RIGHT)
{
x += speed;
}
else if (dir==Utility.MOVE_DOWN)
{
y += speed;
}
else if (dir==Utility.MOVE_UP)
{
y -= speed;
}
}
/**
* 返回Boss发出的子弹
* @return Object[] 发出的子弹数组
*/
public Object[] getBullets()
{
Vector v = new Vector();
if (bulletType==Utility.BULLET_2) //散弹
{
if (bulletLevel==1)
{
v.add(new Bullet(x+width/2-8, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
}
else if (bulletLevel==2)
{
v.add(new Bullet(x+width/2-8, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
v.add(new Bullet(x+width/2-8, y+3, 30, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
v.add(new Bullet(x+width/2-8, y+3, 330, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
}
else if (bulletLevel==3)
{
v.add(new Bullet(x+width/2-8, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
v.add(new Bullet(x+width/2-8, y+3, 30, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
v.add(new Bullet(x+width/2-8, y+3, 330, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
v.add(new Bullet(x+width/2-8, y+3, 60, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
v.add(new Bullet(x+width/2-8, y+3, 300, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
}
}
else if (bulletType==Utility.BULLET_3) //垂直子弹
{
if (bulletLevel==1)
{
v.add(new Bullet(x+width/2-10, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_3));
}
else if (bulletLevel==2)
{
v.add(new Bullet(x+width/2-20, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_3));
v.add(new Bullet(x+width/2, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_3));
}
else if (bulletLevel==3)
{
v.add(new Bullet(x+width/2-20, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_3));
v.add(new Bullet(x+width/2, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_3));
v.add(new Bullet(x, y-height/2, 270, 20, 40, Utility.UP_MOVE,Utility.BULLET_3));
v.add(new Bullet(x+width, y-height/2, 90, 20, 40,Utility.UP_MOVE, Utility.BULLET_3));
}
}
return v.toArray();
}
/**
* 运动区域的边界检测
*/
public void checkEdge()
{
if (x<0)
{
x = 0;
}
else if (x>(Utility.GAME_WIDTH-width))
{
x = Utility.GAME_WIDTH-width;
}
if (y<0)
{
y = 0;
}
else if (y>(Utility.GAME_HEIGHT-height))
{
y = Utility.GAME_HEIGHT-height;
}
}
/**
* 判断飞机和左上角为(x,y),宽width,高height的矩形是否相撞
* @param x 矩形左上角x坐标
* @param y 矩形左上角y坐标
* @param width 矩形的宽度
* @param height 矩形的高度
* @return boolean 如果相撞返回true,否则返回false
*/
public boolean isHit(int x, int y, int width, int height)
{
if ((x>=this.x+this.width)||(x+width<=this.x)||(y>=this.y+this.height)||(y+height<=this.y))
{
return false;
}
else
{
return true;
}
}
/**
* 判断飞机和圆心为(x,y),半径为r的圆型是否相撞(这里假设飞机的长度和宽度一样)
* @param x 圆心的x坐标
* @param y 圆心的y坐标
* @param r 圆的半径
* @return boolean 如果相撞返回true,否则返回false
*/
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;
}
}
/**
* 设置奖品类型
* @param kind 英雄吃到的奖品类型
*/
public void setAward(int kind)
{
if (kind==Utility.AWARD_1)
{
setBulletType(Utility.BULLET_2);
}
else if (kind==Utility.AWARD_2)
{
setBulletType(Utility.BULLET_3);
}
else if (kind==Utility.AWARD_3)
{
addLife(10);
}
}
/**
* 设置英雄的子弹类型
* @param kind 英雄的子弹类型
*/
public void setBulletType(int kind)
{
if (kind==bulletType) //如果相同,增加子弹的等级,最多到3级
{
if (bulletLevel==3)
{
return;
}
else
{
bulletLevel++;
}
}
else //如果不同,修改子弹的类型,等级为一
{
bulletType = kind;
bulletLevel = 1;
}
}
/**
* 获取子弹的类型
* @return int 英雄当前子弹的类型
*/
public int getBulletType()
{
return bulletType;
}
public boolean getVisible()
{
return isVisible;
}
public void setVisible(boolean value)
{
isVisible = value;
}
/**
* 增加分数
* @param value 分数增加的量
*/
public void addScore(int value)
{
score += value;
}
public int getScore()
{
return score;
}
public int getLife()
{
return life;
}
/**
* 降低生命值属性
* @param value 生命值降低的量
*/
public void desLife(int value)
{
//如果是无敌模式,则不掉生命值,比如飞机刚出生时
if(unbeatable)
{
return;
}
life -= value;
if (life<=0)
{
life = 0;
}
}
/**
* 增加生命值属性(不过还没有奖品能增加生命值)
* @param value 生命值增加的量
*/
public void addLife(int value)
{
life += value;
if (life>=Utility.HERO_HP)
{
life = Utility.HERO_HP;
}
}
/**
* 设置飞机的生命值
*/
public void setLife(int value)
{
life = value;
}
/**
* 设置飞机是否无敌
* @param value 飞机是否处于无敌状态
*/
public void setUnbeatable(boolean value)
{
unbeatable = value;
}
/**
* 获取
* @return boolean 如果为真,则飞机处于无敌状态
*/
public boolean getUnbeatable()
{
return unbeatable;
}
/**
* 设置飞机的位置在默认的起始位置
*/
public void setDefaultLocation()
{
x = (Utility.GAME_WIDTH-width)/2;
y = Utility.GAME_HEIGHT-5;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -