毕业设计论文基于java的贪吃蛇游戏开发.docx

上传人:b****2 文档编号:548424 上传时间:2023-04-29 格式:DOCX 页数:24 大小:125.53KB
下载 相关 举报
毕业设计论文基于java的贪吃蛇游戏开发.docx_第1页
第1页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第2页
第2页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第3页
第3页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第4页
第4页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第5页
第5页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第6页
第6页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第7页
第7页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第8页
第8页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第9页
第9页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第10页
第10页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第11页
第11页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第12页
第12页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第13页
第13页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第14页
第14页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第15页
第15页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第16页
第16页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第17页
第17页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第18页
第18页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第19页
第19页 / 共24页
毕业设计论文基于java的贪吃蛇游戏开发.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

毕业设计论文基于java的贪吃蛇游戏开发.docx

《毕业设计论文基于java的贪吃蛇游戏开发.docx》由会员分享,可在线阅读,更多相关《毕业设计论文基于java的贪吃蛇游戏开发.docx(24页珍藏版)》请在冰点文库上搜索。

毕业设计论文基于java的贪吃蛇游戏开发.docx

毕业设计论文基于java的贪吃蛇游戏开发

论文编号:

德州科技职业学院

毕业论文

 

题目

 

姓名:

____________________

学号:

____________________

所在院系:

____________________

所学专业:

____________________

指导教师:

____________________

完成时间:

____________________

Java贪吃蛇游戏设计

 

 

前言

随着3G的到来,让人们的目光聚集到一个新兴的互联网终端——手机上。

手机的随身性让玩家有了随时随地完游戏的可能。

据我调查行业分析师也对这一行业持普遍的乐观态度。

yramidResearcher的最新报告显示,手机游戏市场正在稳步发展。

用户数从2008年的1.83亿到现在将增长到3亿。

据报告分析,2014年,市场规模有望达到180亿美元。

手机游戏的发展有以下推动因素

1.更好更快的无限网络以及易于操作的手机终端改善了用户的体验;

2.触摸屏,3D动画处理能力以及在线互动能力让游戏开发商把游戏做的更好;

3.苹果应用商店模式刺激作用。

J2ME是一种针对移动电话和PDA这样的小型设备的Java语言。

大部分的手机厂商都迫切希望Java手机推广应用。

上千万的手机已经到了消费者手中。

它已经极大的提高了移动电话支持游戏的能力。

它有着比SMS或WAP更好控制的界面。

允许使用子图形动画。

并且可以通过无限网络连接到远程服务器。

支持Java的手机的普及,所以目前它成为最好的移动游戏开发环境。

J2ME不是手机上配置的唯一解释语言,但是它是许多厂商支持的行业标准。

一些专用的解释语言也在某些区域有上着上佳的表现。

如北美的Qualcomm的BREM和一些韩国运营上支持的名为GVM的标准。

基于以上分析,Java手机游戏的开发具有重要的意义。

 

1.Java语言的概述及开发工具

1.1Java语言特点

1.1.1平台无关性

Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。

Java的数据类型与机器无关。

1.1.2安全性

Java的编程类似C++,但舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。

它提供了安全管理器,防止程序的非法访问。

1.1.3面向对象

  Java吸收了C++面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。

1.1.4分布式

Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。

1.1.5健壮性

Java致力于检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。

Java取消了C语言的结构、指针、#define语句、多重继承、goto语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。

1.2J2ME介绍

虽然Java已经被用到许多企业级软体上,可是其实骨子里面还是非常适合用在嵌入式系统之中。

Java平台演进到Java2后,Java平台分别针对不同领域的需求被分成四个版本,亦即J2EE、J2SE、J2ME以及JavaCard中J2ME定位在消费性电子产品的应用上。

这个版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。

这个版本的应用层面相当广泛,会是未来Java平台发展的重点项目。

J2ME在1999年的JavaOne开发人员大会上初次亮相,它的目标是面向智能无线设备和小型计算机设备的开发人员。

J2ME的一个关键优点是,J2ME与所有支持Java的设备都是兼容的。

支持Java的设备就是任何运行Java虚拟机器的计算机。

Motorola、Nokia等生产厂商都生产支持Java的设备。

JAVJ2ME平台是由配置(Configuration)和简表(Profile)构成的。

配置是提供给最大范围设备使用的最小类库集合,在配置中同时包含Java虚拟机。

简表是针对一系列设备提供的开发包集合。

