********GameMID。Java/**Tochangethistemplate,chooseTools|Templates*andopenthetemplateintheeditor.*/importjavax.microedition.lcdui.Display;importjavax.microedition.midlet.*;/***@authorAdministrator*/publicclassGameMIDextendsMIDlet{privateDisplaydisplay;privateGameWorldgw=null;publicGameMID(){display=Display.getDisplay(this);//获取Displaygw=newGameWorld(this);//创建游戏画布display.setCurrent(gw);//设置游戏画布为当前显示画面}publicvoidstartApp(){if(gw!=null){gw.start();//游戏开始执行}}publicvoidpauseApp(){if(gw!=null){gw.setPaused(true);//游戏暂停执行}}publicvoiddestroyApp(booleanunconditional){}/*退出程序*/publicvoidexit(){try{destroyApp(false);}catch(Exceptione){}notifyDestroyed();}}**********GameWorld。Javaimportjava.io.IOException;importjavax.microedition.lcdui.Font;importjavax.microedition.lcdui.Graphics;importjavax.microedition.lcdui.Image;importjavax.microedition.lcdui.game.GameCanvas;importjavax.microedition.lcdui.game.Sprite;importjavax.microedition.lcdui.game.TiledLayer;/**Tochangethistemplate,chooseTools|Templates*andopenthetemplateintheeditor.*//****@authorAdministrator*/publicclassGameWorldextendsGameCanvasimplementsRunnable{GameMIDmid;//游戏MIDletThreadMainThread;//游戏主线程privatefinalintMS_PER_FRAME=30;//设置一次游戏循环所需时间,单位为毫秒(ms),每秒游戏帧数约为1000/MS_PER_FRAMEprivateintcps;//游戏帧速privatebooleanisPaused;//游戏暂停状态privatebooleanrunning;//游戏运行状态Graphicsg;//游戏绘图对象publicstaticintScreenWidth;//游戏屏幕宽度,设置为静态成员,方便外部访问publicstaticintScreenHeight;//游戏屏幕高度publicstaticintGameState;//游戏状态,1为暂停,2为游戏进行中,3为游戏失败publicstaticintKeyState;//按键状态privateImageimgEnemy,imgBoy;//精灵图像privateSpritesprEnemy;//定义敌人精灵privateMySpritesprBoy;//用扩展的精灵类来定义玩家精灵//定义三个不同方向的玩家精灵帧序列,右方向可由左方向镜像变换得到intLSequ[]={3,4,3,5};//定义左方向精灵帧序列intUSequ[]={6,7,6,8};//定义上方向精灵帧序列intDSequ[]={0,1,0,2};//定义下方向精灵帧序列intenemyX,enemyY;//敌人精灵坐标intenemySpeedX;//敌人精灵速度,这里设置为只能水平移动booleanisColl;//碰撞标志longCollTextTime;//碰撞文本显示时间TiledBgtbg;//创建贴图层应用类TiledLayertl;//创建贴图层类//定义字体privateFontlargeFont=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE);privateFontmediumFont=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_MEDIUM);publicGameWorld(GameMIDmidlet){super(true);this.mid=midlet;//获取MIDletthis.setFullScreenMode(true);//设置为全屏模式ScreenWidth=getWidth();//获取屏幕大小ScreenHeight=getHeight();g=this.getGraphics();//获取绘图对象running=false;//设置游戏运行状态isPaused=false;GameInit();//游戏初始化}/*游戏初始化*/privatevoidGameInit(){try{imgBoy=Image.createImage(/Boy.png);imgEnemy=Image.createImage(/enemy.png);}catch(IOExceptionex){ex.printStackTrace();}//使用Image对象,帧宽度、帧高度,速度,限制范围矩形左上角的X坐标、Y坐标、高度和宽度来构造自定义精灵sprBoy=newMySprite(imgBoy,32,48,3,0,0,ScreenWidth,ScreenHeight);sprBoy.setFrameSequence(LSequ);//设置初始化时的精灵帧序列和方向sprBoy.setDir(MySprite.LEFT);//设置初始化时精灵方向sprBoy.defineReferencePixel(sprBoy.getWidth()/2,sprBoy.getHeight()/2);//设置参考点sprBoy.setRefPixelPosition(ScreenWidth/2,ScreenHeight/2);//通过参考点定位精灵intsw=sprBoy.getWidth();intsh=sprBoy.getHeight();sprBoy.defineCollisionRectangle(sw/10,sh/10,sw*8/10,sh*8/10);//重设精灵的碰撞矩形范围为原来的80%//创建敌人精灵sprEnemy=newSprite(imgEnemy,imgEnemy.getWidth()/3,imgEnemy.getHeight()/3);sprEnemy.setFrameSequence(LSequ);//设置精灵循环序列enemyX=50;//设置敌人精灵的坐标enemyY=200;enemySpeedX=-2;//设置敌人精灵速度tbg=newTiledBg();//创建TiledBg对象tl=tbg.getTiledbg();//获取贴图层}/*游戏运行*/publicvoidrun(){intcyclesThisSecond=0;//当前1秒内的循环次数longcycleStartTime;//循环开始时间longlastCPSTime=0;//上次计算帧速的时间longcycleEndTime=0;//循环结束时间longcycleTimes=0;//一次游戏循环热所花的时间booleanbSkip=false;//游戏是否跳帧cps=0;System.out.println(游戏开始);//在控制台输出开始信息,可屏蔽/*游戏主循环*/while(running){//检查是否运行cycleStartTime=System.currentTimeMillis();//记录游戏循环开始时间//下面语句用于处理游戏内容,如果游戏设置为跳帧,//则本次循环不处理游戏内容if(!bSkip){GameInput();//处理输入消息GameCycle();//处理游戏逻辑render(g);//渲染游戏画面flushGraphics();//更新画面}/*下面语句用于计算游戏循环时间,并进行相应处理*/cycleEndTime=System.currentTimeMillis();//记录游戏循环结束时间cycleTimes=cycleEndTime-cycleStartTime;//计算循环时间//如果循环时间间隔小于MS_PER_FRAME,则通过休眠,使其不小于rate,//并能让系统有空闲转去处理其他事务if(cycleTimesMS_PER_FRAME){bSkip=false;try{Thread.sleep(MS_PER_FRAME-cycleTimes);//休眠}catch(InterruptedExceptionex){ex.printStackTrace();}}else{//如果循环时间大于MS_PER_FRAME,则设置bSkip为true,//让程序跳过一次循环,以主动丢帧的方式换取游戏速度bSkip=true;}//下面语句用于计算每秒的循环次数,即帧速,在游戏中如果不需要,//可将这部分语句及相关变量注释屏蔽if(System.currentTimeMillis()-lastCPSTime1000){//检查距上次计算帧数的//时间是否经过1000mslastCPSTime=System.currentTimeMillis();//设定lastCPS为当前时间cps=cyclesThisSecond;//System.out.println(cps:+cps);//输出每秒的帧数cyclesThisSecond=0;//重置帧数}else{cyclesThisSecond++;//帧数递增}}System.out.println(游戏结束!);release();//释放资源exit();//退出游戏}/*启动游戏进程*/publicvoidstart(){//检查游戏循环是否处于运行状态,如果未运行,则创建线程并启动//如果游戏处于运行状态,则表示是暂停后的继续执行,仅设置暂停状态即可if(!running){running=true;MainThread=newThread(this);MainThread.start();GameState=2;}else{GameState=2;setPaused(false);}}//退出游戏privatevoidexit(){mid.exit();//退出游戏}/*停止游戏*/privatevoidstop(){running=false;//终止游戏循环}/*释放游戏资源*/privatevoidrelease(){//此处为释放游戏资源的代码imgEnemy=null;imgBoy=null;sprBoy=null;sprEnemy=null;tbg=null;tl=null;System.gc();}/*获取暂停状态*/publicbooleangetPaused(){returnisPaused;}/*设置暂停状态*/publicvoidsetPaused(booleanisPaused){this.isPaused=isPaused;}/*处理游戏输入信息*/privatevoidGameInput()