毕业设计-基于java的贪吃蛇游戏开发_第1页
毕业设计-基于java的贪吃蛇游戏开发_第2页
毕业设计-基于java的贪吃蛇游戏开发_第3页
毕业设计-基于java的贪吃蛇游戏开发_第4页
毕业设计-基于java的贪吃蛇游戏开发_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、德州科技职业学院毕业论文题目姓 名:学 号:所在院系:所学专业:指导教师:完成时间:java贪吃蛇游戏设计目录java贪吃蛇游戏设计1目录1前言31 -java语言的概述及开发工具5l.ljava语言特点51.1.1平台无关性51.2安全性51.1.3面向对象51.1.4分布式51.1.5健壮性51.2 j2me 介绍61.3 关于 eclipse71.4 wtk 介绍82 需求分析82.1游戏的介绍82.2游戏开发的可行性92.3设计目的92.4游戏需求92.4.1游戏界面需求92.4.2游戏形状需求102.4.3键盘事件处理102.4.4显示需求102.4.5接口控制102.4.6环境介绍

2、103 功能设计113.1游戏的流程图113 详细设计123.1游戏主界面的开发123.2绘制蛇身123.3创建初始“蛇”及“蛇”的移动133.4吃掉食物,蛇身增长133.4随机产生食物143.5键盘事件处理153.6判断游戏结束164游戏测试与发布1841游戏运行的效果图184.2测试结果195 自我评价和总结195.1遇到的问题及解决办法195.2总结206.参考资料207 附加源代码20随着3g的到来,让人们的目光聚集到一个新兴的互联网终端 手机上。手机的随身性让玩家有了随时随地完游戏的可能。据 我调查行业分析师也对这一行业持普遍的乐观态度。ymmid researcher的最新报告显示

3、,手机游戏市场止在稳步发展。用户数 从2008年的1.83亿到现在将增长到3亿。据报告分析,2014年, 市场 规模有望达到180亿美元。手机游戏的发展有以下推动因素1. 更好更快的无限网络以及易于操作的手机终端改善了用户的体验;2. 触摸屏,3d动画处理能力以及在线互动能力让游戏开发商 把游戏做的更好;3苹果应用商店模式刺激作用。j2me是一种针对移动电话和pda这样的小型设备的java语言。 大部分的手机厂商都迫切希望java手机推广应用。上千万的手机已 经到了消费者手中。它已经极大的提高了移动电话支持游戏的能力。 它有着比sms或wap更好控制的界面。允许使用子图形动画。并 且可以通过无

4、限网络连接到远程服务器。支持java的手机的普及, 所以目前它成为最好的移动游戏开发环境。j2me不是手机上配置的 唯一解释语言,但是它是许多厂商支持的行业标准。一些专用的解释 语言也在某些区域有上着上佳的表现。如北美的qualcomm的brem 和一些韩国运营上支持的名为gvm的标准。基于以上分析,java手机游戏的开发具有重要的意义。1-java语言的概述及开发工具1.1 java语言特点1.1.1平台无关性java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的java 接no java的数据类型与机器无关。1.1.2安全性java的编程类似c+,但舍弃了 c+的指针对存储器地址的直接

5、操 作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指 针入侵系统。它提供了安全管理器,防止程序的非法访问。1.1.3面向对象java吸收了 c+面向对象的概念,将数据封装于类中,实现了程序 的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利 用。1.1.4分布式java建立在tcp/ip网络平台上,提供了用http和ftp协议传送和 接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用 系统。1.1.5健壮性java致力于检查程序在编译和运行时的错误,并自动回收内存, 减 少了内存出错的可能性。java取消了 c语言的结构、指针#define 语句、多重继承、goto

6、语句、操作符、重载等不易被掌握的特性,提 供垃圾收集器自动回收不用的内存空间。1.2 j2me 介绍虽然java已经被用到许多企业级软体上,可是其实骨子里面 还是非常适合用在嵌入式系统之中。java平台演进到java2后, java平台分别针对不同领域的需求被分成四个版本,亦即j2ee、 j2se、j2me以及javacard中j2me定位在消费性电子产品的应 用上。这个版本针对资源有限的电子消费产品的需求精简核心类库, 并提供了模块化的架构让不同类型产品能够随时增加支持的能力。 这个版本的应用层面相当广泛,会是未来java平台发展的重点项 目。j2me在1999年的javaone 发人员大会