在J2ME中还有一个重要的概念是可选包(OptionalPackage),它是针对特定设备提供的类库,比如某些设备是支持蓝牙的,针对此功能J2ME中制定了JSR82(BluetoothAPI)提供了对蓝牙的支持。

目前,J2ME中有两个最主要的配置,分别是ConnectedLimitedDevicesConfiguration(CLDC)和ConnectedDevicesConfiguration(CDC)。

1.3 关于ECLIPSE

  Eclipse是一个开放源代码的、基于Java的可扩展开发平台。

就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。

虽然大多数用户很乐于将Eclipse当作JavaIDE来使用,但Eclipse的目标不仅限于此。

Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。

由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。

这种平等和一致性并不仅限于Java开发工具。

尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C++、COBOL和Eiffel等编程语言的插件已经可用,或预计会推出。

Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。

Eclipse是一个开放源代码的、基于Java的可扩展开发平台。

就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

1.4WTK介绍

WTK的全称是SunJ2MEWirelessToolkit——Sun的无线开发工具包。

这一工具包的设计目的是为了帮助开发人员简化j2me的开发过程。

使用其中的工具可以开发与JavaTechnologyfortheWirelessIndustry(JTWI,JSR185)规范兼容的设备上运行的j2me应用程序。

 WTK是用来开发MIDP的,为了让MIDlet可以顺利编译和执行,WTK必须具有CLDC和MIDP的类库,WTK可以帮助我们省去额外安装调试这些类库的时间

2.需求分析

2.1游戏的介绍

游戏的名称叫“贪吃蛇”,节:

一条蛇可以看成有许多正方形的“小格子”拼凑成,我把它称作节。

节是蛇身上最小的单位。

 

 段:

当许多节连成一条直线,我称它为段。

贪吃蛇只有一段,如果它拐弯就变成两段。

 

 链表:

用来保存每一段的状态,链表的元素单位是段。

且链表的最后一个元素表示蛇的头部段。

 

 坐标系:

MIDP中的坐标以左上角那点为(0,0),向右则x递增,向下则y递增。

 

2.2游戏开发的可行性

游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件的水平的提高。

游戏开发新技术层出不穷,经典游戏比比皆是,游戏这个名称一直存在于每个人的日常生活中。

因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色.而从技术方面来看,现在的java技术也融入了手机中。

这些都为开发的这款贪吃蛇游戏提供了条件。

2.3设计目的

综合运用在校所学的知识和技能,设计开发贪吃蛇游戏,使自己熟悉应用系统的开发的过程,培养独立思考的能力,校验学习效果和动手能力,提高工程实践能力。

2.4游戏需求

给出一条小蛇和随机出现一个食物,当小蛇吃到食物时就加分。

2.4.1游戏界面需求

良好的用户界面,有分数显示和暂停。

2.4.2游戏形状需求

良好的方块形状设计,绘制小蛇和食物,小蛇由几个方块组成,食物由一个方块组成。

2.4.3键盘事件处理

小蛇可以通过键盘方向键(上,下,左,右)进行方向的移动。

2.4.4显示需求

当小蛇吃掉几个食物后会变长,平且吃完食物时食物会消失,并立即产生一个1个新的事物。

2.4.5接口控制

本软件通过键盘进行操作,在windows操作系统下,利用键盘的上下左右键进行操作,要使用键盘的接口事件。

2.4.6环境介绍

操作系统:

MicrosoftWindowsXP

程序语言:

Java2

开发包:

Java(TM)2StandardEdition(5.0)

    SunMicro.J2ME WirelessToolKit2.2

IDE:

  Eclipse3.01

3.功能设计

3.1游戏的流程图

 

 

 

3.详细设计

3.1游戏主界面的开发

屏幕的背景用白色,由于屏幕高比宽长,所以取以宽为边长的矩形区域作为游戏区域,下面的部分作为分数、信息区域。

图一(游戏的主界面)

3.2绘制蛇身

protectedvoidpaint(Graphicsg){

//清屏

g.setColor(0,255,0);

g.fillRect(0,0,width,height);

g.setColor(0);

//绘制蛇身

for(inti=0;i

g.fillRect(snake[i][0],snake[i][1],SNAKEWIDTH,SNAKEWIDTH);

}

//绘制食物

if(b){

g.fillRect(foodX,foodY,SNAKEWIDTH,SNAKEWIDTH);

}

}

3.3创建初始“蛇”及“蛇”的移动

