基于javaJ2ME的堡垒游戏设计与实现毕业论文程序源码大家好今天给大家介绍基于javaJ2ME的堡垒游戏设计与实现更多精选毕业设计项目下载见文末哦。文章目录基于javaJ2ME的堡垒游戏设计与实现毕业论文程序源码1、项目简介2、资源详情3、关键词4、资源下载5、毕设简介6、精选500套毕业设计软件源码和配套论文下载1、项目简介该堡垒游戏是基于J2ME开发的手机RPG游戏采用midp2.0技术实现了菜单、地图、主角动作及怪物动作和AI等主要通过精灵间的碰撞检测来触动事件发生。游戏的主流程是玩家利用手机键盘操作主角在堡垒中拾取道具破解迷宫并且随着关数的增加游戏的难度也逐渐增加。另外游戏中还包括了排行榜声音设置帮助等各种附加功能。其中充满了趣味性和刺激性是适合各年龄段的益智冒险类游戏。本论文介绍了J2ME的相关技术及该堡垒游戏程序的结构分析和具体功能的实现。2、资源详情项目难度中等难度适用场景相关题目的毕业设计配套论文字数9848个字26页包含内容整套源码完整毕业论文答辩PPT3、关键词J2ME 手机游戏 堡垒4、资源下载本项目源码及完整论文如下有需要的朋友可以点击进行下载。如果链接失效可点击最下方卡片扫码自助下载。序号毕业设计全套资源点击下载本项目源码基于javaJ2ME的堡垒游戏设计与实现源码文档_java_J2ME_堡垒游戏.zip5、毕设简介提示以下为毕业论文的简略介绍项目源码及完整毕业论文下载地址见文末。引 言省略2 手机游戏的现状和J2ME的概况2.1软件现状省略2.2 J2ME概况2.2.1 J2ME的由来Java的最大目标和特点就是“一次编写到处运行”的平台无关性。但是一套标准无法适应各种不同的需求。因此Java技术目前共有三套分别针对不同的平台和应用。省略2.2.2 J2ME的3层体系结构及MIDP简介J2ME的3层体系结构依照各种设备的资源特性将J2ME技术构架分为简表Profile、配置Configuration和Java Virtual MachineJVM3层然后再进一步细分这使J2ME能够在每一类设备的限制下工作而同时提供最低限度的Java语言功能性。关于J2ME的体系结构可以这样来进行总结Configuration的分类是根据计算能力的不同来划分的同类设备的计算能力相近。Configuration是一个规范定义了这类设备的共同Java平台定义与设备无关的Java虚拟机和核心库是平台相容性的基础。Profile的分类是根据设备功能划分的同类功能的设备其他各种硬件条件和需求也相近。Profile是一组API在某Configuration的基础上扩展了针对设备特定功能的API使得标准能够完全适应特殊的设备彻底发挥设备的功能。J2ME体系的一般结构是由Configuration定义的Java虚拟机运行于设备的宿主操作系统之上构成整个平台的基础。Configuration提供了基本的语言特性Profile提供针对设备的特殊功能API和扩展类库。应用程序的运行环境需要一个Configuration和至少一个Profile多个Profile可以共存也可以叠加。省略2.2.3 Configuration和Profiles省略2.3 J2ME现状和前景省略2.4 手机游戏业务手机游戏是移动多媒体时代最有价值的应用。这是因为游戏是多媒体应用中集大成的业务图像、音乐、互动都能在游戏中实现能充分满足用户各方面的需求。虽然目前手机游戏还无法与PC游戏相比其显示功能和键盘输入、声音处理能力也形成一定制约。但是随时随地可操作可联网的特性大大拓展了人们娱乐休闲的时间和空间以游戏功能为主的手机终端在市场上渐被认可多媒体功能正向手机的标配功能演进制约手机游戏发展的技术瓶颈将被打破。当前的手机游戏产业尽管仍然存在很多制约其发展的瓶颈但手机游戏已显示出非比寻常的发展速度其市场潜力十分巨大将成为移动增值服务市场新的增长点。3 开发环境介绍3.1开发环境操作系统Microsoft Windows程序语言Java开发平台JavaMicro Edition开发工具 Wireless Tool Kit UltraEdit3.2 关于SonyEricsson Wireless Tool Kit省略4手机游戏堡垒的开发4.1 游戏的的思路、构想4.1.1 游戏想法的产生相信大家一定都在8位机机上玩过《冒险岛》这款游戏非常有趣味性。游戏中玩家通过不断的闯关来解救公主。在每个关都很很多的怪物阻挡着你所以需要运用各种机关或者秘籍来杀死它们。杀死他们的同时还可以获得各种奖励加生命加血等增加了游戏的趣味性。如图2所示图2 游戏截图这款《冒险岛》游戏的实现相对于其他RPG或者网络版手机游戏稍简单一些适合初学者作为练习所以我决定编写一款类似的手机游戏。由于之前对手机游戏的编程知识以及游戏的设计只有初步的了解因此我们在游戏的构架和思路上经历了几个阶段。4.1.2 对游戏设计的初步认识刚开始我们只对J2ME有初步的了解。这时我们只是模仿之前在PC上看到的游戏用语言把游戏的实现感性的描述为几大部分游戏界面系统包括游戏开始界面游戏开局界面游戏运行界面游戏结束界面。游戏元素菜单类画布类人物类排行榜类。4.1.3 模块成型阶段在进一步熟悉了J2ME知识后对框架做出了一些修改逐步把游戏的基本功能确定。游戏依次进入加载界面主菜单游戏运行界面游戏结束界面。具体实现的功能为1主菜单有如下选项1开始游戏——进入游戏界面。2声音——设置声音的有无选项。3帮助——介绍游戏的玩法。4排行榜——玩家所得分数的排行榜。5关于——用来显示说明信息以及背景图片。2游戏运行界面包括游戏界面目前游戏得分游戏关数生命次数3游戏结束界面游戏结束后显示一行说明信息然后退回到菜单。游戏的主要模块为1游戏主MIDletGameMIDlet——对游戏生命周期的判断对画布类的调用管理游戏程序中各个屏幕之间的转换。2游戏画布MyGame——对游戏所用变量常量的设定游戏的初始化游戏中精灵运动轨迹的控制精灵与砖块的碰撞检测以及砖块状态的控制游戏中各关卡的基本设定游戏中对按键状态的处理。3菜单类——游戏中菜单事件的处理。4GameOgre类——游戏中怪物的类。5GamePlayer类——玩家控制的精灵类。6GameRMS类——用于实现分数排行榜。7PlayMusic类——用于实现音乐的播放。8MySet类——声音大小的设置。4.2 程序的类结构程序一共有8个主要类其中菜单类负责各个屏幕的切换。程序的类结构如图3所示图3 类结构4.3 游戏的流程图进入游戏菜单。初始情况下游戏菜单有5个选项它们分别是开始游戏、游戏说明和排行榜、设置、关于。选择开始新游戏则进入游戏在游戏中如果按下非游戏键则中断游戏返回菜单此时菜单中增加了一个继续游戏的选项可以返回游戏也可以重新开始新的游戏。在菜单中选择游戏说明或者高分记录则进入相应的屏幕他们都能用“后退”软键返回菜单。菜单中的退出选项用于退出程序。4.4 游戏的实现游戏一共实现了几个类包括用于游戏外部的、菜单类、排行榜屏幕类、声音设置屏幕类、结束屏幕类以及用于游戏本身的游戏画布类、声音效果类。4.4.1 主类GameMIDlet的实现MIDlet是最核心的类。MIDlet程序有三种状态1暂停状态2运行状态3销毁状态J2ME程序都是从MIDlet类开始执行系统在执行MIDlet程序时首先构造一个MIDlet类型的对象然后使程序进入到暂停状态按照生命周期的规定系统会自动调用MIDlet对象的startApp方法使程序进入到运行状态开始程序的执行。下图是运行时显示的画布对象:图5 屏幕之间的切换首先先要创建MIDlet类型的对象下面我们来看对象的构造方法//主程序构造方法publicGameMIDlet(){rsnull;RecordName“GameRMS”;GameMenu.displayDisplay.getDisplay(this);GameMenu.midletthis;}在这个构造器中创建了一个Display对象用于显示然后把当前程序的引用传给菜单类中的静态变量。Display类有两个最主要的作用1、 获得屏幕的属性。例如屏幕是否是彩色的以及支持的颜色数量等信息。2、 控制屏幕的显示。例如使屏幕显示某个指定界面或者获得当前的显示界面等。其中特别是第二个作用使用的更加频繁。当程序启动的时候则调用了程序的startApp方法用来显示画面publicvoidstartApp(){//程序开始打开数据库如果数据库没有数据就添加10笔空白数据最后关闭数据库try{rsRecordStore.openRecordStore(RecordName,true);}catch(Exception e){System.out.println(“创建数据库失败”);}GameRMS rdnewGameRMS(“player”,0);byte tem[]rd.encode();try{if(rs.getNumRecords()0){for(inti1;i11;i){try{rs.addRecord(tem,0,tem.length);}catch(Exception e){System.out.println(“添加数据失败”);}}}}catch(Exception e1){System.out.println(“得到数据库大小失败”);}try{rs.closeRecordStore();}catch(Exception e){System.out.println(“关闭数据库失败”);}//将画面设为主画面MAIN SCREENnewThread(this).start();}程序开始打开数据库如果数据库没有数据就添加10笔空白数据最后关闭数据库然后开始一个新的线程启动菜单。MIDP中的存储系统是实际为一个类似于数据库的系统而并不是简单的文件系统这个系统称为记录管理系统Record Management SystemRMS。RMS实现数据的持久性管理提供了数据存储的功能可以在程序下次启动是再次使用。记录存储是面向记录的数据库可把一个记录存储看作一个数据库文件由许多记录组合而成这些记录将持久保存并支持跨多个MIDlet的请求。在系统平台的整个常规应用期间包括重启更换电池等MIDlet的记录存储都由系统平台负责维护系统会尽可能维持记录的完整性。当调用destroyApp 这个方法的时候则退出程序。publicvoiddestroyApp(boolean unconditional){exit();}publicvoidexit(){System.gc();notifyDestroyed();}退出程序的时候要实行垃圾回收释放掉不再使用的内存。2屏幕切换如图6图6 屏幕切换菜单的图形切换采用的是流程控制器非常方便简洁的实现了屏幕画面的切换下面是关键实现代码//导航器//设置4个常量分别代表主画面游戏画面帮助画面和排行榜画面final publicstaticintMY_MENU1;final publicstaticintMY_GAME2;final publicstaticintMY_HELP3;final publicstaticintMY_RMS4;final publicstaticintMY_ABOUT5;final publicstaticintMY_SET6;采用静态变量来对画面进行标识。//流程执行获得需要画面的对象并显示在屏幕上publicstaticvoidshow(){switch(current){caseMY_MENU:display.setCurrent(MyMenu.getInstance());break;caseMY_GAME:display.setCurrent(MyGame.getInstance());break;caseMY_SET:display.setCurrent(MySet.getInstance());break;caseMY_HELP:display.setCurrent(MyHelp.getInstance());break;caseMY_RMS:display.setCurrent(MyRms.getInstance());break;caseMY_ABOUT:display.setCurrent(MyAbout.getInstance());break;}}这样采用上面这个函数非常方便的实现了流程的转换。实现屏幕的切换。4.4.2 游戏画布MyGame类的实现在J2ME游戏编程中Canvas类是最常用的类之一该类提供了获得手机屏幕属性、绘制界面以及事件处理等很多实用的功能。Canvas类是Displayable的子类主要用来需要处理低级事件例如键盘按键事件等以及需要绘制屏幕的程序。在实际的使用过程一般都通过继承Canvas来利用该类提供的功能。Canvas类是一个抽象类继承该类的时候必须覆盖paint方法。GameCanvas 类提供了基本的游戏用户接口。除了从Canvas 继承下来的特性(命令,输入事件等)以外,它还提供了专门针对游戏的功能,比如后备屏幕缓冲和键盘状态查询的能力。这也是GameCanvas与Canvas相比所具有的两个优点.来看游戏画面当流程控制器转到游戏运行界面时则用到了游戏画布MyGame类。下面是游戏截图图7 游戏截图下面来看类的声明public class MyGame extends GameCanvas implements Runnable{}我们所用的画布程序正是继承了GameCanvas这个类同时派生了Runnable接口来实现生成一个新的线程的功能。 程序的run方法 publicvoidrun(){longst0;longet0;Graphics ggetGraphics();for(stage2;stage4;stage){flagtrue;g.setColor(0,0,0);g.fillRect(0,0,getWidth(),getHeight());g.setColor(255,255,0);g.setFont(Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_LARGE));g.drawString(“第 ”(stage-1)“ 关”,getWidth()/2-30,getHeight()/2-10,Graphics.TOP|Graphics.LEFT);flushGraphics();try{Thread.sleep(1000);}catch(InterruptedException e1){}CREAT_STAGE();// 调用创建关卡的方法try{Thread.sleep(500);}catch(InterruptedException e1){}mpaint(g);isKeytrue;while(flag)//游戏正式开始{while(ispause)//判断是否按下暂停{try{Thread.sleep(100);}catch(Exception e){}}stSystem.currentTimeMillis();StartGameTimeSystem.currentTimeMillis();INPUT_KEY();//调用按键方法PENG_ZHUANG();//调用各种判断和行动的方法movMing();//调用刷新画面的方法mpaint(g);etSystem.currentTimeMillis();if((et-st)rest){try{Thread.sleep(rest-(et-st));}catch(Exception e){}}}if(isEndGame)//判断是否输掉游戏{if(islose){EedGameTimeSystem.currentTimeMillis();g.setColor(0,0,0);g.fillRect(0,0,getWidth(),getHeight());g.setColor(255,255,0);g.setFont(Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_PLAIN,Font.SIZE_LARGE));g.drawString(“你失败了”,getWidth()/2-40,getHeight()/2-20,Graphics.TOP|Graphics.LEFT);flushGraphics();try{Thread.sleep(3000);}catch(Exception e){}// init_Game();break;}}}if(isEndGame)//判断是否赢得游戏{if(!islose){EedGameTimeSystem.currentTimeMillis();g.setColor(0,0,0);g.fillRect(0,0,getWidth(),getHeight());g.setColor(255,255,0);g.setFont(Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_PLAIN,Font.SIZE_LARGE));g.drawString(“你胜利了”,getWidth()/2-40,getHeight()/2-20,Graphics.TOP|Graphics.LEFT);flushGraphics();try{Thread.sleep(3000);}catch(Exception e){}// init_Game();}// GetScore();if(score0){GameName innewGameName();GameMenu.display.setCurrent(in);in.start();}else{GameMenu.currentGameMenu.MY_MENU;GameMenu.show();}}}}在线程中通过1、调用创建关卡的方法CREAT_STAGE();2、判断是否按下暂停while(ispause)3、调用按键方法INPUT_KEY();4、调用各种判断和行动的方法PENG_ZHUANG();5、调用刷新画面的方法movMing();6、判断是否输掉游戏if(isEndGame)7、判断是否赢得游戏if(isEndGame)来对游戏进行不断监控。4.4.3 玩家精灵GamePlayer类的实现Sprite类是继承自Layer的用于存储多帧的基本可视元素。不同的frame可交相显示构成动态的效果。图片可翻转、颠倒、由一个主角图片就可以方便的得到所有方向的显示状态相比原先只能使用Canvas绘图需要将所有方向的主角图像都绘制在png图像中简化了许多。Sprite也可以从整合的图像中读图读图时将把大图分解为若干等宽等高的小图。每个小图按照其排列顺序有相应的序号在程序中调用其序号就可以绘制出相应的图片。本程序中的玩家、怪物都由Sprite继承得到。在有些情况下控制主角的翻转尤其是多幅图片配合显示的过程如果将多图的共享定位点设置在通常的左上角将很不容易控制因为许多翻转都是以其他点为参考电的比如中心点。由此引入参考点的概念。参考点由defineReferencePixel函数确定未翻转图片状态时的坐标。默认是(0,0)点如果需要可将参考点设置在画面边界之外。在本程序中由于J2ME中提供的Sprite类功能有限所以我自己写了一个GamePlayer类来继承Sprite类扩充了更多的功能。public class GamePlayer extends Sprite{}在游戏中和背景的碰撞检测始终是个难点在本程序中是这样实现的 publicvoidisPeng(intx,inty,intArray[][],intN){for(inti0;i20;i){for(intj0;j18;j){if(Array[i][j]N){if(!MyGame.isU){if(Length*jxthis.getWidth()/2Length*(j1)xthis.getWidth()/210Length*iy10Length*(i1)y){this.setPosition(this.getX(),20Length*(i1));System.out.println(“UP:”getY());}//左if(Length*jx1Length*(j1)x110Length*iythis.getHeight()/210Length*(i1)ythis.getHeight()/2){this.setPosition(Length*(j1),this.getY());}if(Length*jxthis.getWidth()-1Length*(j1)xthis.getWidth()–110Length*iythis.getHeight()/210Length*(i1)ythis.getHeight()/2){this.setPosition(Length*j-this.getWidth(),this.getY());}}//左下if(Length*jx3Length*(j1)x310Length*iythis.getHeight()10Length*(i1)ythis.getHeight()){this.setPosition(this.getX(),Length*(i-1));}//右下if(Length*jxthis.getWidth()-3Length*(j1)xthis.getWidth()-310Length*iythis.getHeight()10Length*(i1)ythis.getHeight()){this.setPosition(this.getX(),Length*(i-1));Length*i:Length*(i-1));}}}通过查看背景数组和玩家坐标来实现和背景的碰撞检测。4.4.5 SoundEffects类的实现声音效果是一个游戏中必不可少的部分没有了生动的音乐效果游戏的体验就会大打折扣。在我们的游戏中当然也不能没有声音。在我们的游戏程序中的PlayMusic类就是游戏中的音效类。该类的主要功能为使用MIDP2.0 Media API播放游戏中的声音效果背景音乐和游戏结束的提示音。我们用private Player createPlayer(String filename, String f, int i) 创建播放器。该方法中的filename是要播放声音文件的相对路径f是播放音乐文件的格式i用来控制该音乐的播放次数。在播放某个声音之前我们都需要调用stop方法来中止声音如果声音未播放则该方法无效。游戏中的声音我们用的startPlayer方法来播放。在需要播放游戏中的声音时我们就调用该类中相应的方法。5 程序设计过程中遇到的一些重要问题5.1 关于碰撞的问题在游戏中最先要解决的也是最重要的问题就是碰撞检测的实现以及碰撞后表现出的效果。在弹球游戏中碰撞检测分为俩种精灵与精灵之间的碰撞检测以及精灵与方块图层之间的碰撞检测。精灵与精灵之间的碰撞检测可以直接调用Sprite类中的collidesWith()方法或者自己重新Sprite类中的collidesWith()方法并调用来进行碰撞检测。在本游戏程序中我们使用的是后者。这点表现效果还是很不错的。再者就是精灵与图层之间的碰撞检测即主角与砖块之间的碰撞检测。我们精灵中重写的collidesWith()方法来检测它们之间的碰撞检测这个时候我们就存在一个怎么样判断与小球碰撞的是哪个砖块的问题。我所采用的是通过查看背景数组和玩家坐标来实现和背景的碰撞检测但是效果不是很理想。到目前在我们经过的多次测试中还没有出现判断失误以及无法判断等错误。可是效果不理想我还将继续探索更精更有效的算法。5.2 关于游戏画面的显示问题在后期测试中发现游戏在暂停后继续游戏时游戏画面又恢复为游戏开始的画面而不是暂停时的游戏画面经过多次调试后发现问题在MyGameCanvas类。在仔细阅读了相关的资料后发现线程的创建和运行是通过调用它本身的函数start()来调动run()函数开始运行的当run ()方法执行完毕后,线程就结束了。一旦一个线程执行完毕,这个实例就不能再重新启动,只能重新生成一个新实例,再启动一个线程。鉴于此我们决定在MyGameCanvas类的run()内设置一个暂停标志量pause。这样就实现了游戏的暂停挂起功能。当继续游戏后游戏画面就是我们暂停时的画面。结 论本程序设计实现了手机上以J2ME为平台的堡垒游戏的开发具有一定的可玩性和复杂性。经过了细心的调试和排错解决了绝大部分的问题。通过对“沙丘魔堡”这个手机游戏的构想设计代码的编写和调试我进一步学习了J2ME这个平台并对手机游戏编程有了新认识。就我所做的模块来说我对J2ME中的菜单、声音、画布等技术有了更进一步的认识。一个简单的菜单的背后却有着不同的写法以及一些复杂的技术。我现在已经做出的是游戏的1.0版本实现了游戏的基本功能离一个完全意义上的手机游戏还有一段的距离1.游戏只在模拟器上运行还没有经过真机调试2.游戏的选项界面没有经过任何效果美化3.能调节声音的大小及开关背景音乐。这款游戏算是休闲类的一款小游戏如果能继续完善游戏的菜单功能增加游戏可玩性等那这款游戏将会是一款比较具有人气的手机游戏。参考文献[1] 胡虚怀杨志和李焕.J2ME移动设备程序设计[M].北京清华大学出版社,2005。[2] 李振鹏龚剑.J2ME手机游戏开发技术详解[M]. 北京清华大学出版社,2006。[3] 詹建飞.J2ME开发精解[M].北京电子工业出版社,2006。[4] 施铮.J2ME技术参考手册[M].北京电子工业出版社,2004。[5] 微型爪哇人.JAVA手机开发[M].北京中国铁道出版社,2003。[6] 闻怡洋.J2ME MIDP 1.0/2.0无线设备编程指南[M].北京北京大学出版社2004。致 谢省略6、精选500套毕业设计软件源码和配套论文下载500套毕业设计软件源码和配套论文下载提示如果下载链接失效可点击下方卡片扫码自助下载。