7、上初次亮相,它的目标 是面向智能无线设备和小型计算机设备的开发人员。j2me的一个 关键优点是,j2me与所有支持java的设备都是兼容的。支持java 的设备就是任何运行java虚拟机器的计算机。motorola、nokia等 生产厂商都生产支持java的设备。javj2me平台是由配置(configuration)和简表(profile)构成的。 配置是提供给最大范围设备使用的最小类库集合,在配置中同时包 含java虚拟机。简表是针对一系列设备提供的开发包集合。在j2me 中还有一个重要的概念是可选包(optional package),它是针对 特定设备提供的类库,比如某些设备是支持蓝牙

8、的,针对此功能 j2me中制定t jsr82 (bluetooth api)提供了对蓝牙的支持。目前,j2me中有两个最主要的配置,分别是connected limited devices configuration (cldc) 和 connected devices configuration (cdc)。1.3 关于 eclipseeclipse是一个开放源代码的、基于java的可扩展开发平台。 就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建 开发环境。幸运的是,eclipse附带了一个标准的插件集,包括java 开发工具(java development tools, j

9、dt)。虽然大多数用户很乐于将eclipse当作java ide来使用,但eclipse 的目标不仅限于此。eclipse还包括插件开发环境(plug-in development environment, pde),这个组件主要针对希望扩展 eclipse的软件开发人员,因为它允许他们构建与eclipse环境无缝 集成的工具。rfl于eclipse中的每样东西都是插件,对于给eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工 具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于java开发工具。尽管eclipse是使用 java语言开发的,但它的用途并不限于j

10、ava语言;例如,支持诸如c/c+、cobol和eiffel等编程语言的插件已经可用,或预计会推 出。eclipse框架还可用来作为与软件开发无关的其他应用程序类型 的基础,比如内容管理系统o eclipse是一个开放源代码的、基于java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用 于通过插件组件构建开发环境。1.4 wtk介绍wtk的全称是sun j2me wireless toolkit sun的无线开发 工具包。这一工具包的设计目的是为了帮助开发人员简化j2me的开 发过程。使用其中的工具可以开发与java technology for the wireless in

11、dustry (jtwi, jsr 185)规范兼容的设备上运行的j2me应用程序。 wtk是用来开发midp的,为了让midlet可以顺利编译和执行, wtk必须具有cldc和midp的类库,wtk可以帮助我们省去 额外安装调试这些类库的时间2 需求分析2.1游戏的介绍游戏的名称叫“贪吃蛇”,节:一条蛇可以看成有许多正方 形的“小格子”拼凑成,我把它称作节。节是蛇身上最小的单位。段:当许多节连成一条直线,我称它为段。贪吃蛇只有一段, 如果它拐弯就变成两段。链表:用来保存每一段的状态,链表的元素单位是段。且链 表的最后一个元素表示蛇的头部段。坐标系:midp中的坐标以左上角那点为(0,0),向

12、右则x递 增,向下则y递增。2.2游戏开发的可行性游戏开发至今已经有30多年,在这个短暂的时期里,随着硬 件的水平的提高。游戏开发新技术层岀不穷,经典游戏比比皆是, 游戏这个名称一直存在于每个人的日常生活中。因此,游戏对于 现代人的成长历程,绝对是一个不可或缺的重要角色而从技术方 面来看,现在的java技术也融入了手机中。这些都为开发的这款 贪吃蛇游戏提供了条件。2.3设计目的综合运用在校所学的知识和技能,设计开发贪吃蛇游戏,使自 己熟悉应用系统的开发的过程,培养独立思考的能力,校验学习 效果和动手能力,提高工程实践能力。2.4游戏需求给出一条小蛇和随机出现一个食物,当小蛇吃到食物时就加 分。