蛇的初始长度为5,边长为10个像素(背景为黄色),蛇头初始位于屏幕(100,30),方向向左,用向量表来记录每个蛇的位置以及方向。

部分参考代码如下:

privatevoidmove(intdirection){

//蛇身移动

for(inti=snakeNum-1;i>0;i--){

snake[i][0]=snake[i-1][0];

snake[i][1]=snake[i-1][1];

}

}

3.4吃掉食物,蛇身增长

当小蛇吃掉食物后,会增长,

部分代码:

/**

*吃掉食物,自身增长

*/

privatevoideatFood(){

//判别蛇头是否和食物重叠

if(snake[0][0]==foodX&&snake[0][1]==foodY){

snakeNum++;

generateFood();

}

}

3.4随机产生食物

部分代码:

*产生食物

*说明:

食物的坐标必须位于屏幕内,且不能和蛇身重合

*/

privatevoidgenerateFood(){

while(true){

foodX=Math.abs(random.nextInt()%(width-SNAKEWIDTH+1))

/SNAKEWIDTH*SNAKEWIDTH;

foodY=Math.abs(random.nextInt()%(height-SNAKEWIDTH+1))

/SNAKEWIDTH*SNAKEWIDTH;

booleanb=true;

for(inti=0;i

if(foodX==snake[i][0]&&snake[i][1]==foodY){

b=false;

break;

}

}

if(b){

break;

}

}

}

3.5键盘事件处理

可以通过键盘控制蛇的移动方向

publicvoidkeyPressed(intkeyCode){

intaction=this.getGameAction(keyCode);

//改变方向

switch(action){

caseUP:

if(direction!

=DIRECTION_DOWN){

direction=DIRECTION_UP;

}

break;

caseDOWN:

if(direction!

=DIRECTION_UP){

direction=DIRECTION_DOWN;

}

break;

caseLEFT:

if(direction!

=DIRECTION_RIGHT){

direction=DIRECTION_LEFT;

}

break;

caseRIGHT:

if(direction!

=DIRECTION_LEFT){

direction=DIRECTION_RIGHT;

}

break;

caseFIRE:

//暂停和继续

isPaused=!

isPaused;

break;

}

}

3.6判断游戏结束

只有一种游戏结束的方式,即蛇头碰到蛇身游戏结束。

参考代码:

privatebooleanisGameOver(){

//边界判别

if(snake[0][0]<0||snake[0][0]>(width-SNAKEWIDTH)||

snake[0][1]<0||snake[0][1]>(height-SNAKEWIDTH)){

returntrue;

}

//碰到自身

for(inti=4;i

if(snake[0][0]==snake[i][0]

&&snake[0][1]==snake[i][1]){

returntrue;

}

}

returnfalse;

}

4游戏测试与发布

4.1游戏运行的效果图

图一表示小蛇正在移动

图二表示,随机产生一个食物

图三表示小蛇吃掉食物增长后继续移动

4.2测试结果

程序运行良好,未出现bug.

5.自我评价和总结

5.1遇到的问题及解决办法

先是图形化界面的设计,一直想不出好的办法,最后翻看了教程才解决了这个问题,后来在蛇的移动上也遇到了些问题。

上网查了一下,才知道蛇身是由一连串的基本图形组成的,每过1秒检查前面是什么,如果是空的,就把图画成普通身子的样子。

再在前方在画一个头,并将其左标记入数组,数组要足够大,在把尾巴画成背景色,如果前面是食物,尾巴就不删除。

这个里面的难点就是数组里面的操作和坐标的表示。

把头添在最后一个元素,把第一个元素提起。

5.2总结

这款游戏的优点,就是简单的画面和容易的操作很容易使玩家就上手,适合不通年龄段的玩家娱乐。

当然这款游戏也存在有不足的地方,有些功能还是没有实现。

通过这次设计过程中,我查阅了大量的资料,对java有了更深刻的认识,通过这次的设计,更提高了我在程序设计和调试方面的技巧,更重要的是我认识了自己的不足,在编程方面我还需要努力学习来充实自己,来获取更大的收获。

6.参考资料

【1】Java2实用教程(第三版)清华大学出版社。

【2】java编程思想(第四版)机械工业出版社。

【3】J2ME游戏开发实例大全清华大学出版社出版。

7.附加源代码

importjava.util.*;

importjavax.microedition.lcdui.*;

/**

*贪吃蛇游戏

*/

