2022年JME课程设计方案报告模板.docx

上传人:Che****ry 文档编号:12794352 上传时间:2022-04-26 格式:DOCX 页数:37 大小:99.94KB
返回 下载 相关 举报
2022年JME课程设计方案报告模板.docx_第1页
第1页 / 共37页
2022年JME课程设计方案报告模板.docx_第2页
第2页 / 共37页
点击查看更多>>
资源描述

《2022年JME课程设计方案报告模板.docx》由会员分享,可在线阅读,更多相关《2022年JME课程设计方案报告模板.docx(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精品学习资源封面欢迎下载精品学习资源作者: PanHongliang仅供个人学习J2ME课程设计报告J2ME手机贪吃蛇欢迎下载精品学习资源专业:软件工程班级: 2组号: 指导老师:郭俊二 011 年 9月 14 日摘要1) 介绍工程意义背景;本文给出了一个基于 MIDP2.1 的贪吃蛇玩耍的设计方案,并给出全部实现源代码;利用 J2ME语言编程的思想来完成系统的设计,然后编写出程序设计代码进行界面设计 , 实现友好的界面交互,具有清楚的程序流程图,最终编程实现了全过程;2) 本文作的主要工作:(1) ),贪吃蛇是个老幼皆宜的小玩耍;(2) ),它实现由 3 块正方形的方块组成的一条蛇和正方形小

2、块组成的食物,然后有小蛇按方向去吃食物;(3) ),运算机使食物随机显现,依据运算机把握它在确定的时间不停的显现,玩家可以让小蛇上、下、左、右的进行吃食物;3) 本文组织第一章: 第一,主要有主程序 GameManager 来连接实现全界面功能其次章: Navigator.java : 该文件是开头界面; MainScreen.java :该文件 负责创建主界面;MessageScreen.java:该文件是胜利后和最高分文件;第三章: NewGame.java : 该文件是整个玩耍的核心文件;目录 空两行 1. 前言 52. 需求分析 53. 概要设计(特殊功能)5欢迎下载精品学习资源4.

3、详细设计 65. 源代码及可执行程序66. 特殊问题解决方法276.1.问题 1276.2.问题 2277. 使用说明及测试结果278. 结论 28参考书目 29欢迎下载精品学习资源1. 前言J2ME 语言继承了 JAVA 语言易学易用的特点,特殊适合于初学者学系统编程;随着 21 世纪信息社会的到来 ,运算机在人们的工作和生活中的深化,要求我们越来越多地与运算机打交道 ,为了使用户在繁忙的日程工作中得到放松,于是显现了各种各样的休闲软件 ,如谈天工具 ,玩耍等等;通过这学期来 J2ME 课程的学习,我初步把握了 J2ME 语言的最基本的学问,于是老师的指导下动手用J2ME 编写俄贪吃蛇玩耍;

4、玩耍是用来给大家消遣的,所以要能在使用的过程中给大家带来欢快,消 除大家的疲乏,激发大家的消遣激情;从本玩耍的基本玩法动身,主要就是贪 吃蛇是个老幼皆宜的小玩耍;它实现由3 块正方形的方块组成的一条蛇和正方形小块组成的食物,然后有小蛇按方向去吃食物;运算机使食物随机显现,根 据运算机把握它在确定的时间不停的显现,玩家可以让小蛇上、下、左、右的 进行吃食物;2. 需求分析1、开头:开头玩耍2、连续:对玩耍暂停之后可以连续玩耍3、帮忙:能帮忙你更好的过关4、关于:关于软件的制作人员5、退出:关闭玩耍3. 概要设计(特殊功能)对你要实现的系统的总体设计,包括:你系统的系统结构和体系框架;工程框图及本