13、2.4.1游戏界面需求良好的用户界面,有分数显示和暂停。2.4.2游戏形状需求良好的方块形状设计,绘制小蛇和食物,小蛇由几个方块组成, 食物由一个方块组成。2.4.3键盘事件处理小蛇可以通过键盘方向键(上,下,左,右)进行方向的移动。2.4.4显示需求当小蛇吃掉几个食物后会变长,平且吃完食物时食物会消失, 并立即产生一个1个新的事物c2.4.5接口控制本软件通过键盘进行操作,在windows操作系统下,利用键盘 的上下左右键进行操作,要使用键盘的接口事件。2.4.6环境介绍操作系统:microsoft windows xp程序语言:java 2开 发包:java(tm) 2 standard

14、edition (5.0)sun micro. j2me wireless tool kit 2.2ide:eclipse 3.013功能设计3.1游戏的流程图3 详细设计3.1游戏主界面的开发屏幕的背景用白色,由于屏幕高比宽长,所以取以宽为边长的信息区域。3.2绘制蛇身protected void paint(graphics g) 清屏g.setcolor(0, 255, 0);g.fillrect(0,0,width,height);g.setcolor(o);绘制蛇身for(int i = 0;i < snakenum;i+)g.fillrect(snakeio,snakeil,

15、snakewidth,snakewidth); 绘制食物if(b)g.fillrect(foodx,foody,snakewidth,snakewidth);3.3创建初始“蛇”及“蛇”的移动蛇的初始长度为5,边长为10个像素(背景为黄色),蛇头初 始位于屏幕(100, 30),方向向左,用向量表来记录每个蛇的位置 以及方向。部分参考代码如下:private void move(int direction)!蛇身移动for(int i = snakenum - l;i > 0;i)snakei0 = snakefi - l0;snakeil = snakei - 11;3.4吃掉食物,蛇

