J2ME手机游戏设计案例源代码-SpaceWarBonus.doc_第1页
J2ME手机游戏设计案例源代码-SpaceWarBonus.doc_第2页
J2ME手机游戏设计案例源代码-SpaceWarBonus.doc_第3页
J2ME手机游戏设计案例源代码-SpaceWarBonus.doc_第4页
J2ME手机游戏设计案例源代码-SpaceWarBonus.doc_第5页
已阅读5页,还剩64页未读 继续免费阅读

VIP免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

*GameMID/* author wizardyx */import javax.microedition.lcdui.Display;import javax.microedition.midlet.*;/* 游戏MIDlet */public class GameMID extends MIDlet private Display display; /声明Display private StartScreen startscreen; /声明启动画面对象 private FlashScreen flashscreen; /声明闪屏画面对象 private GameMenu gmenu; /声明菜单画面对象 private GameWorld gw; /声明游戏引擎框架 private GameMusic gm; /声明音效对象 public GameMID() display = Display.getDisplay(this); /获取Display gm=new GameMusic(); loadFlashScreen(); /加载闪屏画面 public void startApp() public void pauseApp() public void destroyApp(boolean unconditional) gmenu=null; flashscreen=null; startscreen=null; gm=null; GameMusic.releases(); System.gc(); /释放资源 /* 退出程序 */ public void exit() try destroyApp(false); catch(Exception e) notifyDestroyed(); /* 加载游戏启动画面 */ public void loadStartScreen() flashscreen=null; startscreen=null; startscreen=new StartScreen(this); /创建启动画面 display.setCurrent(startscreen); /设置启动画面为当前显示画面 /* 加载闪屏画面 */ public void loadFlashScreen() flashscreen=new FlashScreen(this); /创建闪屏 display.setCurrent(flashscreen); /设置闪屏画面为当前显示画面 /* 加载游戏菜单*/ public void loadGameMenu(int menuIndex) flashscreen=null; startscreen=null; if(gmenu=null) gmenu = new GameMenu(this); /创建菜单 gmenu.setMenuIndex(menuIndex); /设置当前菜单项 display.setCurrent(gmenu); /设置菜单画面为当前显示画面 /* 加载游戏主界面 */ public void loadGameWorld() gmenu=null; if(gw=null) gw = new GameWorld(this); /创建游戏引擎画布 display.setCurrent(gw); /设置游戏引擎画布为当前显示画面 gw.start(); *Bonus/* author wiardyx */import java.util.Vector;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Image;import javax.microedition.lcdui.game.Sprite;/* 宝物奖励类 */public class Bonus protected Vector v; /存储奖励数据private Image bonus; /奖励宝物图像 private Sprite sprPower,sprResult,sprBlood; /奖励精灵,分别为子弹威力、加分和加血 private int width,height; /精灵运动范围 /* 构造奖励对象 */public Bonus()width = GameWorld.ScreenWidth;height = GameWorld.ScreenHeight;v = new Vector(); /创建Vector /创建奖励精灵trybonus = Image.createImage(/bonus.png); sprPower=new Sprite(Image.createImage(bonus, 0, 0, 36,12, Sprite.TRANS_NONE),12,12); sprResult=new Sprite(Image.createImage(bonus, 36, 0, 24,12, Sprite.TRANS_NONE),12,12); sprBlood=new Sprite(Image.createImage(bonus, 60, 0, 24,12, Sprite.TRANS_NONE),12,12); catch(Exception ex) ex.printStackTrace(); /* 在坐标x,y创建奖励对象,type代表奖励的种类 */protected void addBonus(int x,int y,int type)int b_x=x;int b_y=y;int t = type;int BonusData=b_x,b_y,t; /设置奖励数据v.addElement(BonusData); /将奖励数据加到v /* 释放资源 */protected void releaseResourece() v.removeAllElements();bonus = null; sprPower=null; sprResult=null; sprBlood=null; /* 更新数据 */protected void update(Plane plane)int BonusData = null;for(int i=0;iheight) /如果坐标超出范围则删除v.removeElementAt(i);elsev.setElementAt(BonusData,i); /重设奖励数据 /按类型计算奖励的运行效果switch(BonusData2-1) case 0:/计算弹药 sprPower.setPosition(BonusData0, BonusData1); /设置位置 sprPower.nextFrame(); /移动帧 /检查是否与玩家飞机相撞 if( sprPower.collidesWith(plane,false) if(plane.getBullet().getBulletPower()0) /检查玩家飞机是否存活 sprBlood.setPosition(BonusData0, BonusData1); /设置位置 sprBlood.nextFrame(); /移动帧 /检查是否与玩家飞机相撞 if( sprBlood.collidesWith(plane,false) plane.setLifes(plane.getLifes()+30); /加生命 if(plane.getLifes()100) /检查生命值是否大于100 plane.setLifes(100); v.removeElementAt(i); /移除 break; /* 绘制奖励 */protected void Paint(Graphics g)int BonusData = null; /循环获取奖励对象,并绘制for(int i=0;iv.size();i+) BonusData = (int)(v.elementAt(i);switch(BonusData2)case 1:/绘制子弹威力奖励sprPower.paint(g);break;case 2: /绘制加分奖励sprResult.paint(g);break;case 3: /绘制补血奖励sprBlood.paint(g);break;*Bulletimport java.io.IOException;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 Administrator */public class Bullet Plane plane; /玩家飞机 Sprite sprbullet; /子弹精灵 Image imgbullet; /子弹图像 private int bulletPower; private int bulletSpeed =4; /子弹速度 private int shootTimes; /子弹发射计时 private int bulletStay=15; /子弹发射间隔时间 public Vector v; /子弹矢量 public Bullet(Plane plane) try imgbullet = Image.createImage(/mybullet.png); /子弹图像 catch (IOException ex) ex.printStackTrace(); sprbullet=new Sprite(imgbullet,imgbullet.getWidth(),imgbullet.getHeight(); /创建子弹精灵 sprbullet.defineReferencePixel(imgbullet.getWidth()/2, imgbullet.getHeight()/2);/设置参考点 this.plane=plane; /引用玩家飞机 v = new Vector(); /创建存储子弹数据的Vector shootTimes=0; /初始化子弹发射间隔时间 /* 增加新子弹 */ public void addNew() /初始化子弹坐标为飞机坐标 int p_x=plane.getX()+plane.getWidth()/2; int p_y=plane.getY(); /根据子弹威力级别,添加不同的子弹 switch(bulletPower) case 1: int a = p_x-5,p_y,0; /一级子弹数据 int b = p_x+5,p_y,0; v.addElement(a); /添加子弹数据到v中 v.addElement(b); break; case 2: int a = p_x-8,p_y+5,0; /二级子弹数据 int b = p_x,p_y,0; int c = p_x+8,p_y+5,0; v.addElement(a); v.addElement(b); v.addElement(c); break; case 3: int a = p_x-8,p_y+5,-1; /三级子弹数据 int b = p_x-5,p_y,0; int c = p_x+5,p_y,0; int d = p_x+8,p_y+5,1; v.addElement(a); v.addElement(b); v.addElement(c); v.addElement(d); break; case 4: int a = p_x-8,p_y,0; /四级子弹数据 int b = p_x+8,p_y,0; int c = p_x,p_y,0; int d = p_x-10,p_y+8,-1; int e = p_x+10,p_y+8,1; int f = p_x-14,p_y+8,-1; int g = p_x+14,p_y+8,1; v.addElement(a); v.addElement(b); v.addElement(c); v.addElement(d); v.addElement(e); v.addElement(f); v.addElement(g); break; case 5: int a = p_x-4,p_y,0; /五级子弹数据 int b = p_x,p_y,0; int c = p_x+4,p_y,0; int d = p_x-6,p_y+6,-1; int e = p_x+6,p_y+6,1; int f = p_x-10,p_y+8,-1; int g = p_x+10,p_y+8,1; int h = p_x-10,p_y+10,-2; int i = p_x+10,p_y+10,2; int j = p_x-14,p_y+12,-2; int k = p_x+14,p_y+12,2; v.addElement(a); v.addElement(b); v.addElement(c); v.addElement(d); v.addElement(e); v.addElement(f); v.addElement(g); v.addElement(h); v.addElement(i); v.addElement(j); v.addElement(k); break; /* 删除指定的子弹 */ public void delBullet(int i) if(iv.size() v.removeElementAt(i); /* 绘制子弹 */public void render(Graphics g)int row=null; /循环绘制子弹for(int i=0;i0 & shootTimes%bulletStay=0) addNew(); /增加子弹 shootTimes=0; /重置子弹发射时间 for(int i=v.size()-1;i=0;i-)bulletData = (int)v.elementAt(i); /获取子弹数据bulletData0=bulletData0+2*bulletData2; /计算子弹X坐标bulletData1-=bulletSpeed; /按子弹速度计算Y坐标 /检查子弹是否超出屏幕 if(bulletData10 | bulletData0240) delBullet(i); /当子弹超出屏幕范围,删除子弹 else v.setElementAt(bulletData, i); /更新子弹数据 /* 子弹碰撞检测 */ public int collidesWith(Sprite spr) int n=0; /初始化碰撞次数 int bulletData = null; /初始化子弹数据数组 for(int i=v.size()-1;i=0;i-)bulletData = (int)v.elementAt(i); /获取子弹数据 sprbullet.setRefPixelPosition(bulletData0,bulletData1); /设置子弹精灵位置 /当子弹发生碰撞,删除子弹,并记入碰撞次数 if(sprbullet.collidesWith(spr,false) delBullet(i); n+; return n; /返回碰撞次数 public void Release() v.removeAllElements(); v=null; imgbullet=null; sprbullet=null; *Enemyimport 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 Image5; try imgEnemy0 = Image.createImage(/plane0.png);/小飞机图像 imgEnemy1 = Image.createImage(/plane1.png);/直升机图像 imgEnemy2 = Image.createImage(/plane2.png);/霰弹机图像 imgEnemy3 = Image.createImage(/turret.png);/Boss机炮塔图像 imgEnemy4 = Image.createImage(/boss.png);/Boss机图像 catch (IOException ex) ex.printStackTrace(); sprEnemy=new Sprite5; sprEnemy0=new Sprite(imgEnemy0 ,16,16);/小飞机精灵 sprEnemy1=new Sprite(imgEnemy1 ,26,35);/直升机精灵 sprEnemy2=new Sprite(imgEnemy2 ,64,50);/霰弹机精灵 sprEnemy3=new Sprite(imgEnemy3 ,15,20);/Boss机炮塔精灵 sprEnemy4=new Sprite(imgEnemy4 ,64,40);/Boss机精灵 /设置各个精灵的参考点 sprEnemy0.defineReferencePixel(sprEnemy0.getWidth()/2,sprEnemy0.getHeight()/2 ); sprEnemy1.defineReferencePixel(sprEnemy1.getWidth()/2,sprEnemy1.getHeight()/2 ); sprEnemy2.defineReferencePixel(sprEnemy2.getWidth()/2,sprEnemy2.getHeight()/2 ); sprEnemy3.defineReferencePixel(sprEnemy3.getWidth()/2,sprEnemy3.getHeight()/2 ); sprEnemy4.defineReferencePixel(sprEnemy4.getWidth()/2,sprEnemy4.getHeight()/2 ); /* 初始化关卡资源 */ private void initLevelResource() v = new Vector(); r = new Random(); /路径数据,数组中每个元素记录了该路径点的X坐标,Y坐标,帧ID,停留时间 path2=new int200,0,0,0,200,100,0,50,100,100,0,0,200,200,0,20,200,300,0,0; path3=new int20,0,0,0,20,100,0,0,200,100,0,0,200,200,0,0,200,300,0,0; path1=new int0,0,0,0,100,0,2,0,100,100,4,0,200,200,3,0,240,100,2,0; path4=new int0,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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论