5、工作在工程中的位置;系统中自己完成模块部分的全部对象的概要设计(如对象的主要职责和对象之间的相互关系);主要的把握流程;重要的功能流程设计及方案选择等内容;第一玩耍的功能最主要就是能够实现贪吃蛇的玩耍功能;在玩耍的过程中可以暂停返回到主菜单界面,可以返回连续原先的玩耍或者开头新玩耍;原先计 划使用记录治理系统( RMS)将玩耍状态储存下来,这样退出程序后也可以继续原先的玩耍,但是实际中发觉需要储存的数据量太大,储存时间过长(大约4 5 秒),最终仍是准备用 Boolean 变量把握玩耍状态;本玩耍的操作流程特殊简洁,用户启动MIDlet 启动后,即进入玩耍主画面,屏幕开头显示为欢迎画面;用户按

6、下 开头 按钮后,就可以开头玩玩耍了,当用户想暂停时,再次按一下 开头 按钮,玩耍就暂停了,在暂停的情形欢迎下载精品学习资源下再按 开头 按钮,玩耍连续运行;任何时候按 退出 按钮,玩耍 MIDlet 都会终止;本程序共有 5 个 java 源文件:GameManager.java: 该文件是玩耍画布;Navigator.java : 该文件是开头界面;MainScreen.java :该文件 负责创建主界面;MessageScreen.java:该文件是胜利后和最高分文件;NewGame.java : 该文件是整个玩耍的核心文件;4. 详细设计玩耍包括几个部分,由于数码相机近距离照不清手机上

7、的字,这里只有用模拟器的截图了:玩耍的起点是 GameManage类,继承自 MIDlet 类,实现玩耍的开头和退出;主菜单界面供应进入其他功能的选项,代码在MainScreen.java文件中,继承自 List 类;选择“帮忙”和“关于”菜单显示文字信息,由MessageScreen.java实现,继承自Form 类;在 Navigator.java 中实现对玩耍流程的把握,处理玩耍界面的切换和显示;玩耍界面屏幕大小设置的特殊好,所以成效在模拟器上看起来右边已经出了屏幕:玩耍界面就在 NewGame.java中实现;由于偷懒,这里把算法的处理和玩耍的动画显示都放在这个文件里面,太不了;玩耍界

8、面切换如以下图,玩耍从 GameManage开头启动,进入 Navigator 把握显示主菜单界面,其他界面都由从菜单界面进入,除了当玩耍胜利后可以从玩耍界面跳至终止信息界面;5. 源代码及可执行程序要求提交主要模块的全部源代码(以小组方式统一提交);源代码应当中意小组规定的源代码规范,包括命名规范,缩进对齐规范,注释规范等等;源代码的注释应丰富并且有有用;同时要求编译生成.class文件,以 package 的方法发布;使得在检查程序时可以便利的运行;报告中只对需要说明的极少部欢迎下载精品学习资源分关键代码进行阐述;1、 GameManager玩耍启动后,直接进入主菜单界面,原先设计了一个b

9、oolean 变量isInitialization用来在外界缘由中断玩耍(如来电话)后返回时使用,不过现在没有考虑这种情形,等以后有时间再增加;public void startApp ifisInitializationNavigator.current=Navigator.MAIN_SCREEN ;Navigator.showScreennull;isInitialization=false ;2、 MainScreen显示主菜单,通过选择菜单转入其他页面;这里使用 Navigator 类的静态 boolean 型变量 isNewGame 判定是否产生连续菜单:private void g

10、etGameMenu append开头,null ;if.Navigator.isNewGame append连续,null ;append帮忙,null ;append关于,null ;append离开,null ;在命令动作方法中通过判定选择菜单的名称,使用Navigator 类的changeScreen 方 法转换页面;String cmd=getStringgetSelectedIndex; Navigator.changeScreencmd;3、 MessageScreen由于要依据不同情形显示不同信息,需要传入一个参数构造MessageScreen类的实例,所以构造方法如下:pub

11、lic MessageScreenString messageName superNavigator.softTitle;back=new Command返回, Command.BACK,1 ;message=initStringItemmessageName; this.appendmessage; this.addCommandback; this.setCommandListenerthis;欢迎下载精品学习资源在initStringItem 产生不同页面,假如是完成玩耍后显示的信息,就将Navigator 类的变量 isNewGame 置为true:private StringItem