16、身增长当小蛇吃掉食物后,会增长,部分代码:/*吃掉食物,自身增长*/private void eatfood()判别蛇头是否和食物重叠if (snake00 = foodx && snake01 = foody)snakenum+;generatefoodo ;3.4随机产生食物部分代码:*产牛食物*说明:食物的坐标必须位于屏幕内,且不能和蛇身重合private void generatefoodo while(true)foodx 二 math.abs(random.nextlnt() % (width snakewidth + 1)/ snakewidth * snakew

17、idth;foody = math.abs(random.nextlnt() % (height - snakewidth + 1)/ snakewidth * snakewidth;boolean b = true;for(int i = 0;i < snakenum;i+)if(foodx = snakei|0| && snake|i 1 = foody)b = false;break;if(b)break;3.5键盘事件处理可以通过键盘控制蛇的移动方向public void keypressed(int keycode)int action = thisgetgam

18、eaction(keycode);/改变方向switch(action)case up:if (direction != directi0n_d0wn) direction 二 direction up;break;case down:if(direction != direction_up) direction 二 direction down;break;case left:if (direction !=direction_right)direction 二 direction left;break;case right:if (direction != direction left)

19、direction 二 direction_right;break;case fire:暂停和继续ispauscd = !ispauscd;break;3.6判断游戏结束只有一种游戏结束的方式,即蛇头碰到蛇身游戏结束。参考代码:private boolean isgameover()边界判别if(snake00 < 0 | snake0 > (width - snakewidth) |snake0l < 0 | snake0l > (height - snakewidth)return true;碰到自身for(int i = 4;i < snakenum;i+)

20、if(snakeoo = snakeilo&& snakeol = snakeil) return true;return false;4游戏测试与发布4.1游戏运行的效果图® ©sun ©rvknnyilbrn图一表示小蛇正在移动毬 sunr>latwpt*vn图二表示,随机产生一个食物 爆 sun ©图三表示小蛇吃掉食物增长后继续移动4.2测试结果程序运行良好,未出现bug.5自我评价和总结5.1遇到的问题及解决办法先是图形化界面的设计,一直想不出好的办法,最后翻看了教程 才解决了这个问题,后来在蛇的移动上也遇到了些问题。上网查

21、了一 下,才知道蛇身是市一连串的基本图形组成的,每过1秒检查前面是 什么,如果是空的,就把图画成普通身子的样子。再在前方在画一个 头,并将其左标记入数组,数组要足够人,在把尾巴画成背景色,如 果前面是食物,尾巴就不删除。这个里面的难点就是数组里面的操作 和坐标的表示。把头添在最后一个元素,把第一个元素提起。5.2总结这款游戏的优点,就是简单的画面和容易的操作很容易使玩家就 上手,适合不通年龄段的玩家娱乐。当然这款游戏也存在有不足的地 方,有些功能还是没有实现。通过这次设计过程中,我查阅了大量的 资料,对java有了更深刻的认识,通过这次的设计,更提高了我在 程序设计和调试方面的技巧,更重要的是

22、我认识了自己的不足,在编 程方面我还需要努力学习来充实自己,来获取更大的收获。6.参考资料1 java2实用教程(第三版)清华大学出版社。2 java编程思想(第四版)机械工业出版社。【3】j2me游戏开发实例大全 清华大学出版社出版。7附加源代码import java.util.*;import javax.microedition.lcdui. *;/*贪吃蛇游戏public class snakecanvas extends canvas implements runnable /*存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是 1的代表y坐标*/intflf snak

23、e = new int2002;/和已经使用的节点数量*/int snakenum;/*贪吃蛇运动方向,0代表向上,1代表向下,2代表向左,3代表向右*/ int direction;/*移动方向*/*向上*/private final int direction_up = 0;/*向下*/private final int direction_down = 1;/*向左*/private final int direction_left = 2;/*向右*/private final int direction_right 二 3;/*游戏区域宽度*/int width;/*游戏区域高度*/

24、int height;/*蛇身单元宽度*/private final byte snakewidth = 4;/*是否处于暂停状态,true代表暂停*/boolean ispaused = false;/*是否处于运行状态,tee代表运行*/boolean isrun = true;/*时间间隔*/private final int sleep.time = 300;/*食物的x坐标*/int foodx;/*食物的y坐标*/int foody;/*食物的闪烁控制*/boolean b = true;/*random 对象*/random random = new random();publi

25、c snakecanvas() 初始化init();width = this.getwidth();height = this.getheight();启动线程new thread(this).start();*初始化开始数据private void init()初始化节点数量snakenum = 7;初始化节点数据for(int i = 0;i < snakenum;i+)snakei0 = 100- snakewidth * i;snakeijl = 40;初始化移动方向direction = direction_right;初始化食物坐标foodx = 100;foody = 10

26、0;protected void paint(graphics g) 清屏g.setcolor(0, 255, 0);g.fillrect(0,0,width,height);g.setcolor(o);绘制蛇身for(int i = 0;i < snakenum;i+)g.fillrect(snakeio,snakeil,snakewidth,snakewidth);绘制食物if(b)g.fillrect(foodx,foody,snakewidth,snakewidth);private void move(int direction) 蛇身移动for(int i = snakenu

27、m - l;i > 0;i) snakeifo = snakefi - l0; snakeil = snakei - 11;第一个单元格移动switch(direction) case direction_up:snake0l = snake0l - snakewidth;break;case direction_down:snake0l = snake0l + snakewidth; break;case direction_left:snake00 = snake00 snakewidth;break;case direction_right:snake00 = snake00 +

28、snakewidth; break;*吃掉食物,自身增长*/private void eatfood() 判别蛇头是否和食物重叠if(snake00 = foodx && snake0l = foody) snakenum+;generatefood();*产生食物*说明:食物的坐标必须位于屏幕内,且不能和蛇身重合private void generatefood()while(true)foodx = math.abs(random.nextlnt() % (width snakewidth + 1) / snakewidth * snakewidth;foody 二 math.abs(random.nextlnt() % (height snakewidth + 1) / snakewidth * snakewidth;boolean b = true;for(int i = 0;i < snakenum;i+)if(foodx = snakei0 && snakeil = foody)b = false;break; if(b) break;*判断游戏是否结束*结束条件:* 1、蛇头超出边界* 2、蛇头碰到自身*/private boolean isgameover()边界判别if(sna

温馨提示

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

评论

0/150

提交评论