毕业设计(论文)-J2ME《览桥风光》游戏设计(含源程序)_第1页
毕业设计(论文)-J2ME《览桥风光》游戏设计(含源程序)_第2页
毕业设计(论文)-J2ME《览桥风光》游戏设计(含源程序)_第3页
毕业设计(论文)-J2ME《览桥风光》游戏设计(含源程序)_第4页
毕业设计(论文)-J2ME《览桥风光》游戏设计(含源程序)_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

毕业论文(设计)用纸幕后台的缓冲区内的图像刷新到前台来(flushGraphics()应该写在render(){}的最后)。renderboss()方法重绘的是关尾的精灵cboss、相关信息等,与render()的区别在与于函数lm.paint(g,0,0),起始坐标是不可变的,即,关尾的地图背景是不可变的。实际上,renderboss()是完全不需要的,只要在render()函数中设置相关标志位就可以解决关尾的绘图问题。玩家飞机的生命标志使用drawImage()就可以绘制在屏幕上了。4.4游戏中的奖励及相关飞机的行为根据游戏设定,当y1=-1000时,会出现如图4-8所示的飞机(sboss),当玩家击落他后,屏幕会显示“援军到达“,并且玩家剩余飞机数加1。使用if((y1==-1000)&&(sbz==0)){}设定sboss的初始位置,根据游戏设定,sboos从屏幕上方倒飞入屏幕,所以sboss设定的初始位置(50,planepoup-65),其中planepoup为屏幕上边缘的标志位。图4-9最后,要将sbz赋值为1,消除sboos不停设置初始位置的BUG。图4-9当sboss飞入屏幕后,将sbz赋值为2,以执行下面的if(sbz==2)语句。图4-10在判断语句if(sbz==2)里,将根据玩家的位置自动飞图4-10行。首先,根据玩家飞机的位置对sbmove赋值,当c1在sboos的上、下、左、右时,其对应的值为1、2、3、4在这4个if语句中,要设置标志位(smovebz==0)。设置这个标志位的目的是防止sboos根据c1的位置不停的改变运行状态,即防止sboos成为跟踪飞机。当sboos根据c1的位置改变一次运行方向后,smovebz赋值为1,即不检测c1的位置。只有sboss运行到屏幕的边缘时,才将smovebz重新赋值为0,使其可以再次通过c1的位置决定sboos的运行方向。当玩家子弹击中sboss后,使用sboss.setFrame(1),此时飞机变红,在本次repaint结束前,使用sboss.setFrame(0)使飞机变为本来颜色,而程序设定每1/20秒画一次,由此得到飞机被击中后变色的效果。(参见图4-10)。sboos会根据玩家飞机的位置发射子弹,根据游戏设置,当玩家在其上方、左方、右方时,sboss一次发射1发子弹,而玩家飞机在其下方时,sboss一次发射3发子弹。sboss与cboss共用3发子弹,因为当sboss出现时,离关尾还远,所以,为了提高效率,采用这种方法。如果sboos被击落后,使用函数setVisable(false)将bossbullet0、bossbullet1、bossbullet2设置为不见,使用sboss.setImage()函数将sboos的图片设置为爆炸图片。同时,玩家生命标志playerno加1,sbz赋值为-1,使得sboos无法发射子弹,sbpzbz赋值为1,使得玩家的子弹不与sboos进行碰撞检测。同时在屏幕中使用drawString()绘制“援军到达”四个字,随着屏幕的运动,爆炸图片逐渐进入屏幕下方,当sboos.getY()>palnepo,通过改变标志位的值使得drawSteing()不在执行,四字消失。如果玩家被击落后并没有点“返回“,而此时,背景会一直运动到关尾,考虑到其与关尾BOSS共用3发子弹,如sboos不消失,将会出现子弹乱飞的情况。所以,如果判断语句if((sboss.getY()==getHeight()))为真,则表示离地图的终点只有一个屏幕的距离时,sbz赋值为-1、sbpzbz赋值为1(含义上面已经说明)。同时调用sboss.move(0,-3),使sboos快速飞出屏幕,直到判断语句if(sboss.getY()<-65)为真时,调用下面的函数setVisable(false),使得sboos不可见。4.5普通敌人相关属性普通敌人是指游戏中不断出现的兰色飞机。首先在程序中首先定义了aik、aip两个Random()类对象,ai和aipp两个整型变量。程序中使用switch(ai)语句判断下一次的飞机出现情况,为了达到不重复出现的效果,使用语句ai=aik.nextInt()%4(同样应该在构造函数中放置此语句和aipp=aip.nextInt()%5,以使每次游戏开始的时候敌人飞机的出现顺序是不固定的),以随机出现0,1,2,3四个整数(代表着飞机的四种出现情况)。情况1:使用aipp=aip.nextInt()%5取得随机数aipp,根据下面三条语句设置飞机的出现位置:j0.setPosition(100-aipp*30,planepoup+24); j1.setPosition(100,planepoup); j2.setPosition(100+aipp*30,planepoup-24);;将getHeight()/8赋给整型变量kkk,每次循环kkk-1,当kkk<=1时飞机转向,当aipp>0时,飞机向左下方运行,使用语句setFrame(0)、move(-3,3)达成向左下方运动的效果。当aipp<0时,向右下方运动,实现方法同上。情况2:初始位置设置方法同情况1。当kkk〈0时,飞机掉头向上飞,其中setFrame(3),move(-4,0)。情况3:初始位置设置方法同情况1。当kkk〈0时,飞机只向左转。设置情况3的原因是在更多的随机位置出现敌机。情况4:初始位置设置方法同情况1。但其中的飞机j1具有跟踪能力,其实现方法如下:使用2个if语句if(j1.getX()<c1.getX())、if(j1.getX()>c1.getX())判断J1在c1的左或右侧,并且实时根据判断情况使用setFrame()和move()改变飞机的形态,使用语句if((j1.getX()<c1.getX())&&((j1.getX()+48)>c1.getX())&&(j1.getY()<c1.getY()))判断c1是否在j1的下方,当c1在j1的下方时,发射子弹jbullet1。以上四种情况的最后,都将使用函数nextInt()产生ai,aipp的值。设置整型数组jb[4],对应着4种出现情况的标志位。如,执行情况1,首先执行判断语句if(jb[0]==1),在此语句中,首先使用setVisable(true)函数将敌人飞机设置为可见的,并根据上次运行的qipp的值设置敌人飞机的初始位置最后,jb[0]赋值为2。接着执行判断语句if(jb[0]==2),在此语句中,首先使用move()函数使飞机向下运动,同时kkk减1,当kkk<=0时,飞机转向,此时,根据aipp的正负判断飞机向哪边转向。当飞机飞出屏幕时,jb[0]赋值为3。需要注意的一点是,当取得ai的数值时,一定要写上这条语句:jb[ai]=1;因为当4种情况都出现一便的时候,标志位jb[]里的数值都将变为3,如果不将其重新赋值为1,敌人飞机将只能出现4次。其他3种情况也大致如此。普通敌人是否发射子弹由以下语句if(((j1.getX()<=c1.getX()-18)||((j2.getX()-6)>=c1.getX()))&(jbz==0)),即c1在j1左侧18象素范围内或j2左侧6象素范围时,j0、j1、j2一起发射子弹,jbz=1,表示在这组子弹消失前敌人不发射子弹。如果jpb的值为0,则判断语句if(jpb==0)里的move()语句将一直执行下去。之后,还需要对每发子弹于玩家飞机进行碰撞检测,如果碰撞,则将碰撞的这发子弹设置为不可见。4.6白云的实现原理为了游戏界面更加美观,程序中设定了精灵数组cloud[i]来表示白云,由于白云应该在所有飞机的上方,即cloud[i]应该最早被append()到LayerManager中,或者使用insert(cloud[],0)在索引数值0处插入Layer,本程序采用了第一种方法,即在gameScreen类的构造函数中按游戏设置的顺序使用lm.append()加入到LayerManager之中。程序中设定白云数为5。首先设置白云的初始位置,其语句如下:cloud[0].setPosition(25,planepoup-(65));cloud[1].setPosition(80,planepoup-(140));cloud[2].setPosition(112,planepoup-(90));cloud[3].setPosition(175,planepoup-(200));cloud[4].setPosition(223,planepoup-(70));其原理为:将屏幕的X数轴和Y数轴各分成5份,即在X轴的5个范围内每个范围出现一朵白云,Y轴的每个范围内也只能出现一朵。所以的白云的起始位置在每次游戏开始时是固定的。白云位置设定后,使用move(0,1)使白云移动,由于白云初始位置设定在屏幕的不同区域内,故其移动出屏幕的先后顺序是不同的,使用if(cloud[].getY()>planepo)判断白云是否飞出屏幕。如果为真则使用cloud[].setPosition(cloudposition*40,planepoup)设置白云的位置,其中,cloudposition=aicloud.nextInt()%5,aicloud为Random()类对象。乘以40表示其在X轴出现的范围是多少,cloud[0]、cloud[1]、cloud[2]、cloud[3]、cloud[4]乘以的值分别为40,30、55、15、22。以达成白云的随机出现效果。4.7关尾BOSS及相关属性关尾处飞机在屏幕上方横向移动,而背景地图不动,所以使用renderboss()重绘屏幕,其中,paint(g,0,0)表示屏幕绘制点在坐标轴(0,0)处。BOSS生命进度条由以下语句绘制:g.setColor(255,0,0); g.fillRect(2,2,60,5);//生命进度条背静红 g.setColor(255,255,255); g.fillRect(2,2,bosslife,5);//生命进度条前景白其中bosslife记录着BOSS的生命值,其初始值为0,当玩家每击中一次BOSS,其值加5,,即化出白色进度条,当bosslife==60时,表示过关,除玩家飞机与子弹外的其他Sprite均使用setVisable(false)使其不在显示,同样的pzbz要赋予1,以消除玩家飞机还能与敌人碰撞的BUG。如果cboss.getX()<0,则表示其在屏幕左方出界,应改为右飞。同理如果cboss.getX()>(getWidth()-cboss.getWidth()),则表示其在屏幕右方出界,应改为左飞。在飞机横向飞行中,使用以下语句判断飞机是否开火:if(((cboss.getX()<=c1.getX()-10)||(cboss.getX()<=c1.getX()+60))&&(jbsz==0))当每发一组子弹后,jbsz=1,则飞机无法开火,知道子弹飞出屏幕,jbsz才重新设定为0。而((cboss.getX()<=c1.getX()-10)||(cboss.getX()<=c1.getX()+60)表示当玩家飞机处于BOSS的左右各10个象素的范围内时。BOSS开火。关尾参见图4-10。4.8本章小结第四章中按照相应的步骤描述了所有关键类的具体算图4-10关尾法实现,引用了相关函数进行了具体流程的解释,并对原图4-10关尾理稍复杂的函数做了详细的分析。对游戏有关的各运行面也做了展示。5测试5.1打包测试的过程使用Eclipse完成代码的调试之后,需要使用WTK生成包(即jar和jad文件),其过程如下:首先,使用WTK的新建项目功能建立一个新项目,要求与Eclipse工作区下的项目名称、MIDlet类名相同(图5-1)。图5-1新建项目后,将Eclipse工作区下的.java文件拷入src文件夹,将.class文件拷入class文件夹(需要新建),将pic文件夹拷入res文件夹,点击生成,如一切正常,将如图片5-2所示。图5-2之后,选择项目-包-生成包。如图5-3所示。图5-3生成的jar和jad文件存储在lzhhdm/bin目录下。运行MotorolaSDKv4.2forJ2ME,使用MOTOA760手机模拟器进行测试。参考图5-4。点击Lanuch按纽,进入如图5-5的界面,即可以进行游戏测试了。图5-4测试的过程,实际上就是找不同的同学玩这款游戏,以期望发现BUG。实际上,几乎每一版本都会产生很多BUG。5.2发现的BUG及解决情况几乎每一个计算机程序都会有这样那样的不足,尤其是未经过精心维护的非商业软件。即使是作为操作系统的各种版本的Windows也时常会发生许多类型的错误和漏洞。本游戏程序对于初涉此领域的毕业设计课题来说,尤其在开始初期,感觉逻辑复杂,难以控制,因此产生了大量BUG,其中一些BUG还没有解决,所有发现的BUG如下:1.玩家子弹出现顺序问题;2.玩家飞机爆炸后仍然可以控制爆炸图片;3.当过关后仍然会发生碰撞;图5-54.当玩家击落可奖人飞机的同时玩图5-5家被击落,并且此为玩家的最后一架飞机,虽然显示援军到达,但图5-5游戏仍然结束。图5-55.有某组飞机在飞机被击中后仍能发射子弹;6.sboos左侧子弹发射后不停在原位置刷新问题;7.游戏运行一段时间后变的很卡;其中,1、2、3、4条BUG已经解决(方法已在第4章相关位置进行了说明)。4、5、6没有解决,其中,4、5、6三条如果有足够的时间可以解决。第7条以现有水平无法解决,因为出现这种情况的原因估计是内存的问题,而由于水平的关系,现在的代码变量过多,并且效率低下,有很多重复的地方,解决的方法只能是在水平提高的情况下重写整个程序。5.3未完善的功能经过汇总测试人员的建议,本游戏应该完善的功能如下1.由于每按一次开火,就会对玩家子弹的精灵数组进行一次循环检查,使得本运行效率就不高的KVM运行异常缓慢。即使刷屏没有间隔也不会提高速度;2.最好有接宝物的设置,增强可玩性;3.由于没由合适的图片,使得敌人设置单一;4.地图本应由外部文件读入,但设计初期并没有掌握这项技术;5.手机游戏最好只有一个类,而我却有4个;7.没有添加成绩记录,即英雄榜;6.最大的遗憾,敌人不够智能化。希望不远的将来,我能够有能力对这个游戏进行重写,以解决BUG、完善功能。6总结6.1本程序的总结和展望本程序设计实现了手机上以J2ME为平台的飞行射击游戏的开发,敌人运行的方式由程序进行控制,具有一定的可玩性和复杂性。经过了细心的调试和排错解决了绝大部分的问题。但是我的水平实在有限,在第5章列举的众多BUG和遗憾就可以看出这一点来,但我相信,随着时间的推移,个人水平的增长,我一定会重写这个程序,使其更加完善,6.2感想这款游戏作为我的毕业设计,是本人目前做过的最有意义的程序,这期间对J2ME的学习,使我又回到了初学PASCAL的时候。本科期间做过很多课程设计,大多规模很小。在数据库、各种应用软件和游戏中,我仍觉得对游戏的设计有极大的热情。因为其各个模块间的联系十分紧密,代码重复执行率高,当经过无数次的调试、修改后,能最终看到成品,有无比自豪的心情。大学期间做过图书馆管理程序等简单的数据库管理系统的课程设计,思想大致相似,变化范围有限,没有太多自己可发挥的余地。大家作品的最终结果都离不开同一个模式。相比一些数据库软件,游戏的设计有很多人情色彩和艺术思想的发挥,正式商业的软件的人性化界面和各个游戏间迥异的结构每每会让人有去开发的冲动。学习J2ME的困难远远超出了想象,在设计初期,为了解决地图的滚动、玩家飞机如何不飞出上下边界两个问题竟然花费了数天的时间。很多相关的技术,如需要使用到的线程、Game包的新功能、高级、低级图形界面的使用、贴图等,每一项都需要花一定的时间去掌握和熟悉。更为困难的是,J2ME为一种刚出现仅几年的新技术,国内的参考资料非常少,仅有的几本也停留在简单的介绍阶段。台湾的王森写了本较好的书,给了我很大的帮助,但对设计该游戏来说,仍只够入门。幸运的是,互联网上有那么多无私的人,由JasonLam著,DeabowayChou译的电子书《J2ME&Gaming》给了我很大的帮助,作者、译者的辛勤劳动的成果免费放在网上由大家下载,是开源精神的完美体现。致谢首先感谢我的指导老师马慧彬副教授,她在我的毕业设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新兴的技术。感谢黄明旭、包明辉同学对游戏进行测试,感谢包明辉同学对游戏相关图片的修改。感谢答辩组对本毕业设计的考核,如果可以得到专家的认可将对我的学习和工作给予极大的鼓励。你们客观的评价和建议我将牢记在心,在今后的发展中扬长避短,更加努力的严格要求自己。参考文献[1]JoshuaBloce著.潘爱民译.EffectiveJava中文版.2004年7月第4版.机械工业出版社.[2]BruceEckel.侯捷译.Java编程思想.2005年3月第1版.机械工业出版社出版社[3]王森著.Java手机/PDA程序设计入门.2005年2月第3版.电子工业出版社.[4]JamesKeogh著.潘颖王磊译.J2ME开发大全.2004年2月第1版清华大学出版社.[5]IanSommerville著.程成等译.软件工程.2003年1月第1版.机械工业出版社.[6]JasonLam著.Deabo wayChou译J2ME&Gaming2004年末[7]陈立伟张克非黎秀红著.精通JAVA手机游戏与应用程序设计.中国青年出版社.2005年5月[8]飞思科技产品研发中心.精通Jbuilder9.电子工业出版社.2004年[9]微型爪哇人.Java手机程序开发.中国铁道出版社,2003年[10]FrandM.Carrano,JanetJ.Prichard