12、 initStringItemString s ifs.equals胜利Navigator.isNewGame=true;return new StringItem- 胜利宣言 -, ; else ifs.equals帮忙String temp= ;return new StringItem- 帮忙-, temp; else ifs.equals关于String temp= ;return new StringItem- 关于玩耍 -, temp; elsereturn new StringItemerror,nno information. ; 4 、Navigator这个类是整个玩耍把握的

13、核心,保证了玩耍流程进行的正确;编写完成显示界面和转变界面功能的两个方法 showScreen 和changeScreen ;changeScreen 根 据当前页面变量 current 做出相应的操作;即在手机上,即使不同页面触发相同大事,也会引起不同的操作;这里一般是依据按下命令键的字符串区分不同操作;public static void changeScreenString cmd switch current case MAIN_SCREEN: ifcmd.equals开头 Navigator.isNewGame=true;current=GAME_SCREEN;showScreenn

14、ull;else ifcmd.equals连续 Navigator.isNewGame=false;current=GAME_SCREEN;showScreennull;else ifcmd.equals帮忙 current=MESSAGE_SCREEN;showScreen帮忙 ;else ifcmd.equals关于 current=MESSAGE_SCREEN;showScreen关于 ;欢迎下载精品学习资源else ifcmd.equals离开 showScreen离开 ;break;case GAME_SCREEN:ifcmd.equals返回 current=MAIN_SCREEN

15、 ;showScreennull;else ifcmd.equals胜利 current=MESSAGE_SCREEN;showScreen胜利 ;break;case MESSAGE_SCREEN:ifcmd.equals返回 current=MAIN_SCREEN ;showScreennull;break;showScreen 依据当前页面变量 current 的不同值显示相应页面;与欢迎下载精品学习资源changeScreen 相不同处理;同的处理方法,在不同 current 时,依据传入的字符串参数做出欢迎下载精品学习资源public static void showScreenOb

16、ject obj switchcurrentcase MAIN_SCREEN:ifobj=null display.setCurrentMainScreen.getInstance;else ifStringobj.equals离开 GameManager.instance.isSafeQuit=tru;e GameManager.quitApp;break;case GAME_SCREEN: display.setCurrentNewGame.getInstance; break;case MESSAGE_SCREEN:display.setCurrentnew MessageScreenS

17、tringobj; break;欢迎下载精品学习资源5 、Coordinates这个类用来产生随机的 x、y 坐标数,产生的是在一个固定范畴内的非零值;如产生 0 和行数之间的随机非零整数:temp= random.nextInt ;x = java.lang.Math.abs temp % row;6 、Block玩耍界面由多个小方格组成,单独编了一个Block 类,每一个小方格都是这个类的一个实例;direction 储存当前方格的前进方向, isRandom 区分当前方块是蛇身的一部分仍是随机产生的方块, status区分当前方块是背景仍是蛇身;7 、NewGame这里实现玩耍功能,包括

18、产生新玩耍页面、返回旧玩耍页面、玩耍算法的实现、屏幕的显示刷新等;假如更面对对象化一些,应当把算法的部分另外编写一个类来实现,但是事先没有规划,想一些写一些,等写好后也懒得改了;正所谓: 偷懒我所欲也, OO 亦我所欲也,两者不行得兼,舍 OO 而取偷懒者也;舍弃面对对象的结果就是一个字繁!从图上就可以看出明显这个类要复杂的多;为了防止程序正在处理绘图的时候无法相应其他大事(如按键盘),这个类使用线程来解决这个问题; getInstance 处理显示新玩耍仍是原先的玩耍: synchronized public static Displayable getInstance if instanc

19、e = null Navigator.isNewGame = false;instance = new NewGame;else if Navigator.isNewGame Navigator.isNewGame = false;instance = new NewGame;return instance;对键盘大事的处理:protected void keyPressedint keycode if isRunning switch keycode case KEY_NUM2: / 数字键 2case -1: /导/航键ifheadX-1= BLOCK_ROW_NUM * BLOCK_CO