publicclassSnakeCanvasextendsCanvasimplementsRunnable{

/**存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标*/

int[][]snake=newint[200][2];

/**已经使用的节点数量*/

intsnakeNum;

/**贪吃蛇运动方向,0代表向上,1代表向下,2代表向左,3代表向右*/

intdirection;

/*移动方向*/

/**向上*/

privatefinalintDIRECTION_UP=0;

/**向下*/

privatefinalintDIRECTION_DOWN=1;

/**向左*/

privatefinalintDIRECTION_LEFT=2;

/**向右*/

privatefinalintDIRECTION_RIGHT=3;

/**游戏区域宽度*/

intwidth;

/**游戏区域高度*/

intheight;

/**蛇身单元宽度*/

privatefinalbyteSNAKEWIDTH=4;

/**是否处于暂停状态,true代表暂停*/

booleanisPaused=false;

/**是否处于运行状态,true代表运行*/

booleanisRun=true;

/**时间间隔*/

privatefinalintSLEEP_TIME=300;

/**食物的X坐标*/

intfoodX;

/**食物的Y坐标*/

intfoodY;

/**食物的闪烁控制*/

booleanb=true;

/**Random对象*/

Randomrandom=newRandom();

publicSnakeCanvas(){

//初始化

init();

width=this.getWidth();

height=this.getHeight();

//启动线程

newThread(this).start();

}

/**

*初始化开始数据

*/

privatevoidinit(){

//初始化节点数量

snakeNum=7;

//初始化节点数据

for(inti=0;i

snake[i][0]=100-SNAKEWIDTH*i;

snake[i][1]=40;

}

//初始化移动方向

direction=DIRECTION_RIGHT;

//初始化食物坐标

foodX=100;

foodY=100;

}

protectedvoidpaint(Graphicsg){

//清屏

g.setColor(0,255,0);

g.fillRect(0,0,width,height);

g.setColor(0);

//绘制蛇身

for(inti=0;i

g.fillRect(snake[i][0],snake[i][1],SNAKEWIDTH,SNAKEWIDTH);

}

//绘制食物

if(b){

g.fillRect(foodX,foodY,SNAKEWIDTH,SNAKEWIDTH);

}

}

privatevoidmove(intdirection){

//蛇身移动

for(inti=snakeNum-1;i>0;i--){

snake[i][0]=snake[i-1][0];

snake[i][1]=snake[i-1][1];

}

//第一个单元格移动

switch(direction){

caseDIRECTION_UP:

snake[0][1]=snake[0][1]-SNAKEWIDTH;

break;

caseDIRECTION_DOWN:

snake[0][1]=snake[0][1]+SNAKEWIDTH;

break;

caseDIRECTION_LEFT:

snake[0][0]=snake[0][0]-SNAKEWIDTH;

break;

caseDIRECTION_RIGHT:

snake[0][0]=snake[0][0]+SNAKEWIDTH;

break;

}

}

/**

*吃掉食物,自身增长

*/

privatevoideatFood(){

//判别蛇头是否和食物重叠

if(snake[0][0]==foodX&&snake[0][1]==foodY){

snakeNum++;

generateFood();

}

}

/**

*产生食物

*说明:

食物的坐标必须位于屏幕内,且不能和蛇身重合

*/

privatevoidgenerateFood(){

while(true){

foodX=Math.abs(random.nextInt()%(width-SNAKEWIDTH+1))

/SNAKEWIDTH*SNAKEWIDTH;

foodY=Math.abs(random.nextInt()%(height-SNAKEWIDTH+1))

/SNAKEWIDTH*SNAKEWIDTH;

booleanb=true;

for(inti=0;i

if(foodX==snake[i][0]&&snake[i][1]==foodY){

b=false;

break;

}

}

if(b){

break;

}

}

}

/**

*判断游戏是否结束

*结束条件:

*1、蛇头超出边界

*2、蛇头碰到自身

*/

privatebooleanisGameOver(){

//边界判别

if(snake[0][0]<0||snake[0][0]>(width-SNAKEWIDTH)||

snake[0][1]<0||snake[0][1]>(height-SNAKEWIDTH)){

returntrue;

}

//碰到自身

for(inti=4;i

if(snake[0][0]==snake[i][0]

&&snake[0][1]==snake[i][1]){

returntrue;

}

}

returnfalse;

}

/**

*事件处理

*/

publicvoidkeyPressed(intkeyCode){

intaction=

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2