软件技术毕业设计(论文)J2ME贪吃蛇游戏制作(含源程序).doc

上传人:仙人指路1688 文档编号:2386174 上传时间:2023-02-17 格式:DOC 页数:23 大小:593.50KB
返回 下载 相关 举报
软件技术毕业设计(论文)J2ME贪吃蛇游戏制作(含源程序).doc_第1页
第1页 / 共23页
软件技术毕业设计(论文)J2ME贪吃蛇游戏制作(含源程序).doc_第2页
第2页 / 共23页
软件技术毕业设计(论文)J2ME贪吃蛇游戏制作(含源程序).doc_第3页
第3页 / 共23页
软件技术毕业设计(论文)J2ME贪吃蛇游戏制作(含源程序).doc_第4页
第4页 / 共23页
软件技术毕业设计(论文)J2ME贪吃蛇游戏制作(含源程序).doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《软件技术毕业设计(论文)J2ME贪吃蛇游戏制作(含源程序).doc》由会员分享,可在线阅读,更多相关《软件技术毕业设计(论文)J2ME贪吃蛇游戏制作(含源程序).doc(23页珍藏版)》请在三一办公上搜索。

1、需源程序联系QQ153893706毕业设计总结贪吃蛇游戏制作 院 (系) 信息工程与艺术设计系 专 业 软件技术 学生姓名 学生学号 指导教师 提交时间 2011年12月2日 目 录目 录2摘 要3引 言4第一章需求分析41.1游戏开发的可行性41.2设计目的41.3游戏需求4第二章J2ME贪吃蛇项目说明与分析52.1游戏说明52.2游戏分析52.3具体实现代码详细介绍:72.4游戏控制界面实现代码92.5下一关实现代码162.6测试结果21第三章自我评价21第四章总结22致谢22主要参考文献23摘 要随着科技的发展,现在手机的功能已不仅仅是简单的打接电话、收发短信了。更多的手机用户希望在工作

2、、学习之余通过方便灵巧可随身携带的仪器休闲娱乐。因此,为了迎合众多用户的需求并适应现在手机的规模,我们开发出一套适合各阶层人士的具有很强的娱乐性和交互性的贪吃蛇小游戏。 贪吃蛇,之所以取这样的名字,去用意还是很明显的.贪吃蛇其实并不贪,它是人不断向前追求的象征.就像现代的人只有不断努力向前才能得到自己想要的。而食物也是随机出现的,就像现在社会存在的机会,而我们只有找好自己的目标才能成功。 虽然现在市面上存在着各种各样的游戏版本,可是贪吃蛇其市场还是相当大的。因为它的特殊在于它能吸引人更深入,爱不释手.随着游戏速度不断加快,其刺激性也更强。可以说该游戏的优势在于它的简单易行,不论是手机,还是小游

3、戏机,都能很快顺利的运行。对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合了他们的需求。 本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的开始、退出等功能,分为:游戏主界面模块、游戏控制模块两个模块。游戏主界面模块:主要包括游戏初始界面、游戏开始按钮、退出按钮。游戏控制模块:主要完成游戏的开始、退出等功能。关键词:贪吃蛇;小游戏;J2ME;引 言随着科技的发展,现在手机的功能已不仅仅是简单的打接电话、收发短信了。更多的手机用户希望在工作、学习之余通过方便灵巧可随身携带的仪器休闲娱乐。因此,为了迎合众多用户的需求并适应现在手机的规模,我们开发

4、出一套适合各阶层人士的具有很强的娱乐性和交互性的贪吃蛇小游戏。 贪吃蛇,之所以取这样的名字,去用意还是很明显的.贪吃蛇其实并不贪,它是人不断向前追求的象征.就像现代的人只有不断努力向前才能得到自己想要的。而食物也是随机出现的,就像现在社会存在的机会,而我们只有找好自己的目标才能成功。 虽然现在市面上存在着各种各样的游戏版本,可是贪吃蛇其市场还是相当大的。因为它的特殊在于它能吸引人更深入,爱不释手.随着游戏速度不断加快,其刺激性也更强。可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺利的运行。对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚

