import java.io.IOException;
import java.util.Random;
import java.util.Vector;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.Sprite;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author wizardyx
*/
/* 敌人飞机*/
public class Enemy {
private GameLevel glevel; //关卡对象
private Image imgEnemy[]; //飞机类型图像
private Sprite [] sprEnemy; //飞机类型精灵数组
private int[][] path1; //飞行路径数据
private int[][] path2;
private int[][] path3;
private int[][] path4;
private int[][] planeInfo; //敌机数据
private int stayTimes; //当前敌机的停留时间
private int num; //下一个要显示在屏幕上的敌机的索引值
private Vector v; //v存放当前需要显示敌人的数据数组
private Random r; //随机数,用于计算子弹随机发射
private EnemyBullet ebullet; //敌机子弹
Bonus bonus; //奖励
/* 构造方法*/
public Enemy(GameLevel glevel){
initImage();
initLevelResource();
this.glevel=glevel;
}
/* 初始化图像和精灵*/
private void initImage() {
imgEnemy=new Image[5];
try {
imgEnemy[0] = Image.createImage("/plane0.png"); //小飞机图像
imgEnemy[1] = Image.createImage("/plane1.png"); //直升机图像
imgEnemy[2] = Image.createImage("/plane2.png"); //霰弹机图像
imgEnemy[3] = Image.createImage("/turret.png"); //Boss机炮塔图像
imgEnemy[4] = Image.createImage("/boss.png"); //Boss机图像
} catch (IOException ex) {
ex.printStackTrace();
}
sprEnemy=new Sprite[5];
sprEnemy[0]=new Sprite(imgEnemy[0] ,16,16); //小飞机精灵
sprEnemy[1]=new Sprite(imgEnemy[1] ,26,35); //直升机精灵
sprEnemy[2]=new Sprite(imgEnemy[2] ,64,50); //霰弹机精灵
sprEnemy[3]=new Sprite(imgEnemy[3] ,15,20); //Boss机炮塔精灵
sprEnemy[4]=new Sprite(imgEnemy[4] ,64,40); //Boss机精灵
//设置各个精灵的参考点
sprEnemy[0].defineReferencePixel(sprEnemy[0].getWidth()/2,sprEnemy[0].getHeight()/2 );
sprEnemy[1].defineReferencePixel(sprEnemy[1].getWidth()/2,sprEnemy[1].getHeight()/2 );
sprEnemy[2].defineReferencePixel(sprEnemy[2].getWidth()/2,sprEnemy[2].getHeight()/2 );
sprEnemy[3].defineReferencePixel(sprEnemy[3].getWidth()/2,sprEnemy[3].getHeight()/2 );
sprEnemy[4].defineReferencePixel(sprEnemy[4].getWidth()/2,sprEnemy[4].getHeight()/2 );
}
/* 初始化关卡资源 */
private void initLevelResource() {
v = new Vector();
r = new Random();
//路径数据,数组中每个元素记录了该路径点的X坐标,Y坐标,帧ID,停留时间
path2=new int[][]{{200,0,0,0},{200,100,0,50},{100,100,0,0},{200,200,0,20},{200,300,0,0}};
path3=new int[][]{{20,0,0,0},{20,100,0,0},{200,100,0,0},{200,200,0,0},{200,300,0,0}};
path1=new int[][]{{0,0,0,0},{100,0,2,0},{100,100,4,0},{200,200,3,0},{240,100,2,0}};
path4=new int[][]{{0,0,0,0},{100,0,0,0},{100,100,0,0},{200,50,0,0},{100,100,0,0}};
//飞机数据,数组中每个元素记录了飞机的类别,初始x坐标,初始y坐标,目标点索引,图像帧,速度,间隔/停留时间,路径索引,生命值,飞机所带宝物编号
planeInfo=new int[][] {
{0,0,0,0,0,2,0,0,2,1},{0,0,0,0,0,2,10,0,2,2},{0,0,0,0,0,2,10,0,2,3},{0,0,0,0,0,2,10,0,2,0},
{1,-20,0,0,0,2,0,1,10,1},{1,0,0,0,0,2,100,1,10,2},{1,0,0,0,0,2,120,1,10,3},{1,0,0,0,0,2,120,1,10,1},
{2,0,0,0,0,2,0,2,15,1},{2,0,0,0,0,2,100,2,15,0},{2,0,0,0,0,2,100,2,15,0},{2,0,0,0,0,2,100,2,15,2},
{0,0,0,0,0,2,0,0,2,1},{0,0,0,0,0,2,10,0,2,2},{0,0,0,0,0,2,10,0,2,3},{0,0,0,0,0,2,10,0,2,1},
{1,-20,0,0,0,2,0,1,10,0},{1,0,0,0,0,2,100,1,10,0},{1,0,0,0,0,2,120,1,10,0},{1,0,0,0,0,2,120,1,10,1},
{2,0,0,0,0,2,0,2,15,0},{2,0,0,0,0,2,20,2,15,0},{2,0,0,0,0,2,20,2,15,0},{2,0,0,0,0,2,20,2,15,2},
{4,0,0,0,0,1,0,4,200,0}
};
stayTimes=0; //初始化飞机停留时间为0
num = 0; //初始化下一个要显示在屏幕上的飞机的索引值为0
ebullet=new EnemyBullet(); //创建子弹
bonus=new Bonus(); //创建奖励对象
}
/* 从敌机数据数组中添加1个敌机数据到当前显示的向量v中*/
private void addNewEnemy(){
int EnemyData[] = null; //用于存储1架敌机数据
//从敌机数据数组中获取索引num指定的架敌机数据,并将其加到v2中
if(num<planeInfo.length){ //检查是否已还有敌机数据
EnemyData = planeInfo[num]; //获取下一个敌机数据
if(stayTimes>=EnemyData[6]){ //检查下一个敌机的间隔时间是否结束
EnemyData[6]=0; //清除时间间隔
v.addElement(EnemyData); //添加敌机数据到v2
num++; //更新下一个敌机数据索引
stayTimes=0; //重置间隔时间
}
stayTimes++; //敌机间隔时间递增
}
}
/* 使v中由索引vID所指定的飞机按path指定的路径移动 */
private void movePath(int vID,int[][] path){
int curX,curY,desID,speed,stay,desX,desY; //当前坐标X、Y,下一路径点索引,速度,目标点坐标X、Y
boolean isLive=true; //设置飞机生存状态
int[] EnemyData=(int []) v.elementAt(vID); //从v2中获取索引vID所指定的飞机数据
curX=EnemyData[1]; //获取当前坐标
curY=EnemyData[2];
desID=EnemyData[3]; //获取下一路径点索引
speed=EnemyData[5]; //获取速度
stay=EnemyData[6]; //获取停留时间
desX=path[desID][0]; //获取下一路径点坐标
desY=path[desID][1];
//检查停留时间是否已结束
if(stay>0){ //如果停留时间未到,则此次不进行移动运算
stay--; //停留时间递减
EnemyData[6]=stay; //更新飞机数据数组中的停留时间
}
else{ //停留时间结束,进行移动运算
//检查当前位置到目标位置的距离是否小于等于速度值(即每次移动的距离),
//如果是,则设置飞机的当前位置到目标位置,完成本次路径点间的移动,
//并重新设置下一目标路径点和相关飞机数据
if(Math.abs(desX-curX)<=speed && Math.abs(desY-curY)<speed){
curX=desX; //设置飞机的当前位置到目标位置
curY=desY;
desID++; //目标路径点索引递增
//检查路径索引是否超出范围
if(desID<path.length) { //未超出,则用处理后的数据更新飞机数据数组
EnemyData[1]=curX;
EnemyData[2]=curY;
EnemyData[3]=desID;
//检查飞机类型,确定是否需要通过改变帧索引来设置不同飞行方向的图像,
//如果类型为0,则用路径点中指定的帧索引来设置当前帧索引
if(EnemyData[0]==0){
EnemyData[4]=path[desID][2];
}
EnemyData[6]=path[desID][3];
}
else{ //如果超出路径索引
if(EnemyData[0]==4){ //检查是否为BOSS飞机
EnemyData[3]=0; //如果是BOSS,则继续沿路径运动
}
else { //如果不是BOSS,则设置飞机生存状态为不存在
isLive=false;
}
}
}
else{ //当前位置到目标位置的距离大于速度值, 即一次移动不能到达目标位置
//修改当前位置为一次移动后的位置,并更新飞机数据数组EnemyData中的当前坐标
if(Math.abs(desX-curX)>=speed) { //检查X轴方向到目标位置的距离
//通过目标位置与当前位置X坐标的比较,确定移动方向,并计算坐标
if(desX>curX){
curX+=speed;
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
J2ME太空之战源代码 (116个子文件)
Enemy.class 8KB
Enemy.class 7KB
GameLevel.class 7KB
GameLevel.class 6KB
EnemyBullet.class 5KB
EnemyBullet.class 5KB
StartScreen.class 5KB
StartScreen.class 5KB
Bullet.class 5KB
Bullet.class 4KB
GameWorld.class 4KB
GameWorld.class 4KB
GameMenu.class 4KB
GameMenu.class 3KB
Bonus.class 3KB
GameDesign.class 3KB
Plane.class 3KB
GameDesign.class 3KB
Bonus.class 3KB
Explosion.class 3KB
Plane.class 3KB
Explosion.class 3KB
GameMusic.class 3KB
GameMusic.class 2KB
GameMID.class 2KB
ImgText.class 2KB
GameMID.class 2KB
ImgText.class 2KB
FlashScreen.class 2KB
FlashScreen.class 2KB
StartScreen$1.class 1KB
StartScreen$1.class 1KB
FlashScreen$1.class 783B
FlashScreen$1.class 755B
GameMenu$1.class 638B
GameMenu$1.class 601B
.classpath 242B
.eclipseme 246B
SpaceWar.jad 219B
SpaceWar.jad 195B
SpaceWar.jar 96KB
Enemy.java 17KB
GameLevel.java 9KB
GameWorld.java 8KB
EnemyBullet.java 8KB
Bullet.java 7KB
StartScreen.java 5KB
Plane.java 5KB
GameMenu.java 5KB
Bonus.java 4KB
Explosion.java 4KB
GameMusic.java 3KB
GameDesign.java 3KB
GameMID.java 2KB
ImgText.java 2KB
FlashScreen.java 2KB
story.mid 17KB
story.mid 17KB
story1.mid 4KB
story1.mid 4KB
level.mid 2KB
level.mid 2KB
menuIcon.png 11KB
menuIcon.png 11KB
PlanetBase.png 10KB
PlanetBase.png 10KB
background.png 5KB
background.png 5KB
bgTiles.png 5KB
bgTiles.png 5KB
logo.png 5KB
logo.png 5KB
text.png 4KB
text.png 4KB
title.png 3KB
title.png 3KB
plane.png 2KB
plane.png 2KB
spacecraft.png 2KB
spacecraft.png 2KB
menu.png 959B
menu.png 959B
explosion1.png 957B
explosion1.png 957B
boss.png 889B
boss.png 889B
plane1.png 693B
plane1.png 693B
plane0.png 669B
plane0.png 669B
plane2.png 663B
plane2.png 663B
turret.png 646B
turret.png 646B
explosion0.png 506B
explosion0.png 506B
bonus.png 491B
bonus.png 491B
bloodbar.png 339B
bloodbar.png 339B
共 116 条
- 1
- 2
资源评论
- 5712917842013-12-09代码可运行,也有注释,这个很好,不过有部分功能没实现
a296248051
- 粉丝: 22
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功