J2ME设计--飞机大战.doc_第1页
J2ME设计--飞机大战.doc_第2页
J2ME设计--飞机大战.doc_第3页
J2ME设计--飞机大战.doc_第4页
J2ME设计--飞机大战.doc_第5页
免费预览已结束,剩余39页可下载查看

下载本文档

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

文档简介

面向对象程序设计II -J2ME课程设计论文题 目:飞机大战学 院:计算机与信息工程学院专 业:计算机科学与技术班 级:计算机06-7班姓 名:栾习文学 号:23起止时间:2008.12.21-2008.12.31 成绩: 课程设计成绩评定表质量评价指标(在相应栏目打)评 价 项 目评 价 质 量优秀良好一般及格不及格工作量和态度实验、计算可靠性文字和图表质量程序完成情况总体评价评定成绩评定人员签名2008年12月31日IV课程设计任务书一、设计题目:飞机大战二、设计内容:飞机大战是在移动电话中常见的飞机射击类的游戏程序,它是向前飞行时不断攻打敌机,前进到最后关卡与一个大型飞机决战,然后一关关通过.它可以清楚地展现飞机的射击和前进的过程,以及每一关的切换。三、设计要求:1开始显示初始化游戏界面,选择开始进入主界面,显示玩家可操作的基本功能,如新游戏,游戏设置,游戏记录,帮助。2进入主界面后,如果不进行其它设置,就可以选择新游戏,直接进入游戏,如果进行其它设置就分别进行选择,进入相应界面进行相应的设置。3游戏运行时,使用上下左右键进行移动,使用回车键发射子弹攻击。四、工作计划:时间完成内容提交文档备注第1天查找资料,确定题目,选择方案课程设计任务书设计准备阶段第2天第3天题目分析,设计算法算法描述设计阶段第4天功能模块的划分和设计结构流程图等第5天第6天实现具体数据结构和模块无第7天程序设计与调试无运行并验证程序功能第8天第9天检查程序第10天整理材料,撰写论文课程设计论文指导教师: 王艳涛 教研室主任: 2008 年 12月31 日II 本科课程设计论文摘 要J2ME平台应该是最被受用的手机游戏平台,它被大众所接受使用。随着手机的日益普及、Java功能在移动设备上的实现,Java应用程序产生的手机增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。本论文着眼于J2ME技术的应用,开发一款可商用的手机游戏程序。本程序将老少皆宜的经典作品移植到手机上来,为更流行的硬件平台提供应用软件。本论文介绍了J2ME的相关技术及本程序的结构分析和具体功能的实现。关键词:J2ME 面向对象 手机游戏9目 录课程设计成绩评定表II课程设计任务书III摘 要II目 录III1 设计内容12 设计过程12.1设计方案的论证12.2概要设计22.3界面设计图32.4代码实现103 设计总结11参考文献11附录:程序源代码121 设计内容飞机大战是在移动电话中常见的飞机射击类的游戏程序,它是向前飞行时不断攻打敌机,前进到最后关卡与一个大型飞机决战,然后一关关通过.它可以清楚地展现飞机的射击和前进的过程,以及每一关的切换。2 设计过程2.1设计方案的论证Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。虽然大多数用户很乐于将 Eclipse 当作 Java IDE 来使用,但 Eclipse 的目标不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用 Java 语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如 C/C+、COBOL 和 Eiffel 等编程语言的插件已经可用,或预计会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。虽然 Java 已经被用到许多企业级软体上,可是其实骨子里面还是非常适合用在嵌入式系统之中。Java平台演进到Java2后,Java平台分别针对不同领域的需求被分成四个版本,亦即J2EE、J2SE、J2ME以及JavaCard。其中J2ME定位在消费性电子产品的应用上。这个版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。这个版本的应用层面相当广泛,会是未来Java平台发展的重点项目。J2ME在1999年的JavaOne开发人员大会上初次亮相,它的目标是面向智能无线设备和小型计算机设备的开发人员。J2ME的一个关键优点是,J2ME与所有支持Java的设备都是兼容的。支持Java的设备就是任何运行Java虚拟机器的计算机。Motorola、Nokia等生产厂商都生产支持Java的设备。、J2ME平台是由配置(Configuration)和简表(Profile)构成的。配置是提供给最大范围设备使用的最小类库集合,在配置中同时包含Java虚拟机。简表是针对一系列设备提供的开发包集合。在J2ME中还有一个重要的概念是可选包(Optional Package),它是针对特定设备提供的类库,比如某些设备是支持蓝牙的,针对此功能J2ME中制定了JSR82(Bluetooth API)提供了对蓝牙的支持。目前,J2ME中有两个最主要的配置,分别是Connected Limited Devices Configuration(CLDC)和Connected Devices Configuration(CDC)。作为第一个面对小型设备的Java应用开发规范,CLDC是由包括Nokia,Motorola和Siemens在内的18家全球知名公司共同协商完成的。CLDC是J2ME核心配置中的一个,可以支持一个或多个profile。其目标主要面向小型的、网络连接速度慢、能源有限(主要是电池供电)且资源有限的设备,如手机、PDA等。而CDC则是主要用于运算能力相对较佳、在电力供应上相对比较充足的嵌入式装置 (比方说冷气机、电冰箱、电视机机顶盒 (set-top box)2.2概要设计本程序共有2个java源文件:moonlight.java:该文件是MIDlet父类。MainCanvas.java:该文件负责游戏控制和相关功能实现。进入游戏游戏开始玩家被击落了吗 ?玩家是否还有机会?继续游戏是否过关返回主界面YYNYYNN游戏选择设置2.3界面设计图经过进一步的分析设计,得到系统的框图如图1所示。(1)初始化开始界面(如图2所示)开始界面有选择或退出进入主程序界面。开始界面即显示了程序初始的第一个屏幕,一般用于游戏的初步信息.(程序中使用FlashUI实现)。(2)主界面(如图3所示)进入主程序界面后可以选择选择主菜单里的选项,(它是由MainUI类实现),它包含了玩家可操作的基本功能,如新游戏,游戏设置,游戏记录和帮助。(3)游戏设置(如图4所示)可以选择哪一关,以及飞机的飞行速度。(4)游戏记录(如图5所示)显示玩家所创造的最高分数。(5)游戏帮助(如图6所示)知道玩家怎样进行游戏及相关内容。(6)选择角色界面(如图7所示)(添加联系人界面由NewUI类实现),它包含了角色信息的内容,按选择键选择,进入游戏。(7)游戏的运行界面(如图8所示)显示飞机的前进进攻过程,和战斗场面。(8)游戏关卡(如图9所示)当通过重重攻打到了最后阶段,将面临一个大型飞机,需要攻打毁灭它,才能进入下一关。(9)游戏过关(如图10所示)通过不懈努力战胜了大型飞机,总结本关的信息。进入游戏界面新游戏返回主界面主程序模块内容使用选择角色游戏设置置游戏记录帮助游戏开始游戏过关过关确定取消选择关数选择速度最高分数怎样游戏图 1系统结构框图图 2初始化开始界面图 图 3主界面图 图 4游戏设置界面 图5游戏记录界面 图 6游戏帮助界面 图 7 选择角色界面 图8游戏运行界面 图 9游戏关卡界面图 10游戏过关界面 2.4代码实现import javax.microedition.lcdui.Display;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class moonlight extends MIDlet static Display display; private MainCanvas mc; public moonlight() display = Display.getDisplay(this); mc = new MainCanvas(display, this); protected void pauseApp() protected void startApp() throws MIDletStateChangeException Display.getDisplay(this).setCurrent(mc); protected void destroyApp(boolean flag) throws MIDletStateChangeException 3 设计总结在数据库、各种应用软件和游戏中,我仍觉得对游戏的设计有极大的热情。因为其各个模块间的联系十分紧密,代码重复执行率高,当经过无数次的调试、修改后,能最终看到成品,有无比自豪的心情。大学期间做过图书馆管理程序等简单的数据库管理系统的课程设计,思想大致相似,变化范围有限,没有太多自己可发挥的余地。大家作品的最终结果都离不开同一个模式。相比一些数据库软件,游戏的设计有很多人情色彩和艺术思想的发挥,正式商业的软件的人性化界面和各个游戏间迥异的结构每每会让人有去开发的冲动。学习J2ME的困难远远超出了想象,很多相关的技术,如需要使用到的线程、Game包的新功能、高级、低级图形界面的使用、贴图等,每一项都需要花一定的时间去掌握和熟悉。更为困难的是,J2ME为一种刚出现仅几年的新技术,国内的参考资料非常少,仅有的几本也停留在简单的介绍阶段。台湾的王森写了本较好的书,给了我很大的帮助,但对设计该游戏来说,仍只够入门。参考文献1 王森著. Java手机/PDA程序设计入门. 电子工业出版社,2005:22 陈立伟 张克非 黎秀红. 精通JAVA手机游戏与应用程序设计. 中国青年出版社,2005:53 袁海燕 王文涛. JAVA实用程序设计100例. 人民邮电出版社.2005:54 James Keogh著.潘颖 王磊译. J2ME开发大全. 清华大学出版社. 2004:2附录:程序源代码import java.io.*;import java.util.Random;import javax.microedition.lcdui.*;import javax.microedition.midlet.MIDlet;import javax.microedition.rms.RecordStore;public class MainCanvas extends Canvas implements Runnable, CommandListener static int MainFlag = 0; static int ThreadSpeed = 100; static int ReadCount = 0; static int ik = 0; static int gk = 0; static boolean FlgSoftKey1 = false; static int TitleCount = 0; static int BackMain = 0; static String StrHelpMenu = null; InputStream is; public static Command toggleCommand; static int rsId = 0; static Image offImage = null; static Graphics offGfx = null; static Image imgTitle; static Image imgMyShip; static Image imgEShot = new Image10; static boolean PlayerAlive = true; static int PlayerBomb = 0; static int MySpecialCount = 0; static int MyChar; static int ShotWait; static boolean EShotAlive = new boolean100; static int EShotType = new int100; static int StarType = new int10; static int EncountNumber = 0; static boolean FlgOption = new boolean3; static int Round = 1; static int Score = 0;static int MyLife = 5; static boolean GameClear = false; static boolean FlgGameOver = false; static int FlgBoss = 0;static int Path = new int2; public MainCanvas(Display display1, moonlight moonlight1) display = null; thread = null; god = new Random(); SCREEN_WH = SCREEN_W / 2; is = null; boolean flag = false; app = moonlight1; display = display1; catch(Exception exception) offImage = Image.createImage(SCREEN_W, SCREEN_H); offGfx = offImage.getGraphics(); DataLoad(); for(int i = 0; i = (long)ThreadSpeed) l = System.currentTimeMillis(); AutoEvent(); repaint(); System.gc(); catch(Exception exception) catch(Exception exception1) return; while(true); public void commandAction(Command command, Displayable displayable) public void AutoEvent() boolean flag = false; boolean flag1 = false; switch(MainFlag) case 2: / 002 case 3: / 003 case 4: / 004 case 5: / 005 case 6: / 006 break; case 0: / 0 try Object obj = null; if(ReadCount != 0) if(ReadCount = 1 & ReadCount = 20) ChangeMain(2); break; case 7: / 007 Object obj1 = null; int ai = 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5 ; try if(ReadCount != 0) if(ReadCount = 1 & ReadCount 11) if(ReadCount = 1) is = getClass().getResourceAsStream(tboss1); int j = ReadCount - 1; if(aiReadCount - 1 = Stage) byte abyte1 = new byteBOSS_SIZE1j; is.read(abyte1); imgBossj = Image.createImage(abyte1, 0, abyte1.length); abyte1 = null; System.gc(); else is.skip(BOSS_SIZE2k); ChangeMain(8); ReadCount+; case 8: / b if(FlgBoss != 0); if(!PlayerAlive) PlayerBomb+; FlgGameOver = true; for(int k11 = 0; k11 0) MySpecialCount-; StarYl11 += (l11 2) + 5; for(int i23 = 0; i23 2; i23+) for(int i12 = 0; i12 30; i12+) if(MyShotXi12 -10) MyShotAlivei12 = false; for(int k14 = 0; k14 20; k14+) if(EnemyTypek14 != 0 & EnemyAlivek14 & Math.abs(EnemyXk14 - MyShotXi12) 1) + 4 & Math.abs(EnemyYk14 - MyShotYi12) 1) + 4) MyShotAlivei12 = false; EnemyLifek14-; if(EnemyLifek14 = 0) EnemyAlivek14 = false; PlusScore(EnemyPointk14); if(PlayerAlive) if(PAttackMode = 0) ShotWait-; if(ShotWait = 0) AnimMyLazer = 1 - AnimMyLazer; MyLazerLength = 0; boolean flag2 = false; else byte4 = 16; for(int j12 = 0; j12 15; j12+) MyLazerLength += byte4; BossDamagel14 = true; if(MyChar = 0) BossLifel14 -= 4; flag2 = true; else for(int i15 = 0; i15 20; i15+) if(EnemyTypei15 != 0 & EnemyAlivei15 & EnemyYi15 = PlayerY - MyLazerLength & Math.abs(EnemyXi15 - PlayerX) 1) if(MyChar = 0) EnemyLifei15 -= 5; else EnemyLifei15 -= 3; if(EnemyLifei15 = 0) flag2 = true; for(int k12 = 0; k12 100; k12+) if(EShotAlivek12) switch(EShotTypek12) default: break; case 0: / 0 case 1: / 001 case 2: / 002 case 3: / 003 case 4: / 004 case 5: / 005 EShotXk12 += EShotMXk12; if(EShotXk1

温馨提示

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

评论

0/150

提交评论