5、好迎合了他们的需求。 第一章需求分析1.1游戏开发的可行性游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。游戏这个名称一直就存在于每个人的日常生活中,如猜拳游戏、猜谜游戏、大地游戏、球类游戏等,林林总总,不胜枚举,甚至于有些流行歌曲把人生也比喻为游戏,好比“一场游戏一场梦” 。因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色。1.2设计目的综合运用在校期间所学理论知识和技能,设计开发贪吃蛇游戏,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高工程实践能力。1.3游戏需求 给出1条小蛇和随机出1

6、个食物当小蛇吃到食物时就加分。第二章J2ME贪吃蛇项目说明与分析2.1游戏说明* 运行环境:手机移动平台,经过实验多种型号手机都可以运行。当然前提下是手机要支持JAVA功能才行。* 本游戏支持RMS持久化数据库存,可以保存游戏计分,关数,速度。* 用户可以自行设置游戏速度,游戏关数。* 想在手机上运行,可以通过多种方式,将文件传送到手机中,当然最普通的方式就是通过USB连接将数据传送到手机上。由于我把项目的所有源代码都发布了,传送时只需要将项目文件当中.jar和.jad传进去。有的手机,可能不需要那个.jad的文件,这两个文件在项目当中的dist目录下。不需要将其他的文件发送到手机上去。2.2

7、游戏分析 首先分析此游戏,我们先来看一下贪吃蛇初始界面。图一初始界面图二 游戏运行过程中截图图三 本局积分游戏界面2.3具体实现代码详细介绍:import java.io.IOException;import javax.microedition.lcdui.Alert;import javax.microedition.lcdui.AlertType;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Image;

8、import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class SnakeMIDlet extends MIDlet public Display display;/显示的对象public GameCtrl game; public SnakeMIDlet() super();/ TODO Auto-generated constructor stubprotected void destroyApp(boolean arg0) th

9、rows MIDletStateChangeException / TODO Auto-generated method stubprotected void pauseApp() / TODO Auto-generated method stubprotected void startApp() throws MIDletStateChangeException / 获得Displaydisplay = Display.getDisplay(this);/ 获得DisplayableDisplayable current = display.getCurrent();if (current

10、= null) / 装载logo图象Image logo = null;trylogo = Image.createImage(/logo.png);catch (IOException e) / 显示logoAlert splashScreen = new Alert(null, 山东劳动职业技术学院软件技术班郑珍珍, logo, AlertType.INFO);/ 延迟4秒 splashScreen.setTimeout(2000);/新建ChooseDemo对象game = new GameCtrl(this);/ 显示闪屏界面display.setCurrent(splashScree

11、n, game);else / 显示当前界面display.setCurrent(current); / TODO Auto-generated method stubpublic void quit() throws MIDletStateChangeException / 退出程序destroyApp(false);notifyDestroyed();2.4游戏控制界面实现代码import java.util.Timer;import javax.microedition.lcdui.Alert;import javax.microedition.lcdui.AlertType;impor

12、t javax.microedition.lcdui.Canvas;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Image;import javax.microedition.midlet.MIDletStateChangeExcep

13、tion;public class GameCtrl extends Canvas implements CommandListenerprivate final Command startCommand;private final Command quitCommand;private final SnakeMIDlet midlet;private Graphics graph;private Timer timer = new Timer();private NextFrame nextFrame;/ 游戏结束标志public boolean isGameOver = false;/ 游

14、戏开始标志public boolean isGameRun = false;/ 游戏积分public int score = 0;/ 屏幕尺寸public int width = 0;public int height = 0;/ 食物位置public int foodX = 0;public int foodY = 0;/ 蛇身位置public int snakeX = 10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50 ,54, 58, 62, 66, 70, 74, 78, 82, 86;public int snakeY = 10, 10, 10, 1

15、0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10;/ 运动方向 0,1,2,3上,下,左,右public int direction = 0; / 食物图象public Image foodImage = null;/* * */public GameCtrl(SnakeMIDlet midlet) super();/ 保存MIDlet类对象this.midlet = midlet;/ 得到屏幕尺寸width = getWidth();height = getHeight();/ 设置食物位置foodX = wi

