软件技术毕业设计(论文)-J2ME贪吃蛇游戏制作(含源程序).doc_第1页
软件技术毕业设计(论文)-J2ME贪吃蛇游戏制作(含源程序).doc_第2页
软件技术毕业设计(论文)-J2ME贪吃蛇游戏制作(含源程序).doc_第3页
软件技术毕业设计(论文)-J2ME贪吃蛇游戏制作(含源程序).doc_第4页
软件技术毕业设计(论文)-J2ME贪吃蛇游戏制作(含源程序).doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

山东劳动职业技术学院信息工程与艺术设计系毕业设计总结需源程序联系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摘 要随着科技的发展,现在手机的功能已不仅仅是简单的打接电话、收发短信了。更多的手机用户希望在工作、学习之余通过方便灵巧可随身携带的仪器休闲娱乐。因此,为了迎合众多用户的需求并适应现在手机的规模,我们开发出一套适合各阶层人士的具有很强的娱乐性和交互性的贪吃蛇小游戏。 贪吃蛇,之所以取这样的名字,去用意还是很明显的.贪吃蛇其实并不贪,它是人不断向前追求的象征.就像现代的人只有不断努力向前才能得到自己想要的。而食物也是随机出现的,就像现在社会存在的机会,而我们只有找好自己的目标才能成功。 虽然现在市面上存在着各种各样的游戏版本,可是贪吃蛇其市场还是相当大的。因为它的特殊在于它能吸引人更深入,爱不释手.随着游戏速度不断加快,其刺激性也更强。可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺利的运行。对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合了他们的需求。 本设计所开发的是基于java的一个贪吃蛇游戏软件,主要实现游戏的开始、退出等功能,分为:游戏主界面模块、游戏控制模块两个模块。游戏主界面模块:主要包括游戏初始界面、游戏开始按钮、退出按钮。游戏控制模块:主要完成游戏的开始、退出等功能。关键词:贪吃蛇;小游戏;j2me;引 言随着科技的发展,现在手机的功能已不仅仅是简单的打接电话、收发短信了。更多的手机用户希望在工作、学习之余通过方便灵巧可随身携带的仪器休闲娱乐。因此,为了迎合众多用户的需求并适应现在手机的规模,我们开发出一套适合各阶层人士的具有很强的娱乐性和交互性的贪吃蛇小游戏。 贪吃蛇,之所以取这样的名字,去用意还是很明显的.贪吃蛇其实并不贪,它是人不断向前追求的象征.就像现代的人只有不断努力向前才能得到自己想要的。而食物也是随机出现的,就像现在社会存在的机会,而我们只有找好自己的目标才能成功。 虽然现在市面上存在着各种各样的游戏版本,可是贪吃蛇其市场还是相当大的。因为它的特殊在于它能吸引人更深入,爱不释手.随着游戏速度不断加快,其刺激性也更强。可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺利的运行。对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合了他们的需求。 第一章需求分析1.1游戏开发的可行性游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。游戏这个名称一直就存在于每个人的日常生活中,如猜拳游戏、猜谜游戏、大地游戏、球类游戏等,林林总总,不胜枚举,甚至于有些流行歌曲把人生也比喻为游戏,好比“一场游戏一场梦” 。因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色。1.2设计目的综合运用在校期间所学理论知识和技能,设计开发贪吃蛇游戏,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高工程实践能力。1.3游戏需求 给出1条小蛇和随机出1个食物当小蛇吃到食物时就加分。第二章j2me贪吃蛇项目说明与分析2.1游戏说明* 运行环境:手机移动平台,经过实验多种型号手机都可以运行。当然前提下是手机要支持java功能才行。* 本游戏支持rms持久化数据库存,可以保存游戏计分,关数,速度。* 用户可以自行设置游戏速度,游戏关数。* 想在手机上运行,可以通过多种方式,将文件传送到手机中,当然最普通的方式就是通过usb连接将数据传送到手机上。由于我把项目的所有源代码都发布了,传送时只需要将项目文件当中.jar和.jad传进去。有的手机,可能不需要那个.jad的文件,这两个文件在项目当中的dist目录下。不需要将其他的文件发送到手机上去。2.2游戏分析 首先分析此游戏,我们先来看一下贪吃蛇初始界面。图一初始界面图二 游戏运行过程中截图图三 本局积分游戏界面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;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) throws 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 = 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(splashscreen, 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;import 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.midletstatechangeexception;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;/ 游戏开始标志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, 10, 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 = width / 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(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, 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)gamectrl.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.snakeyi - 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;/ 蛇头处理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 - 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 gamectrl.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)(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 / 2;2.6测试结果游戏运行状况良好,未发现bug。第三章自我评价先是不太清楚图形化界面的设计,后来在同学的帮助和自己的查找下解决了这个问题。后来在蛇的移动的表示上也不太清楚,找了一些资料后发现蛇身由一串基本图形构成,每过一秒,检测前面是什么,如果是空的,那么把头画成普通身体的样子,再在前方(或侧面,如果转弯的话)再画一个头,并将其坐标记入数组,数组要足够大,再把尾巴画成背景色;如果前面是食物,尾巴就不删除,这里的难点是数组里的操作和坐标的表示:把头添在最后一个元素,把第一个元素提取(也就是尾巴)。最后在排行榜和存档的读取问题上遇到了困难,在同学的帮助下解决了这个难题。第四章总结这次java课程设计让我重新认识到了编程的艺术,在学习、使用java的过程中,通过与以前所学的c/c+内容的对比,让我进一步巩固了c/c+的知识,并更进一步在总体上让我对编程语言有了更新的认识。在不断的设计、调试、修改的过程当中,我对程序的设计与构架在整体上有了长足的进步。在做java课程设计以前,我对java游戏开发只是停留在理论知识的水平上,是“纸上谈兵”,缺乏实际的软件开发经验。这次通过做java课程设计,我完成了贪吃蛇游戏的软件开发任务。在整个开发过程中遇到了很多问题,如蛇的移动的表示、排行榜和存档的读取问题、屏幕太闪烁的问题、图形化界面的设计问题,但最终都被我一一解决,对其中比较主要的

温馨提示

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

评论

0/150

提交评论