java课程设计之贪吃蛇.docx
- 文档编号:25414030
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:32
- 大小:477.21KB
java课程设计之贪吃蛇.docx
《java课程设计之贪吃蛇.docx》由会员分享,可在线阅读,更多相关《java课程设计之贪吃蛇.docx(32页珍藏版)》请在冰豆网上搜索。
java课程设计之贪吃蛇
系统描述1
1.1本设计的目的和意义1
1.2设计的主要内容1
1.3设计要达到的目标2
1.4设计需要实现的功能和目标2
1.5游戏设计环境2
二分析与设计3
2.1游戏处理流程3
2.2需求分析4
2.3功能模块设计4
2.4详细设计8
三系统测试19
四心得体会21
五参考文献22
六附录24
基于Java的游戏“贪吃蛇”的设计和实现
内容提要:
“贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。
本文基于Java技术和JBuilder开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。
整个游戏程序分为二个功能模块,六个类模块,实现了游戏的开始、暂停、结束。
通过本游戏的开发,达到学习Java技术和熟悉软
件开发流程的目的。
一系统描述
1.1本设计的目的和意义
贪吃蛇游戏一款非常经典的手机游戏,因为它比较简单有趣,无论老少都比较适合。
贪吃蛇的设计对每一个Java语言设计者进行语言提高和进阶都是一个很好的锻炼机会。
贪吃蛇游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。
在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。
因此,如何设计和开发好这个贪吃蛇游戏,对于提高Java开发水平和系统的设计能力有极大的帮助。
在设计开发过程中,需要处理好各个类之间的继承关系,还要处理各个类相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。
正是因为如此,本次毕业设计的目的在于学习Java程序设计基本技术,学习用JBuilder开发Java程序的相关技术,熟悉游戏“贪吃蛇”的需求,熟悉项目开发的完整过程。
学会怎样进行一个项目的需求分析、概要设计、详细设计等软件开发过程,熟练地掌握Java程序设计的基本技术和方法,熟练地掌握JBuilder环境的使用方法,培养起初步的项目分析能力和程序设计能力。
1.2设计的主要内容
贪吃蛇游戏设计与实现,主要分为以下二个模块:
游戏主界面模块游戏控制模块。
在此只实现游戏的游戏主界面模块、游戏控制模块。
并且只是实现开始、暂停、退出等功能。
1.3设计要达到的目标
本次设计要达到的目标分别从以下模块进行阐述:
“游戏主界面模块:
游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、游戏分数的显示更新界面、新生方块的预览、游戏开始按钮、暂停游戏按钮、退出游戏按钮以及游戏排行榜按钮。
从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。
4游戏控制模块:
这个模块是游戏的中心环节,主要完成控制游戏的开始、暂停、退出等功能。
为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。
1.4设计实现功能和目标
本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的开始、暂停、退出、等功能,分为:
游戏主界面模块、游戏控制模块以二个模块。
4性能:
本软件在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。
4游戏主界面模块:
主要包括游戏图形区域界面、游戏开始按钮、暂停游戏按钮、关闭按钮。
游戏的主界面应该力求美观,爽心悦目。
“游戏控制模块:
主要完成控制游戏的开始、暂停、退出等功能,这部分应该做到易懂、易操作而且准确率高,不易出错。
1.5游戏设计环境
本次课程设计所涉及和实现的是用Java编程语言和JBuilder开发工具开发的贪吃蛇游戏。
本次设计的系统环境及工具如下:
运行环境:
windowsxp
编程语言:
Java
使用工具:
JBuilder2005
二分析与设计
2.1游戏处理流程
本次游戏设计的处理流程如图1所示
图1游戏处理流程图
2.2需求分析
2.2.1用户的特点
游戏开发成功后,最终用户为各个年龄段的人群,用户范围相当广泛。
本游戏友好的用户界面,简单易学的按钮操作以及简单通俗的游戏规则,使广大的用户不需要专门进行培训,就可以立即学会如何使用。
2.2.2功能需求
222.1游戏主界面模块需求
游戏界面主框架主要包括游戏图形区域界面、游戏开始按钮、游戏暂停按钮、关闭按钮。
2.2.2.2游戏图形区域界面的需求
游戏画布区主要应该包括游戏画布中贪吃蛇随机出现的位置,贪吃蛇重
新出现的位置,事物随机出现的位置。
2.2.3属性需求
在可使用性方面,要求各个功能实现简单,操作方便,系统处理正确;整个系统恢复性能好,连接速度快,以确保系统可使用性好。
另外,还要求系统的可扩展性、可维护性、可移植性良好。
2.3功能模块设计
软件开发过程中的功能模块设计,主要解决实现该游戏需求的程序模块设计问题。
包括如何把该游戏划分成若干个模块、决定各个模块之间的接口、模块之间传递的信息,以及模块结构的设计等。
2.3.1游戏功能
本系统主要完成以下几方面的功能:
1.游戏控制功能——包括游戏的开始、暂停、退出
2.界面布局
3.其他辅助功能
232总设计模块的划分
根据游戏需求中游戏所要实现的功能,整个游戏分为二个模块进行具体的设计,如图2所示。
图2游戏总设计模块
233游戏主界面模块
游戏界面主框架主要包括游戏图形区域界面、游戏的开始按钮、暂停按钮、游戏的退出按钮。
游戏界面主框架的主要结构图如图3所示。
图3游戏主界面框架
2.3.4游戏控制模块
游戏控制模块主要通过主界面上的按钮来控制游戏的开始、游戏的暂停、游戏
的退出这三个功能以及控制游戏分数变化。
在这个模块中,需要给各个按钮或文本框加入代码,来对上述的功能加以进一步的实现。
游戏控制模块的主要框架如图4所示。
游戏控制模块
图4游戏控制模块框架
-游戏开始控制:
单击“游戏开始”按钮,游戏画布即有移动的贪吃蛇出现,游戏正式开始。
“游戏暂停控制:
单击“暂停游戏”按钮,游戏暂停;再单击,游戏继续。
j游戏退出控制:
单击“退出游戏”按钮,退出该游戏。
235类模块设计
235.1类模块之间关系
通过对功能要求的分析,将贪吃蛇游戏功能划分为6个类模块,他们的关系如图5所示。
2.3.6各类模块设计概要图5贪吃蛇类之间的关系
凸'SnakeApp类
该类包含main方法,为应用程序的主类。
该类用来创建游戏的用户界面,整个程序从该类的main方法开始执行。
“SnakeFrame类
用来设计游戏的用户界面。
“SnakePanel类
设置游戏运行状态,设置蛇头颜色,背景颜色,随机块颜色,移动以及分数更新,实现上下左右移动的方法接口。
已'SnakeModeI类
设置初始化蛇的形状和运行方向,设置随机块的位置,判断游戏是否出界,以及出界后的处理,设置方向的更新。
上ArrayIndex类
用来得到坐标,设置坐标以及判断运行方向相同或相反。
丄ArraylndexReadOnly类
用来得到坐标,以及判断运行方向相同或相反。
理Listener类
用来控制游戏的速度
237游戏图形界面的图形显示更新功能
游戏的图形区域界面主要是一个图形显示更新区域,主要包括随机食物的显示更新、进行中和游戏结束时的分数更新和游戏图形区域界面的清除。
游戏图形区域又很多小方格组成,主要是一个表格,根据相应格子的设置标志来显示相应的图形图片,这样就实现了贪吃蛇的实时显示。
238贪吃蛇蛇身的设计
在贪吃蛇游戏中,具体的蛇身图形的设计是比较重要的一个方面。
因为贪吃蛇游戏中主要的游戏动作就是控制蛇身的移动和转向,以便于覆盖随机块。
由于主要的游戏动作都集中在蛇身上,因此蛇身设计就显得格外重要。
239内部接口
内部模块之间的接口是通过内部函数完成,在程序设计中用设计软件本身所带
的调用函数实现。
2.4详细设计
2.4.1程序主结构
本次所设计贪吃蛇游戏的程序主结构如图6所示。
图6贪吃蛇程序主结构
242类模块程序流程图
SnakeApp类
图7SnakeApp类程序流程图
SnakeFrame类
图8SnakeFrame类程序流程图
SnakePanel类
图9SnakePanel类程序流程图
SnakeModel类
图10SnakeModel类程序流程图
ArraylndexReadOnly类
图11ArraylndexReadOnly类程序流程图
ArrayIndex类
图12Arraylndex类程序流程图
listener类
图13listener类程序流程图
243类模块具体设计
SnakeApp.java程序
SnakeApp类中包含main方法,为主类。
在主类中创建了SnakeFrame窗口类
的一个实例。
设计如下:
j成员变量表
表1SnakeApp.java程序成员变量表
变量名称
变量属性
说明
WIDTH
privatestaticfinalint
窗体宽度
HEIGHT
privatestaticfinalint
窗体高度
表2SnakeApp.java程序成员方法
方法名称
方法功能
备注
main
创建了SnakeFrame窗口类的一个实例,应用程序从main方法开始执行
应用程序的入口方
法
SnakeFrame.java程序
这个程序中包含二个类,下面分小节分别叙述。
①SnakekFrame类程序
SnakeFrame类用来设计游戏的用户界面。
在该界面上有用户玩游戏的功能菜
单、游戏界面及游戏的状态栏。
设计如下:
丄成员变量表
表3SnakeFrame类程序成员变量表
变量名称
变量属性
说明
jMenu1
JMenu
主菜单项“游戏”
start
JMenultem
子菜单项“开始游戏”
pause
JMenultem
子菜单项“暂停游戏”
end
JMenultem
子菜单项“结束游戏”
quit
JMenultem
子菜单项“关闭”
丄成员方法
表4SnakeFrame类程序成员方法表
方法名称
方法功能
备注
SnakeFrame
加载整个用户界面,注册子菜单的ActionEvent
事件
构造函数
actionPeformed
ActionEvent事件处理方法。
该方法处理各按钮的动作事件
接口方法
②listener类程序
具体设计如下:
丄成员变量表
表5listener类程序成员变量表
变量名称
变量属性
说明
pause
privatelong
游戏速度停顿时间
丄成员方法
表6listener类程序成员方法
方法名称
方法功能
备注
listener
用来控制游戏的速度
构造函数
actionPeformed
把pause的值赋给speedtime,处理速度事件
ArrayIndex.java程序
“成员变量
表7ArrayIndex类程序成员变量表
变量名称
变量属性
说明
x
privateint
定义x坐标
y
privateint
定义y坐标
丄成员方法
表8Arraylndex类程序成员方法
方法名称
方法功能
备注
ArrayIndex
对坐标赋初值
构造函数
getX
得到x坐标
自定义方法
getY
得到y坐标
自定义方法
setX
设置x坐标
自定义方法
setY
设置y坐标
自定义方法
equalOrRev
运行方向是否同向或反向
自定义方法
equals
运行方向是否同向
自定义方法
reverse
运行方向是否反向
自定义方法
ArrayIndexReadOnly.java程序
」成员变量表
表9ArraylndexReadOnly类程序成员变量表
变量名称
变量属性
说明
x
privateint
定义x坐标
y
privateint
定义y坐标
表10ArraylndexReadOnly类程序成员方法
方法名称
方法功能
备注
ArrayIndexReadOnly
对坐标赋初值
构造函数
getX
得到x坐标
自定义方法
getY
得到y坐标
自定义方法
equalOrRev
运行方向是否同向或反向
自定义方法
equals
运行方向是否同向
自定义方法
reverse
运行方向是否反向
自定义方法
SnakePanel.java程序
+成员变量表
表11SnakePanel类程序成员变量表
变量名称
变量属性
说明
parent
JFrame
JFrame的对象设置界面
row
privateint
贪吃蛇的行数
col
privateint
贪吃蛇的列数
grids
privateJPanel[][]
格子
direction
privateArrayIndex
游戏运行方向
snake
privateSnakeModel
蛇的形状
snakeBody
privateLinkedList
蛇的身体
others
privateLinkedList
除了蛇以外的地方
snakeHead
privateArrayIndexReadOnly
蛇的头
tempBlock
privateArrayIndexReadOnly
随机块
speedTime
privatelong
蛇的运行速度
bodyColor
privateColor
身体颜色
headColor
privateColor
头的颜色
tempColor
privateColor
随机块颜色
othersColor
privateColor
背景颜色
t
privateThread
一个线程
isEnd
privateboolean
判断对错
gameHaveExit
privatestaticboolean
游戏结束
」成员方法
表12SnakePanel类程序成员方法
方法名称
方法功能
备注
SnakePanel
设置游戏界面的属性及注册组件的键盘事件
构造函数
newGame
对重新游戏的设置以及初始化
stopGame
结束当前游戏的线程
resumeGame
暂停游戏
updateBg
当前状态下蛇头,身体和随机块的颜色更新
isFocusTraversable
是否可以穿过
run
该方法中,用线程控制控制游戏,让蛇不停地移动,吃了随机块分数加1。
更新显示分数。
Runnable接口
方法
keyPressed
键盘事件处理方法。
keyReleased
空方法
keyTyped
空方法
SnakeModel.java程序
-成员变量表
表13SnakeModel类程序成员变量表
变量名称
变量属性
说明
theThread
Thread
创建线程来控制游戏
b
SnakeFrame
row
privateint
游戏的行数
col
privateint
游戏的列数
snakeHead
privateArrayIndex
蛇头坐标
jps
private
ArrayindexReadOnly[][]
方格坐标
snake
privateLinkedList
蛇的形状
others
privateLinkedList
除了蛇以外的地方
tempBlock
privateArrayindexReadOnly
随机块
runingDiriction
privateArrayindex
运行方向的判断
表14SnakeModel类程序成员方法
方法名称
方法功能
备注
getsnakeHead
设置蛇头坐标
getsnakeTail
设置身体坐标
getRuningDiriction
得到运行方向
getsnake
得到蛇的形态
getOthers
得到除了蛇以外的其它部分
setsnakeHead
设置蛇头坐标
getTempBlock
得到随机块坐标
setTempBlock
设置随机块坐标
moveTo
移动
initializeV
初始化游戏
SnakeModel
蛇模型的初始化
move
判断运行方向,判断是否吃了随机块,判断游戏是否出界,出界后是否参加排名,以及运行方向的更新。
三系统测试
打开贪吃蛇游戏后,出现如下图14所示界面
图14
点击主菜单的【文件】出现如图15所示界面。
选择【退出】则可以退出游戏
图15
再点击【帮助】就会出现如图16所示界面
图16
点击主菜单的【设置】会出如图17所示界面,点击等级的类别修改难度系数
图17
点击【风格】如图18所示可去掉网格
图18
点击【新游戏】按钮开始游戏,如图19所示并有暂停和继续功能
图19
四心得体会
通过这次课程设计,我对上学期所学的JAVA语言程序设计有一个更深刻
的了解,将所学的知识应用于实践,由于所学知识有限,为了使游戏能够能够实现自己预先的构想,我们这组通过上网找代码和去图书馆借书找程序,比较画好的流程图及功能模块,不断阅读修改代码使程序达到预期所要实现的目标,完成课程设计后,可以感觉到自己对Java程序的又有了新的认识。
在这次课程设计中,我主要负责窗体和判断蛇的运动的设计和开发,在SnakeApp类中先定义了窗体的长度和宽度,然后通过frame.show()显示窗
体,用注册监听器到Window的接口,利用System.exit(O)语句来完成关闭窗口
的设计,在窗体大小的设计中,宽度和高度是采用宏定义的形式。
在ArrayIndex
和ArrayindexReadOnly类的设计中,两个类的设计基本相似,但是在本组成员其他类的调用中用法不一样,先定义了X和y的坐标,定义构造函数,用getx()和gety()方法得到X和Y的坐标,用setX(intx)和setY(inty)方法设置X和Y的坐标,用布尔型判断equalOrReV,equals,reverse方法,判断蛇的各种运行方向,以便在其他设计中能够更好的判断蛇是否出界,是否与随机块即食物出现时正在运行的方向一致。
在做Java设计之前也有做过其他的课程设计,大多规模很小。
在数据库、各种应用软件和游戏中,我仍觉得对游戏的设计有极大的热情。
因为其各个模块间的联系十分紧密,代码重复执行率高,当经过无数次的调试、修改后,能最终看到成品,有无比自豪的心情。
大学期间做过图书馆管理程序等简单的数据库管理系统的课程设计,思想大致相似,变化范围有限,没有太多自己可发挥的余地。
大家作品的最终结果都离不开同一个模式。
相比一些数据库软件,游戏的设计有很多人情色彩和艺术思想的发挥,正式商业的软件的人性化界面和各个游戏间迥异的结构每每会让人有去开发的冲动。
综合运用以前所学习的知识,设计一个JAVA手机游戏,并能实现以下的功能:
游戏声音的控制、游戏等级的控制、最高分的记录、游戏暂停、游
戏重新开始、游戏的结束。
总之,通过本次的课程设计,使我平时学到的理论知识得到了很好地升华,理论与实际得到一次很好的结合,为我今后参加工作打下了坚实的基础,使我受益匪浅。
参考文献
[1]魏伟译.JBuilder开发人员指南[M]•北京:
机械工业出版社,2001.1.
[2]胡雷,叶曙光,徐饪.JBuilder9.0入门与提高[M].北京:
机械工业出版社,2004.
[3]田勇,孙新.Jbuilder开发人员指南[M].北京:
机械工业出版社,2001.
[4]李尊朝,苏军Java语言程序设计(第二版)[M].北京:
中国铁道出版社,2009.
[5]黄晓东」ava课程设计案例精编(第二版)[M].北京:
中国水利水电出版社,2008.
[6]陆光义,宋现锋.Java游戏编程导学[M].北京:
清华大学出版
社.2004.
附录“贪吃蛇游戏”程序部分源代码
一、SnakeApp.java
packagecccc;
importjavax.swing.*;
importjava.util.*;
importjava.awt.*;
importjava.awt.event.*;
classSnakeApp
{
publicstaticvoidmain(String[]args)//主函数
{
SnakeFrameframe=newSnakeFrame();
frame.addWindowListener(newWindowAdapter()//注册事件监听器
{
publicvoidwindowClosing(WindowEvente)//关闭窗体
{
System.exit(O);
}
});
frame.setSize(WIDTH,HEIGHT);〃设置窗体大小frame.setResizable(false);
frame.setLocation(300,200);
frame.setTitle(”贪吃蛇v1.0");〃设置窗体标题为贪吃蛇v1.0
//显示窗口
frame.show();
}
privatestaticfinalintWIDTH=300;//宽度值为300
privatestaticfinalintHEIGHT=270;〃高度值为270
}
二、Arrayindex.java
packagecccc;
publicclassArrayIndex
{
privateintx;//定义x坐标
privateinty;//定义y坐标
ArrayIndex(intx,inty)//构造函数
{
this.x=x;
this.y=y;
}
intgetX()//得到x坐标
returnx;
}
intgetY()〃得到y坐标
{
returny;
}
voidsetX(intx)〃设置x坐标
{
this.x=x;
}
voidsetY(inty)//设置y坐标
{
this.y
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课程设计 贪吃