16、dth / 2;foodY = height / 2;try/ 装载食物图象foodImage = Image.createImage(/food.png);catch(Exception e)/ 添加命令按键quitCommand = new Command(退出, Command.EXIT, 2);addCommand(quitCommand);startCommand = new Command(开始, Command.OK, 1);addCommand(startCommand);/ 侦听按键响应setCommandListener(this);protected void paint

17、(Graphics g) graph = g;if (isGameOver = true & isGameRun = true)isGameRun = false;/ 显示logoAlert result = new Alert(本局积分, String.valueOf(score), null, AlertType.INFO);/ 延迟4秒 result.setTimeout(2000);/ 显示闪屏界面midlet.display.setCurrent(result, this);return;if (isGameRun = true)/ 白色清空画布 graph.setColor(255

18、, 255, 255);graph.fillRect(0, 0, width, height);/ 绘制食物g.drawImage(foodImage, foodX, foodY, Graphics.HCENTER | Graphics.VCENTER);/ 绘制蛇身graph.setColor(0, 0, 255);for (int i = 0; i 0 ; i-)gameCtrl.snakeXi = gameCtrl.snakeXi - 1;gameCtrl.snakeYi = gameCtrl.snakeYi - 1;/ 蛇头处理if (gameCtrl.snakeY0 3)gameCt

19、rl.snakeY0 -= 4;elseif (gameCtrl.snakeX0 gameCtrl.width / 2)/ 如果已到屏幕上界则左移gameCtrl.direction = 2;gameCtrl.snakeX0 -= 4; else/ 如果已到屏幕上界则右移gameCtrl.direction = 3;gameCtrl.snakeX0 += 4; break;case 1:/ 蛇身处理for (int i = 19; i 0 ; i-)gameCtrl.snakeXi = gameCtrl.snakeXi - 1;gameCtrl.snakeYi = gameCtrl.snake

20、Yi - 1;/ 蛇头处理if (gameCtrl.snakeY0 gameCtrl.width / 2)/ 如果已到屏幕上界则左移gameCtrl.direction = 2;gameCtrl.snakeX0 -= 4; else/ 如果已到屏幕上界则右移gameCtrl.direction = 3;gameCtrl.snakeX0 += 4; break;case 2:/ 蛇身处理for (int i = 19; i 0 ; i-)gameCtrl.snakeXi = gameCtrl.snakeXi - 1;gameCtrl.snakeYi = gameCtrl.snakeYi - 1;

21、/ 蛇头处理if (gameCtrl.snakeX0 3)gameCtrl.snakeX0 -= 4;elseif (gameCtrl.snakeY0 gameCtrl.height / 2)/ 如果已到屏幕上界则左移gameCtrl.direction = 0;gameCtrl.snakeY0 -= 4; else/ 如果已到屏幕上界则右移gameCtrl.direction = 1;gameCtrl.snakeY0 += 4; break;case 3:/ 蛇身处理for (int i = 19; i 0 ; i-)gameCtrl.snakeXi = gameCtrl.snakeXi -

