大家好,今天给大家介绍基于java+J2ME的贪吃蛇游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦
文章目录:
1.随着通信技术的发展和手机的普及,手机游戏的开发技术越来越为人们所关注。以J2ME为开发平台,利用Java提供强大工具,不但可以在手机上实现静态HTML技术所无法实现的计算处理、数据存储、与服务器的通信等功能,而且能够开发各种手机游戏。本文在介绍J2ME及其体系结构的基础上,以贪吃蛇游戏为实例,描述了借助J2ME的MIDlet类库开发手机游戏的过程。
项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:8863个字27页
包含内容:整套源码+完整毕业论文+答辩PPT
提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。
第一章 绪论
1.1 研究背景
JAVA自从20世纪90年代早期诞生以来,以其强大的功能迅速为广大程序员们所接受。从2001年开始,日本的国内的移动电话开始搭载Java。使用本来就是一种程序语言的Java之后,就可以在移动电话上完成以往静态的HTML内容所无法达成的计算处理、数据存储、与服务器的通信等等。如果能利用Java上其他丰富功能,那么就可以实现更多的功能。随着手机游戏的发展,国内外各大开发商纷纷运用Java进行手机游戏开发。J2ME作为一种基于Java的便携设备开发平台,在各大手机开发公司得到了广泛应用。
1.2 研究内容
本课题拟研究基于J2ME的手机游戏开发技术以及其特点,具体研究内容如下:
1、手机游戏开发以及J2ME的基本理论和J2ME类库的使用;
2、J2ME体系结构的研究;
3、MIDP移动信息设备简表的研究;
(1)、MIDP的目标硬件环境;
(2)、MIDP应用程序;
(3)、CLDC和MIDP库中的类。
4、J2ME API的研究;
(1)MIDlet应用程序的研究;
(2)MIDlet的类库研究;
(3)各事件发生器的应用。
5、开发工具的应用和开发环境的设置。
其中MIDP移动信息设备简表的研究和J2ME API的研究为重点,本课题将通过一个具体的手机游戏的开发来研究以上内容。
第二章 J2ME及其体系结构概述
2.1 J2ME简介
现在JAVA-JAVA2 Platform大致可分为J2SE、J2EE、J2ME三类。J2SE为JAVA-JAVA2 Platform 的标准版,通常在PC上使用的JAVA。J2EE是在J2SE的API上,扩展了给企业使用EJB与Servlet等主要使用在服务器上的功能。而J2ME则是面向家电和通信工具等微小设备。
J2ME的目标是微小设备,这类设备有许多种类,在这些设备的J2ME当中,定义了CDC(Connected Device Configuration),CLDC(Connected Limited Device Configuration)这两个Configuration。
CDC是以能用在个人网关、下一代移动电话、PDA(个人数字助理)、家电设备、POS终端、车辆导航系统等上运行为前提设计出来的。CLDC,是以能使用在移动电话、PDA(个人数字助理)、家电设备、POS终端等上面为前提设计出来的。
2.2 J2ME 体系结构
配置和简表:配置定义了一个设计在一系列类似硬件上运行的Java平台的能力。J2me的目标是家电与嵌入式设备,这类设备有很多种类,对应这些设备的J2me当中,定义了CDC(连接设备配置)和CLDC(受限接设备配置)两个配置,配置所提供的类函数只有Java.lang, Java.io,Java…util包等J2SE等核心类的子集。CLDC是与手机相关的,它实际是定义一个设备制造商用来实现Java运行环境的标准,第三方开发者只需要遵循这个标准。CLDC主要影响Java开发和软件发布的以下方面:
1)目标设备的特性;
2)安全模型:安全模型有两个部分,虚拟机和应用程序安全。虚拟机安全层的目的是保护下面的设备不受任何执行代码可能引起的损害。
2.3 移动信息设备简表概述
2.3.1 MIDP的目标硬件环境
省略
2.3.2 MIDP应用程序
在MIDP上运行的Java程序被称为MIDlet。MIDlet是服从一些关于它运行环境和程序打包的一些规则。其运行环境是启动MIDlet,这是设备内置应用管理器的任务。应用程序能访问到下面的一些资源:(1)震动文件中的所有文件。(2)MIDlet描叙文件的内容(JAD)。
2.3.3 CLDC和MIDP库中的类
打包:MIDlet应用一般采用震动文件的形式。这个文件应该包含运行应用程序需要的类和所有的资源文件,它也应该包含一个叫manifest.mf的清单文件。保存在震动文件中的清单文件是一个简单的文本文件,包含属性值。
应用程序描叙(JADs)在移动电话网络上传送大量的数据,需要有一个描叙文件让用户在没有下载整个包之前来查看一下MIDlet震动的细节。
2.4 J2ME API简介
2.4.1 MIDP API概述
MIDP API包含以下五个部分,如表2-1所示:
表2-1 MIDP API
2.4.2 MIDlet应用程序
MIDlet即MIDP的应用程序, MIDlet应用程序的核心是MIDlet类。为了创建一个MIDlet,必须从这个虚基类派生出自己的类。表2-2提供了从MIDlet类继承的方法。
表2-2 MIDlet类
应用程序管理器(Application Manager ,AM)的作用就是管理MIDlet 。本质上来说,MIDlet应用程序只存在两种状态——暂停和运行。MIDlet被创建后默认为暂停状态,当应用程序管理器认为它准备完毕,它会调用startApp方法来通知MIDlet进入运行状态。
2.4.3 使用定时器
省略
2.4.4 网络
省略
2.4.5 使用Connector
省略
2.4.6 使用HttpConnection
省略
2.4.7 永久性数据(RMS)
开发游戏时,保存数据在J2ME里是用RMS(Record Management System,记录管理系统)来实现的,可以在Javax.microedition.rms包中找到它,表2-7就是这个包中所有的类的列表。RMS采用记录的方式来保存数据,然后使用唯一的记录号来应用这些数据,成组的数据就被保存在存储集中。
2.4.8 存储集(Record Store)
记录存储集即一个记录存储的机制,表2-8中展示了完整的API。
表2-8 记录存储API
记录存储集在与MIDlet包范围,也就是说同一个包的任何MIDlet都可以访问这个包中的记录存储集,其他包中的MIDlet甚至不能感知到别的包里记录存储集的存在。
2.4.9 记录
省略
2.4.10 枚举
省略
2.4.11 异常
RMS异常都是因为不正确的环境造成的,对于这些异常需要编写代码来处理问题(RecordStoreNotFoundException、RecondStoreNotOpenException、InvalidRecordIDExcepaion的情况),或者只能接受它。
2.5 用户界面(LCDUI
在创建游戏时,MIDP允许我们使用两种截然不同的界面系统——高级UI和低级UI。
2.5.1 UI基础
LCDUI的核心是screen的概念,它代表MID上的一个display,在任何一个时间点,只能有一个screen可见。
在LCDUI中有3种类型的screen:
(1) 低级UI可以通过Canvas类访问;
(2) Form显示一组简单的UI组件,或者说控件;
(3) 复杂组件(Complex components)。
2.5.2 高级UI
高级UI提供了MID的一个抽象接口,通过它可以获得大量的功能。使用高级API首先创建组件把它们加入到屏幕,然后与它们相交互。高级UI一般划分为两大类:屏幕和组件。
(1) 屏幕(screen)
screen是一个完整类组件,它管理整个屏幕。Form是一个特殊的screen,可以在Form中由少量几个组件来构造一个screen。
(2) 列表(List)
List是一个可以给用户显示一组备选项的组件。这个类实现了Javax.microedition.lcdui.Choice接口,ChoiceCroup item也实现了这个接口。
(3) 文本框(TestBox)
TestBox组件是微型世界的字处理器,它只能输入多行的文字。它可以让玩家输入多行文字、剪切、复制以及从剪切板粘帖、过滤输入的数据。
(4) 警告(Alert)
可以使用它来显示一个提示信息(因为它是一个screen,所以它接管整个屏幕)。
(5) Form和Item
Form是一种可以包含一个或者多个下面这些从Item类派生出来的组件的screen——StringItem、ImageItem、TextField、ChoieGroup、DataField和Gauge。
(6) StringItem类
运用StringItem类在Form上加入简单的文字消息。
2.5.3 低级UI
低级UI提供了一个工具包来移动和绘制图形、显示文字、获取直接的按键事件等。
(1) Canvas类
Canvas又称画布,是一个Displayable对象,所有绘图操作都画在它上面。
(2) Graphics类
Graphics类工具在Canvas中承担基本的二维绘图。
(3) 二维绘图工具
drawLine采用4个参数——直线起点的x、y坐标值和直线终点x、y的坐标值,例如:
graphics.drawLine(50,0,100,0);
这行代码会从位置(50,0)到(100,0)绘制一条直线。
绘制一个矩形是一个类似的过程,不同的只是需要用起点加上宽度和高度的方式来指定这个对象,可以绘制透明的或者填充的矩形,甚至可以绘制圆角的矩形。4个绘制矩形的方法是:drawRect、drawRoundedRect、fillRect和fillRoundedRect。
弧是使用6 个参数来绘制的,前3个参数是弧所在的整个圆的外切矩形。剩下的两个参数是startAngle和arcAngle。Angle是度数,0为右侧(在三点的位置)的地方,180是左侧(在九点的位置)的位置。
(4) 绘制文字
可以使用方法drawChar、drawChars、drawString和drawSubstring在Canvas上面绘制文字。
(5) 图象和裁剪
裁剪让人可以把图象输出限制到显示设备的一个特定区域中,例如,如果将输出限制在一个从(10,10)开始到(50,50)的区域中,那么从那个时候起,没有图像会出现在显示设备上这个区域之外的任何地方。
(6) 事件响应
实现一个或者多个按键事件响应方法:keyPressde、keyRleased和keyRepeated。
第三章 手机游戏开发过程
3.1 贪吃蛇游戏的规则简介以及开发环境
3.1.1 贪吃蛇游戏的规则简介
在贪吃蛇游戏中,玩家操作由小方块连接而成的蛇,去吃随机散落在画面内的小方块,每吃一块就增加一小方块长度,要是撞壁以及撞自己的尾,就属于失败,如无失败则直到通关为止。
屏幕的长度的行向为11单位,纵向为18单位。在这个范围内,玩家通过操作方向键来控制蛇的运动方向。该游戏的最大特色是屏幕自适应,无论各种手机,PDA的屏幕大小如何,该游戏总是能获得最佳的显示效果。
3.1.2 开发环境
(1)开发的硬件环境:CPU
(2)开发软件:JDK
和J2MEWTK
3.2 详细设计
本游戏的操作流程(如图3-1):用户在启动MIDlet后,即进入游戏主画面,屏幕开始显示为欢迎画面。用户按下[开始]按钮后,就可以开始玩游戏。当用户想暂停时,再次按一下[开始]按钮,游戏就暂停了,在暂停的情况下再按[开始]按钮,游戏继续运行。任何时候按[退出]按钮,游戏MIDlet都会终止。
图 3-1操作流程
3.2.1 代码设计
(1)游戏地图代码设计
游戏地图是蛇的活动范围和食物随机散落的范围,游戏的容器为行向为11单位,纵向为18单位,如下代码:
private final int iX = 10; //地图的开始坐标
private final int iY = 10; //
private final int SWIDTH = 16; //图标的宽度
private final int iCells = 11; //地图的列数
private final int iRows = 18; //地图的行数
private final int iBoxW = SWIDTH*iCells; //地图的宽
采用二维绘图工具:二维绘图工具drawLine采用4个参数——直线起点的x、y坐标值和直线终点x、y的坐标值,例如:
graphics.drawLine(50,0,100,0);
这行代码会从位置(50,0)到(100,0)绘制一条直线。
绘制一个矩形是一个类似的过程,不同的只是需要用起点加上宽度和高度的方式来指定这个对象。可以绘制透明的或者填充的矩形,甚至可以绘制圆角的矩形。4个绘制矩形的方法是:drawRect、drawRoundedRect、fillRect和fillRoundedRect。
(2)贪吃蛇和食物的代码设计
屏幕的长度为行向为11单位,纵向为18单位;在这个范围内(如图3.3),玩家操作方向键控制蛇的运动方向。该游戏的最大特色是屏幕自适应,无论各种手机,PDA的屏幕大小如何,该游戏总是能获得最佳的显示效果。
图3-3游戏区域
贪吃蛇最初由3个小正方形组成,小正方形是蛇的身体和游戏容器的组成部分。食物也由一块小正方形组成,并且随机散落在游戏框图的区域内,每次只出现唯一的一个,待玩家操作游戏完成一个任务后面,再出现下个食物,小蛇每吃一个食物就增加一个长度。实现代码如下:
public int getCell(){
return iCell;
}
public int getRow(){
return iRow;
}
public void show(){
sLabel.setVisible(true);
}
public boolean isVisible(){
return sLabel.isVisible();
}
public void hide(){
sLabel.setVisible(false);
}
protected void setPosition(int row, int cell){
iCell = cell;
iRow = row;
sLabel.setBounds(cell*SWIDTH, row*SWIDTH, SWIDTH, SWIDTH);
}
public void moveUp(){
if(iRow>0)
setPosition(--iRow,iCell);
else
setTouch();
}
public void moveDown(){
if(iRow<iBoxH-1)
setPosition(++iRow,iCell);
else
setTouch();
}
public void moveLeft(){
if(iCell>0)
setPosition(iRow,--iCell);
else
setTouch();
}
public void moveRight(){
if(iCell<iBoxW-1)
setPosition(iRow,++iCell);
else
setTouch();
}
static boolean getTouch(){
return isTouch;
}
static void setTouch(){
isTouch = true;
}
static void setImTouch(){
isTouch = false;
}
public Snake clone(){
Snake tem = new Snake();
tem.setPosition(this.getRow(),this.getCell());
return tem;
}
(3)操作控制代码设计
MIDP的游戏设计,本质上就是用一个线程或者定时器产生重绘事件,用线程和用户输入改变游戏状态。这个游戏也不例外,启动MIDlet后,就立即生成一个重绘线程,该线程每隔50ms绘制一次屏幕。当然,重绘时有一些优化措施,并不是屏幕上所有的像素都需要重绘,而是有所选择,比如游戏画布上那些已经固定下来的就不需重绘。游戏画布是一个CommandListener,可以接受用户键盘命令,控制蛇的左移,右移,下移,上移。其代码如下:
public void move(){
hide();
if(aoSnakes[0].getRow()==Food.getRow()&&aoSnakes[0].getCell()==Food.getCell())
eat();
Snake tempSnakes[] = new Snake[iLen-1];
for(int i=0;i<tempSnakes.length;i++){
tempSnakes[i] = aoSnakes[i].clone();
}
switch(heading){
case 37:
aoSnakes[0].moveLeft();
break;
case 38:
aoSnakes[0].moveUp();
break;
case 39:
aoSnakes[0].moveRight();
break;
case 40:
aoSnakes[0].moveDown();
break;
default:
break;
整个游戏的流程控制体现在游戏画布对象的paint()方法里。paint()根据当前的游戏状态,绘制出当时的游戏画面。欢迎画面和Game Over画面的绘制相当简单,游戏暂停画面的绘制也相当容易,就是设立标志,让paint()执行的时候无需真正执行重绘动作。
第四章 程序的调试与运行
4.1游戏的调试
在手机游戏方面,游戏的控制和图片的设置是游戏的基本能力,为了方便玩家操作游戏,把玩家常用的操作键设为游戏最常用的控制键,并通过J2ME简单有效的编码,使玩家可以重新设置自己的熟悉的键。本游戏不设立关卡,而是随着游戏积分的增加,游戏将自动增加游戏的难度,如加快游戏速度和随小蛇长度的增加,游戏的操作难度也会增大。如玩家进入游戏(如图4-1),操作小蛇,
图 4-1 游戏界面图
去吃随机散落在游戏区内的食物,每吃一个食物就增加小蛇一个单位长度,并随着长度的增加,游戏的速度将增加,而小蛇的长度增加也会增加玩家的操作难度。
如果玩家操作小蛇碰壁或者由于小蛇长度太长而蛇头撞到小蛇的身体任何部位,均属于失败,玩家得重新游戏开始(如图4-2)。但游戏将自动纪录你的得分,并且保存你的游戏最高得分。
图 4-2 游戏失败的两种情况
4.2 游戏的运行环境
目标硬件环境:
1:显示: 96*54象素,1位颜色, 大约1:1的象素比例;
2:输入:(a)单手键盘或者小键盘;
(b)双手的QWERTV键盘;
©触摸屏。
3)内存 (a)128KB非易失性内存,供MIDP组件使用;
(b)8KB的非易失性内存,供应用程序生成的永久数据使用;
©32KB的易失性内存,供Java堆使用。
4)网络 (a)双响无线网络,可能间歇性连接;
(b)通常是很有限的带。
第五章 总结
本次毕业设计所开发的手机游戏,实现了手机游戏的一些基本和必需的功能。如游戏的界面设置,游戏动画的设置,玩家的控制键设置,游戏的保存和游戏纪录的保存,游戏的开始和暂停等功能。但游戏功能还存在着很多不足,首先,对游戏的动画设计不够熟悉,技巧性不强,界面的设置也不够美观。这些对于玩家来说是非常重要,将直接决定本游戏的生存能力。其次,这款游戏还没直接下载到手机上去实现,只是通过模拟器在PC机上实现。另外此次所使用的开发工具都是用的JDK的较低版本,有些功能不能实现。这次游戏的功能没能做到十全十美,是由于自身能力的不足和时间的限制,没有对游戏的开发进行进一步研究,还有很多地方需要改进。
致 谢
省略
参考文献
[1] Martin J.Wells.J2ME游戏编程[M].北京:清华大学出版社.2005.3
[2]米川英树.手机游戏程序设计[M].北京:中国铁道出版社.2005
[3]孙淑敏.Java2游戏开发北京[M].北京:清华大学出版社.2005
[4] 张小玮.J2ME无线应用开发 [M]. 北京:清华大学出版社.2005
[5]张白一.面向对象程序设计——Java[M].西安:西安电子科技大学出版社.2002.8
[6]史斌星.Java基础编程贯通教材 [M]. 北京:清华大学出版社.2005
[7]杨绍方.Java 程序基础设计 [M]. 北京:科学出版社.2005
[8]朱喜福.Java程序设计 [M]. 北京:清华大学出版社.2004.7
[9] Elliotte Rusty HaroldJ…Java网络编程[M].北京:中国电力出版社.2001.1
[10]马海军.Java编程原理与实践. [M].北京:清华大学出版社.22005
本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。
序号 | 毕业设计全套资源(点击下载) |
---|---|
本项目源码 | 基于java+J2ME的贪吃蛇游戏设计与实现(源码+文档)_java_J2ME_贪吃蛇游戏.zip |