.著

韩志宏

译.数据抽象和问题求解——JAVA语言描述.清华大学出版社2005年4月[11]袁海燕王文涛著.JAVA实用程序设计100例.人民邮电出版社.2005年5月[12]JonathanKnudsen.What'sNewintheJ2MEWirelessToolkit2.22004年4月

附录一代码毕业论文(设计)用纸佳木斯大学教务处 第60页importjavax.microedition.midlet.MIDlet;importjavax.microedition.midlet.MIDletStateChangeException;importjavax.microedition.lcdui.*;publicclasslzhhdmextendsMIDletimplementsCommandListener{publicDisplaydisplay; privateImagesplashLogo; privatebooleanisSplash=true;publicForma;privateAlertalert;intlength;privateMenuScreenmenuscreen;privategameScreengamescreen;privateCommandok,back;privatebyte[]byteInputData; publiclzhhdm() { } protectedvoidstartApp()throwsMIDletStateChangeException{ display=Display.getDisplay(this); menuscreen=newMenuScreen(this); if(isSplash) {a=null; a=newForm("览桥风光V1.0"); ok=newCommand("ok",Command.OK,1); a.append(newStringItem(null,"")); a.addCommand(ok); a.setCommandListener(this); display.setCurrent(a); } } protectedvoidmenuscreenShow() { display.setCurrent(menuscreen); } protectedvoidmenuscreensecond(){ menuscreen=newMenuScreen(this); MenuScreen.mainmenu[0]="重新开始";//玩完一遍或挂了后在玩一遍菜单第一项改为重新开始 display.setCurrent(menuscreen); } protectedvoidpauseApp(){} protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{ } protectedvoidhelShow() {a=null; a=newForm("览桥风光V1.0"); back=newCommand("返回",Command.BACK,1); a.append(newStringItem(null,"操作方式:上2下8左4右6开火5")); a.append(newStringItem(null,"弹药数:一次最多打三组")); a.addCommand(ok); a.setCommandListener(this); display.setCurrent(a); } protectedvoidrenwuShow() { a=null; a=newForm("览桥风光V1.0"); back=newCommand("返回",Command.BACK,1); a.append(newStringItem(null,"游戏名称:览桥风光")); a.append(newStringItem(null,"版本号:V1.00")); a.append(newStringItem(null,"制作者:信息电子技术学院01计算机5班刘泽华学号:7")); a.addCommand(ok); a.setCommandListener(this); display.setCurrent(a); } protectedvoidgameShow() {try{ gamescreen=null; gamescreen=newgameScreen(this); gamescreen.start(); display.setCurrent(gamescreen); gamescreen.conti=true; }catch(Exceptionexp) { System.out.println("dfg"); } } publicvoidcommandAction(Commandarg0,Displayablearg1){ a=null; this.menuscreenShow(); }}importjavax.microedition.lcdui.*;publicclassMenuScreenextendsCanvasimplementsRunnable,CommandListener{Fontlowfont=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_PLAIN,Font.SIZE_MEDIUM); Fonthighfont=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_BOLD,Font.SIZE_MEDIUM); intlowColor=0x000000FF; inthighColor=0x00FF0000; inthighBGColor=0x00CCCCCC; intwidth; booleanco; intheight; intstartHeight; intspacing=highfont.getHeight()/2; publicstaticString[]mainmenu={"ÐÂÓÎÏ·","°ïÖú","¹ØÓÚ"}; intmenuIndex; ThreadmenuThread; privateCommandok=newCommand("ok",Command.OK,1); privatelzhhdmmidlet; publicMenuScreen(lzhhdmmidlet) { this.midlet=midlet; width=getWidth(); height=getHeight(); startHeight=(highfont.getHeight()*mainmenu.length)+((mainmenu.length-1)*spacing); startHeight=(height-startHeight)/2; menuIndex=0; addCommand(ok); setCommandListener(this); menuThread=newThread(this); menuThread.start(); co=true; } publicvoidrun() { while(co) { repaint(); } } publicvoidpaint(Graphicsg) { g.setColor(0x00FFFFFF); g.fillRect(0,0,width,height); for(inti=0;i<mainmenu.length;i++) { if(i==menuIndex) { g.setColor(highBGColor); g.fillRect(0,startHeight+(i*highfont.getHeight())+spacing,width,highfont.getHeight()); g.setFont(highfont); g.setColor(highColor); g.drawString(mainmenu[i],(width-highfont.stringWidth(mainmenu[i]))/2,startHeight+(i*highfont.getHeight())+spacing,20); }else { g.setFont(lowfont); g.setColor(lowColor); g.drawString(mainmenu[i],(width-lowfont.stringWidth(mainmenu[i]))/2,startHeight+(i*highfont.getHeight())+spacing,20); } } } publicvoidkeyPressed(intcode) { if(getGameAction(code)==Canvas.UP&&menuIndex-1>=0) { menuIndex--; } elseif(getGameAction(code)==Canvas.DOWN&&menuIndex+1<mainmenu.length) { menuIndex++; } } publicvoidcommandAction(Commandc,Displayabled) { if(c==ok) { switch(menuIndex) { case0: co=false; midlet.gameShow(); break; case1: midlet.helShow(); break; case2: midlet.renwuShow(); break; } } }

}importjavax.microedition.lcdui.*;importjavax.microedition.lcdui.game.*;publicclassmybulletsextendsSprite{publicintscore=0; privateint[][]bullets; privateintbulletstotal;publicintwidth,bulletheight; publicintno=0; publicmybullets(Imageimg,intpicwidth,intpicheight,intbulletstotal,intwidth,intheight) { super(img,picwidth,picheight); this.bulletstotal=bulletstotal; bullets=newint[bulletstotal][4]; this.width=width; this.bulletheight=height/7; }publicvoidinitBullets(inti){ bullets[i][3]=1; bullets[i][2]=0;}publicvoidupdata(inti){ bullets[i][1]+=bullets[i][2];}publicvoidsetfirstposition(intx,inty,intnof,Spritesprite[],Imageimg){ sprite[nof].setVisible(true);sprite[nof+1].setVisible(true);sprite[nof+2].setVisible(true); bullets[nof][0]=x+10;bullets[nof][1]=y-24;sprite[nof].setImage(img,6,6);bullets[nof+1][1]=bullets[nof][1]+10;bullets[nof+1][0]=x+10;sprite[nof+1].setImage(img,6,6);bullets[nof+2][1]=bullets[nof+1][1]+10;bullets[nof+2][0]=x+10;sprite[nof+2].setImage(img,6,6);}publicvoidnewposition(Spritesprite[],inti,intv,Spritejp0,Spritejp1,Spritejp2,Spriteboss,Imageimg){ bullets[i][2]-=5; sprite[i].setPosition(bullets[i][0],bullets[i][1]+bullets[i][2]); sprite[i+1].setPosition(bullets[i][0],bullets[i+1][1]+bullets[i][2]); sprite[i+2].setPosition(bullets[i][0],bullets[i+2][1]+bullets[i][2]);if(sprite[i].collidesWith(jp0,true)){ sprite[i].setImage(img,32,32); sprite[i+1].setImage(img,32,32); sprite[i+2].setImage(img,32,32); sprite[i].setFrame(1); sprite[i+1].setFrame(1); sprite[i+2].setFrame(2); bullets[i][3]=0; bullets[i+1][3]=0; bullets[i+2][3]=0; jp0.setVisible(false); no=1; score=score+1;}if(sprite[i].collidesWith(jp1,true)){ sprite[i].setImage(img,32,32); sprite[i+1].setImage(img,32,32); sprite[i+2].setImage(img,32,32); sprite[i].setFrame(1); sprite[i+1].setFrame(1); sprite[i+2].setFrame(2); bullets[i][3]=0; bullets[i+1][3]=0; bullets[i+2][3]=0; jp1.setVisible(false); no=1;score=score+1;}if(sprite[i].collidesWith(jp2,true)){ sprite[i].setImage(img,32,32); sprite[i+1].setImage(img,32,32); sprite[i+2].setImage(img,32,32); sprite[i].setFrame(1); sprite[i+1].setFrame(1); sprite[i+2].setFrame(2); bullets[i][3]=0; bullets[i+1][3]=0; bullets[i+2][3]=0; jp2.setVisible(false); no=1;score=score+1;}}publicbooleanisAlive(inti){ if(bullets[i][3]==1)returntrue;elsereturnfalse;}publicvoidsetAlive(inti){ for(intz=i;z<i+3;z++) { bullets[i][3]=0; } }publicintrscore(){ returnscore;}publicvoidclean(inti,Spritesprite[]){ for(intz=i;z<i+3;z++) { //sprite[z].setPosition(0,-1500); sprite[z].setVisible(false); no=1; }}}importjavax.microedition.lcdui.*;importjavax.microedition.lcdui.game.*;importjava.util.*;publicclassgameScreenextendsGameCanvasimplementsRunnable,CommandListener{privateFormal;publicLayerManagerlm,lm1;TiledLayerb1;intheight=getHeight();intbosscolor=0;intsbosscolor=0;intsbz=0;intsbmove=0;intsfire=0;intsmovebz=0;intsbpzbz=0;intslife=0;intsbo=0;intdrawslife=0;intlr=0;intdrawadd=0;intpzbz=0;intpzbzover=0; intplaylife=-1;intbosslife=0;intinputno=0;intposition=0;intj1b=0;intjbsz=-1;intsbsz0=-1;intsbsz1=-1;intsbsz2=-1;intsbsz3=-1;intplanepo;intplanepoup;intkkk;intgz=0;intgzks=0;intjiangli=0;intjplaneno;intcloundno=0;intright=0;intleft=1;intboss=0;intover=0;intai=0;intplanert=-1;intsupermen=0;intovercmd=0;intbossover=0;intjpb=-12;intaipp=0;intjbz=0;intcloudposition;Randomaik=newRandom();Randomaip=newRandom();Randomaicloud=newRandom();intjb[]=newint[5];intplayerno=3;

privatemybullets[]huokebullet=newmybullets[9];privateSpritejbullet0,jbullet1,jbullet2,bossbullet0,bossbullet1,bossbullet2;privateSpritecloud[]=newSprite[5];privateMenuScreenms;privateSpritec1,sboss,cboss,j0,j1,j2,boss1;privatelzhhdmmidlet;ints1=0;ints2=65;ints3=0;introw2;introw;intplanecolor=0;intplanecoco=0;publicintby1;publicinty1;publicgameScreen(lzhhdmmidlet){super(true);this.midlet=midlet;addCommand(newCommand("暂停",Command.BACK,1));setCommandListener(this);

lm=newLayerManager();c1=newSprite(img("/pic/MyPlaneFrames.png"),24,24);cboss=newSprite(img("/pic/boss.png"),65,50);jbullet0=newSprite(img("/pic/bullet.png"),6,6);jbullet1=newSprite(img("/pic/bullet.png"),6,6);jbullet2=newSprite(img("/pic/bullet.png"),6,6);bossbullet0=newSprite(img("/pic/bullet.png"),6,6);bossbullet1=newSprite(img("/pic/bullet.png"),6,6);bossbullet2=newSprite(img("/pic/bullet.png"),6,6);sboss=newSprite(img("/pic/smallboss.png"),65,50);b1=createBackGround();c1.setPosition(getWidth()/2,row2+getHeight()-25);System.out.println("ffffffffffff");planepoup=row2;planepo=row2+getHeight();j0=newSprite(img("/pic/jplane2.png"),24,22);j1=newSprite(img("/pic/jplane2.png"),24,22);j2=newSprite(img("/pic/jplane2.png"),24,22);kkk=getHeight()/8;lm.append(j0);lm.append(j1);lm.append(j2);cboss.setVisible(false);aipp=aip.nextInt()%3;if(aipp==0){aipp=aip.nextInt()%3;}lm.append(cboss);lm.append(bossbullet0);lm.append(bossbullet1);lm.append(bossbullet2);lm.append(jbullet0);lm.append(jbullet1);lm.append(jbullet2);lm.append(sboss);jb[0]=1;jb[1]=1;jb[2]=1;jb[3]=1;try{for(inti=0;i<=4;i++){cloud[i]=newSprite(img("/pic/cloud1.png"),16,16);lm.append(cloud[i]);}}catch(Exceptione){System.out.println("cloud");}try{for(inti=0;i<9;i++){

huokebullet[i]=playerbullet("/pic/bullet.png");}}catch(Exceptione){}try{for(inti=0;i<=8;i=i+3){huokebullet[i].no=1;//okhuokebullet[i].score=0;}}catch(Exceptione){System.out.println("ffffffffffffff");}for(inti=0;i<9;i++){lm.append(huokebullet[i]);}lm.append(c1);lm.append(b1);}privateImageimg(Stringpic){

Imageimg=null;try{ img=Image.createImage(pic);}catch(Exceptionexp){System.out.println(exp);}returnimg;}privatemybulletsplayerbullet(Stringpic){Imageimg=null;try{ img=Image.createImage(pic);}catch(Exceptionexp){System.out.println(exp);}returnnewmybullets(img,6,6,21,getWidth(),getHeight());}publicTiledLayercreateBackGround(){Imageimg=null;try{ img=Image.createImage("/pic/beijing.png");

}catch(Exceptionexp){System.out.println("layercreateimage");} TiledLayertiledLayer=newTiledLayer(50,200,img,16,16);int[]map1[]{地图};for(inti=0;i<map1.length;i++){intcolumn=i%15;row=(i-column)/15; tiledLayer.setCell(column,row,map1[i]);}row2=(row+1)*16-getHeight();y1=-row2;returntiledLayer;}booleanconti=true;intrate=50; publicvoidrun() {longst=0; longet=0; Graphicsg=getGraphics(); intl=1350; while(conti){st=System.currentTimeMillis(); input();if(huokebullet[0].isAlive(0)){huokebullet[0].no--;if(huokebullet[0].no>0){ huokebullet[0].newposition(huokebullet,0,3,j0,j1,j2,cboss,img("/pic/explosion.png")); }if(huokebullet[0].no<=0){ huokebullet[0].setAlive(0); huokebullet[0].clean(0,huokebullet);}} if(huokebullet[3].isAlive(3)){huokebullet[3].no--;if(huokebullet[3].no>0){huokebullet[3].newposition(huokebullet,3,3,j0,j1,j2,cboss,img("/pic/explosion.png")); }if(huokebullet[3].no<=0){huokebullet[3].setAlive(3);huokebullet[3].clean(3,huokebullet);}} if(huokebullet[6].isAlive(6)){huokebullet[6].no--; if(huokebullet[6].no>0){ huokebullet[6].newposition(huokebullet,6,3,j0,j1,j2,cboss,img("/pic/explosion.png")); }if(huokebullet[6].no<=0){huokebullet[6].setAlive(6);huokebullet[6].clean(6,huokebullet);}}if(huokebullet[0].collidesWith(cboss,true)){huokebullet[0].setVisible(false); huokebullet[1].setVisible(false); huokebullet[2].setVisible(false);cboss.setFrame(1);if(bosslife<=55){bosslife=bosslife+5;}huokebullet[0].setAlive(0);huokebullet[0].clean(0,huokebullet);}if(huokebullet[0].collidesWith(sboss,true)&&(sbpzbz==0)){ huokebullet[0].setVisible(false);huokebullet[1].setVisible(false); huokebullet[2].setVisible(false); sboss.setFrame(1);if(slife<=75){slife=slife+5;}huokebullet[0].setAlive(0); huokebullet[0].clean(0,huokebullet);if(huokebullet[3].collidesWith(cboss,true)){cboss.setFrame(1); huokebullet[3].setVisible(false);huokebullet[4].setVisible(false); huokebullet[5].setVisible(false);huokebullet[3].no=0;if(bosslife<=55){bosslife=bosslife+5;} huokebullet[3].setAlive(3);huokebullet[3].clean(3,huokebullet);}if(huokebullet[3].collidesWith(sboss,true)&&(sbpzbz==0)){sboss.setFrame(1);huokebullet[3].setVisible(false);huokebullet[4].setVisible(false);huokebullet[5].setVisible(false);huokebullet[3].no=1;if(slife<=75){slife=slife+5;}huokebullet[3].setAlive(3);huokebullet[3].clean(3,huokebullet);}if(huokebullet[6].collidesWith(cboss,true)){ huokebullet[6].setVisible(false); huokebullet[7].setVisible(false);huokebullet[8].setVisible(false);cboss.setFrame(1);if(bosslife<=55){bosslife=bosslife+5;}huokebullet[6].setAlive(6);huokebullet[6].clean(6,huokebullet); }if(huokebullet[6].collidesWith(sboss,true)&&(sbpzbz==0)){sboss.setFrame(1);huokebullet[6].setVisible(false); huokebullet[7].setVisible(false); huokebullet[8].setVisible(false);if(slife<=75){slife=slife+5;}huokebullet[6].setAlive(6); huokebullet[6].clean(6,huokebullet);;}if((y1>-1350)&&(pzbzover==0))

{ switch(ai){ case0: if(jb[0]==1){ jbz=0; j0.setVisible(true); j1.setVisible(true); j2.setVisible(true);j1.setFrame(2); j0.setFrame(2); j2.setFrame(2);j0.setPosition(100-aipp*30,planepoup+24); j1.setPosition(100,planepoup); j2.setPosition(100+aipp*30,planepoup-24);jb[0]=2;}if(jb[0]==2){j0.move(0,3);j1.move(0,3);j2.move(0,3);kkk=kkk-1; }if(kkk<=0){jb[0]=3;if(aipp>=0){j1.setFrame(0); j0.setFrame(0);j2.setFrame(0); j0.move(-3,3);j1.move(-3,3); j2.move(-3,3);}elseif(aipp<0){j1.setFrame(1); j0.setFrame(1); j2.setFrame(1);j0.move(3,3);j1.move(3,3);j2.move(3,3);}if(j2.getY()>planepo) {j0.setVisible(false);j1.setVisible(false);j2.setVisible(false);jbullet0.setVisible(false);jbullet1.setVisible(false);jbullet2.setVisible(false);jpb=-1;ai=aik.nextInt()%4; aipp=aip.nextInt()%5;if(aipp==0){aipp=aip.nextInt()%5;}if(ai<0)ai=ai*(-1);jb[ai]=1; kkk=getHeight()/8;}}if((j1.getX()<=c1.getX()-18)&(jbz==0)){jpb=0;if(j0.isVisible()){jbullet0.setVisible(true);}if(j1.isVisible()){jbullet1.setVisible(true);}if(j2.isVisible()){jbullet2.setVisible(true);}jbullet0.setPosition(j0.getX()+12,j0.getY()+30);jbullet1.setPosition(j1.getX()+12,j1.getY()+30);jbullet2.setPosition(j2.getX()+12,j2.getY()+30);jbz=1;}break;case1: if(jb[1]==1){j0.setVisible(true);j1.setVisible(true);j2.setVisible(true);j1.setFrame(2); j0.setFrame(2);j2.setFrame(2);j0.setPosition(100-aipp*30,planepoup+24);j1.setPosition(100,planepoup);j2.setPosition(100+aipp*30,planepoup-24);;jb[1]=2;}if(jb[1]==2){j0.move(0,3);j1.move(0,3);j2.move(0,3);kkk=kkk-1;}if(kkk<0){jb[1]=3;}if(jb[1]==3){jpb=1;j1.setFrame(3);j0.setFrame(3);j2.setFrame(3);jb[1]=4;}if(jb[1]==4){j0.move(0,-4);j1.move(0,-4);j2.move(0,-4); if(j2.getY()<planepoup){j0.setVisible(false);j1.setVisible(false);j2.setVisible(false);jbullet0.setVisible(false); jbullet1.setVisible(false);jpb=-1; jbullet2.setVisible(false); ai=aik.nextInt()%4; if(ai<0)ai=ai*(-1);jb[ai]=1;aipp=aip.nextInt()%5; if(aipp==0){aipp=aip.nextInt()%5;}kkk=getHeight()/8;}}break;case2:if(jb[2]==1){jbz=0;j0.setVisible(true);j1.setVisible(true);j2.setVisible(true);j1.setFrame(2);j0.setFrame(2);j2.setFrame(2);j0.setPosition(100-aipp*30,planepoup+aipp*30);j1.setPosition(100,planepoup);j2.setPosition(100+aipp*30,planepoup+aipp*30);;jb[2]=2;}if(jb[2]==2){j0.move(0,3);j1.move(0,3);j2.move(0,3);kkk=kkk-1;}if(kkk<=0){jb[2]=3;j1.setFrame(0);j0.setFrame(0);j2.setFrame(0);j0.move(-3,3);j1.move(-3,3);j2.move(-3,3); if(j2.getY()>planepo){jpb=-1;jbullet0.setVisible(false);jbullet1.setVisible(false);jbullet2.setVisible(false);j0.setVisible(false);j1.setVisible(false);j2.setVisible(false);ai=aik.nextInt()%4;if(ai<0)ai=ai*(-1);jb[ai]=1; aipp=aip.nextInt()%5;if(aipp==0){aipp=aip.nextInt()%5;}kkk=getHeight()/8; }}if(((j1.getX()<=c1.getX()-18)||((j2.getX()-6)>=c1.getX()))&(jbz==0)){if(j0.isVisible()){jbullet0.setVisible(true);}if(j1.isVisible()){jbullet1.setVisible(true);}if(j2.isVisible()){jbullet2.setVisible(true);}jpb=0;jbullet0.setPosition(j0.getX()+12,j0.getY()+30); jbullet1.setPosition(j1.getX()+12,j1.getY()+30);jbullet2.setPosition(j2.getX()+12,j2.getY()+30);jbz=1;} break;case3:if(jb[3]==1){jbz=0; j0.setVisible(true);j1.setVisible(true);j2.setVisible(true);j1.setFrame(2);j0.setFrame(2);j2.setFrame(2);j0.setPosition(200-aipp*50,planepoup-aipp*10);j1.setPosition(100,planepoup); j2.setPosition(100+aipp*50,planepoup-aipp*10);jb[3]=2;}if(jb[3]==2){j0.move(0,3);j1.move(0,3);j2.move(0,3);if(gzks==0){if(j1.getX()<c1.getX()){j1.move(2,2);j1.setFrame(1);}if(j1.getX()>c1.getX()){j1.setFrame(0);j1.move(-2,2);}if((j1.getX()<c1.getX())&&((j1.getX()+48)>c1.getX())&&(j1.getY()<c1.getY())){j1.setFrame(2);j1.move(0,2);if(j1b==0){jbullet1.setPosition(j1.getX()+12,j1.getY()+30);j1b=1;}}j0.move(0,3);jbullet1.move(0,3);j1.move(0,3);j2.move(0,3);}if((j2.getY()>(planepo+22))&&(j0.getY()>(planepo+22))&&((j1.getY()<(planepoup-22))||(j1.getY()>(planepo+22)))){jb[3]=1;gz=0;gzks=0;jbullet1.setVisible(false);jbullet2.setVisible(false); j0.setVisible(false);j1.setVisible(false); j2.setVisible(false);ai=aik.nextInt()%4;if(ai<0)ai=ai*(-1);jb[ai]=1;aipp=aip.nextInt()%5;if(aipp==0){aipp=aip.nextInt()%5;}kkk=getHeight()/8;}if((j2.getX()<=c1.getX()-18)&(jbz==0))/{jpb=0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论