22、 1;gameCtrl.snakeYi = gameCtrl.snakeYi - 1;/ 蛇头处理if (gameCtrl.snakeX0 gameCtrl.height / 2)/ 如果已到屏幕上界则左移gameCtrl.direction = 0;gameCtrl.snakeY0 -= 4; else/ 如果已到屏幕上界则右移gameCtrl.direction = 1;gameCtrl.snakeY0 += 4; break;/ 碰撞检测if (gameCtrl.snakeX0 gameCtrl.foodX - foodwidth / 2 &gameCtrl.snakeX0 gameCt

23、rl.foodY - foodheight / 2 &gameCtrl.snakeY0 gameCtrl.foodY + foodheight / 2)/ 计分gameCtrl.score += 10;/ 生成新的食物位置getNextPos();/ 计时tickcount+;if (tickcount = 300)gameCtrl.isGameOver = true;/ 重绘画面gameCtrl.repaint();public void getNextPos()/ 在屏幕内随机设置位置int x = (int)(rand.nextLong();gameCtrl.foodX = (int)(

24、x % gameCtrl.width);int y = (int)(rand.nextLong();gameCtrl.foodY = (int)(y % gameCtrl.height);/ 使图像限定在屏幕内if (gameCtrl.foodX gameCtrl.width - foodwidth / 2)gameCtrl.foodX = gameCtrl.width - foodwidth / 2;if (gameCtrl.foodY gameCtrl.height - foodheight / 2)gameCtrl.foodY = gameCtrl.height - foodheight

25、 / 2;2.6测试结果游戏运行状况良好,未发现bug。第三章自我评价先是不太清楚图形化界面的设计,后来在同学的帮助和自己的查找下解决了这个问题。后来在蛇的移动的表示上也不太清楚,找了一些资料后发现蛇身由一串基本图形构成,每过一秒,检测前面是什么,如果是空的,那么把头画成普通身体的样子,再在前方(或侧面,如果转弯的话)再画一个头,并将其坐标记入数组,数组要足够大,再把尾巴画成背景色;如果前面是食物,尾巴就不删除,这里的难点是数组里的操作和坐标的表示:把头添在最后一个元素,把第一个元素提取(也就是尾巴)。最后在排行榜和存档的读取问题上遇到了困难,在同学的帮助下解决了这个难题。第四章总结这次Jav

26、a课程设计让我重新认识到了编程的艺术,在学习、使用Java的过程中,通过与以前所学的C/C+内容的对比,让我进一步巩固了C/C+的知识,并更进一步在总体上让我对编程语言有了更新的认识。在不断的设计、调试、修改的过程当中,我对程序的设计与构架在整体上有了长足的进步。在做Java课程设计以前,我对Java游戏开发只是停留在理论知识的水平上,是“纸上谈兵”,缺乏实际的软件开发经验。这次通过做Java课程设计,我完成了贪吃蛇游戏的软件开发任务。在整个开发过程中遇到了很多问题,如蛇的移动的表示、排行榜和存档的读取问题、屏幕太闪烁的问题、图形化界面的设计问题,但最终都被我一一解决,对其中比较主要的几点体会

27、总结如下。第一,完成了从局部到整体从细节到大局的转变。设计过程中,经常会遇到困难,我学会通过反复思考和测试,然后找出自己的错误并加以改正,再进行下一个步骤。这个程序就是在这样反复过程序中一点一点的完成的。完成之后再来优化整个程序。第二,做课设是一个不断学习新鲜事物的过程,从设计初的不懂到最后能够顺利完成,我体会到在实践中学习的重要性,这对于将来我走上工作岗位具有重要意义。第三,通过课设使我对Java这门课程有了一定的了解,也对我今后的就业之路打下了一定的基础。致谢经过一个月的不断努力,课设内容已经基本上完成了。回顾这个设计过程,我学到了许多书本上没有学到的知识。通过这次自己制作的软件,丰富了自

28、己的实践技能,扩展了本专业的知识面,使我受益非浅,同时也体验到了搞软件开发的困难度。在这次设计的同时,我又从中学到了许多东西。但由于我对这样的软件开发还只是一个开始,了解的不多,这其中或许还有很多的不足,有些模块做得不是很好,界面的设计及整体的布局还比较简单,没有突出特色出来,这也可能是我这个系统的不足之处,在这里也恳请各位老师能够对我的作品指明不足并加以改正。总之,在这一次的课设过程中,我查阅了大量的资料,对Java有了一点初步的认识,对于软件工程这些辅助性的教材也巩固了不少,为我这次的课设提供了很大的帮助,锻炼了我的能力让我掌握了一门新的程序设计语言:Java语言,系统地学习了数据库方面的知识,并更进一步提高了我在程序设计、调试方面的技巧。更重要的是,它还让我认识到了自己的不足,在编程方面,我仅仅是刚刚入门而已,以后的道路任重道远,需要我不断的丰富自己、充实自己,这样才能在程序设计方面有所收获。主要参考文献1孙淑敏.java2游戏开发北京M.北京:清华大学出版社.20052张小玮.J2ME无线应用开发 M. 北京:清华大学出版社.20053张白一.面向对象程序设计javaM.西安:西安电子科技大学出版社.2002.84史斌星.java基础编程贯通教材 M. 北京:清华大学出版社.2005

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号