20、L_NUM isRunning = false;欢迎下载精品学习资源Navigator.changeScreen胜break;/出界或蛇头与蛇身交叉else if isOut | isCross isRunning = false;利;欢迎下载精品学习资源Navigator.isNewGame = true;initialization ;欢迎下载精品学习资源Navigator.changeScreen返回;欢迎下载精品学习资源else moveSnakeTail;if .isHaveBlock / 产生一个新的随机方格showRandomBlock;isHaveBlock = true;re

21、paint ; /刷新屏幕try Thread.sleepsleepTime;catch Exception ex showRandomBlock 产生随机方格,方格的位置应当躲开蛇身的坐标: while flag Coordinates cod = new CoordinatesBLOCK_ROW_NUM,BLOCK_COL_NUM ;x = cod.x;y = cod.y;if .blockStatusxy.status blockStatusxy.status = true;blockStatusxy.isRandom = true;flag = false;else blockStat

22、ustailX+1tailY.direction=DIRECTION_NONE;moveSnakeHead 和moveSnakeTail 比较复杂,简洁说就是 moveSnakeTail 依据按键的值将相应方向的方格蛇值为蛇头;moveSnakeHead 将 前一个蛇身方格设置为蛇尾,同时清除当前蛇尾方格的状态;这样,动态的现实就好像整个的蛇向前移动了一格; 这里需要留意的是:1) 依据蛇头坐标运算是否出界;2) 蛇头遇到非背景的方格,需要判定是随机方格仍是遇到了蛇身;假如是随机方格,就将这个方格设置为蛇头;假如是蛇身就玩耍终止; 3)蛇头中储存的始终是上一次按键按下的方向值,新按键按下,设置

23、新的蛇头,这样,蛇身的每一个方格中的方向都是它前一个蛇身方格的方向,即 移动的前进方向; 4)移动蛇尾时,假如这一次的移动中蛇头遇到随机方格,就蛇尾不移动;移动蛇尾后将原蛇尾的方块的方向属性设置为无方向;源代码:欢迎下载精品学习资源1、package greedsanke;import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class GameManager extends MIDlet public static GameManager instance;private boolean isI

24、nitialization;public static boolean isSafeQuit;/* Constructor */public GameManager instance = this;isInitialization=true;isSafeQuit=true;Navigator.display=Display.getDisplaythis;/Navigator.midlet=instance;/* Main method */ public void startApp ifisInitializationNavigator.current=Navigator.MAIN_SCREE

25、N;Navigator.showScreennull;isInitialization=false;/* Handle pausing the MIDlet */ public void pauseApp /* Handle destroying the MIDlet */public void destroyAppboolean unconditional throws MIDletStateChangeException ifunconditional=falsethrow new MIDletStateChangeException;/* Quit the MIDlet */public

26、 static void quitApp /J2ME编写贪吃蛇玩耍/17 try instance.destroyAppisSafeQuit;instance.notifyDestroyed;instance = null;欢迎下载精品学习资源catch MIDletStateChangeException ex /do work of end midlet/-/-isSafeQuit=true;2、package greedsanke;import javax.microedition.lcdui.*;import javax.microedition.rms.*;public class

27、MainScreen extends List implements CommandListener private static Displayable instance;private MainScreen superNavigator.softTitle,IMPLICIT;getGameMenu;setCommandListenerthis;private void getGameMenu append 开头,null;if.Navigator.isNewGame append 连续,null;append 最高分 ,null;append 帮忙,null;append 关于,null;

28、append 离开,null;synchronized public static Displayable getInstance instance=new MainScreen;return instance;public void commandActionCommand command,Displayable s String cmd=getStringgetSelectedIndex;Navigator.changeScreencmd;3、package greedsanke;import javax.microedition.lcdui.*;public class MessageS

29、creen extends Form implements CommandListener欢迎下载精品学习资源private StringItem message;public Command back;public MessageScreenString messageName superNavigator.softTitle;back=new Command返回 , Command.BACK,1 ;message=initStringItemmessageName;this.appendmessage;this.addCommandback;this.setCommandListenert

30、his;private StringItem initStringItemString s ifs.equals胜利 Navigator.isNewGame=truereturn new StringItem-;胜利宣言 -, n文字 ;else ifs.equals最高分String temp=n文字 ;return new StringItem-帮忙 -, temp;else ifs.equals帮忙 String temp=n文字 ;return new StringItem-帮忙 -, temp;else ifs.equals关于 String temp=n文字 ;return new

31、 StringItem-关于玩耍 -, temp;elsereturn new StringItemerror,nno information.;public void commandActionCommand command, Displayable displayable ifcommand.getCommandType=Command.BACK Navigator.changeScreencommand.getLabel;4、package greedsanke;import javax.microedition.midlet.*;import javax.microedition.lc

32、dui.*;public class Navigator final public static String softTitle=家园制造 ;欢迎下载精品学习资源final public static int MAIN_SCREEN=0;final public static int GAME_SCREEN=1;final public static int MESSAGE_SCREEN=2;public static boolean isNewGame=true;public static Display display;public static int current;public N

33、avigator public static void showScreenObject obj switchcurrentcase MAIN_SCREEN:ifobj=null display.setCurrentMainScreen.getInstance;else ifStringobj.equals离开 GameManager.instance.isSafeQuit=true;GameManager.quitApp;break ;case GAME_SCREEN: display.setCurrentNewGame.getInstance;break ;case MESSAGE_SCR

34、EEN:display.setCurrentnew MessageScreenStringobj;break ;public static void changeScreenString cmd switch current case MAIN_SCREEN: ifcmd.equals开头 Navigator.isNewGame=true;current=GAME_SCREEN; showScreennull;else ifcmd.equals连续 Navigator.isNewGame=false;current=GAME_SCREEN; showScreennull;else ifcmd.

35、equals最高分 Navigator.isNewGame=false;current=GAME_SCREEN; showScreennull;欢迎下载精品学习资源else ifcmd.equals帮忙 current=MESSAGE_SCREE;N showScreen 帮忙 ;else ifcmd.equals关于 current=MESSAGE_SCREE;N showScreen 关于 ;else ifcmd.equals离开 showScreen 离开 ;break ;case GAME_SCREEN:ifcmd.equals返回 current=MAIN_SCREEN;showSc

36、reennull;else ifcmd.equals胜利 current=MESSAGE_SCREE;N showScreen 胜利 ;break ;case MESSAGE_SCREEN:ifcmd.equals返回 current=MAIN_SCREEN;showScreennull;break ;5、package greedsanke;import javax.microedition.lcdui.*;public class NewGame extends Canvasimplements Runnable, CommandListener private static Displa

37、yable instance;public Command back, start, pause;private java.util.Random random;private int COLOR_PANEL = 255 255 | 255 255 | 255;private int COLOR_BACKGROUND = 200 200 | 200 200 | 200;欢迎下载精品学习资源private int COLOR_SNAKE = 100 0 | 100 0 | 100;private static int BLOCK_ROW_NUM = 28 ;private static int

38、BLOCK_COL_NUM = 23 ;private int BLOCK_LENGTH = 9 ;private int MARGIN_LEFT = 5 ;private int MARGIN_TOP = 6 ;private static Block blockStatus;private boolean isOut, isCross; private boolean isRunning;private boolean isHaveBlock;private boolean isTouchRandom;private static int oldDirection;private Thre

39、ad snakeThread;private int sleepTime;private int snakeLength;private int headDirection;final private static int DIRECTION_UP = 0;final private static int DIRECTION_DOWN = 1;final private static int DIRECTION_LEFT = 2;final private static int DIRECTION_RIGHT = 3;final public static int DIRECTION_NONE=4;private int headX, headY;private in

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