基于Java的贪吃蛇开发文档.docx
《基于Java的贪吃蛇开发文档.docx》由会员分享,可在线阅读,更多相关《基于Java的贪吃蛇开发文档.docx(33页珍藏版)》请在冰豆网上搜索。
基于Java的贪吃蛇开发文档
中南林业科技大学
《小组软件过程实验》
实验报告
题目:
2D游戏贪食蛇软件开发
专业班级:
11级软件工程2班
组长:
xxx
成员:
xxxx
指导教师:
xxxxx
完成日期:
2014/4/15
1软件项目开发计划………………………………………………(页码)
2软件需求规格说明书……………………………………………(页码)
3软件配置管理计划……………………………………………(页码)
4软件设计规格说明………………………………………………(页码)
5软件测试计划……………………………………………………(页码)
6软件测试分析报告………………………………………………(页码)
7软件项目开发总结报告…………………………………………(页码)
附件A:
小组制定的软件过程规范……………………………………(页码)
附件B:
其他软件开发过程记录信息……………………………………(页码)
小组成员角色与分工情况表
姓名
职责和完成的工作
项目组评定
xxx
组长,完成代码,分配任务和总结
良好
xxx
组员,完成部分代码和文档五、六部分
良好
xxx
组员,完成部分代码和文档三、四部分
良好
xxx
组员,完成部分代码和文档一、二部分
良好
一、软件项目开发计划
完成人:
xxxx
1引言
1.1编写目的
本文档的目的是明确基于JAVA的贪吃蛇项目的基本需求分析,明确项目中各个任务系统的不同分工,分析项目的核心功能和项目所需要达到的预期目标。
期望读者包括:
项目发起人、项目执行团队、指导老师。
1.2背景
近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。
贪吃蛇游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。
在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。
因此,如何设计和开发好这个贪吃蛇游戏,对于提高Java开发水平和系统的设计能力有极大的帮助。
在设计开发过程中,需要处理好各个类之间的继承关系,还要处理各个类相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。
“贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。
本文基于Java技术,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。
整个游戏程序分为二个功能模块,四个类模块,实现了游戏的开始、暂停、结束。
通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。
1.3定义
JAVA:
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和java平台的总称。
Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
运行环境:
意指一种把半编译的执行码在目标机器上运行的环境。
算法:
算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。
或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
编译处理:
利用编译程序从源语言编写的源程序产生目标程序的过程;用编译程序产生目标程序的动作。
编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。
编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:
词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。
主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
调试运行:
检查和修改程序中的错误,保证它能正确无误地运行是程序设计工作中的重要一环。
1.4参考资料
1.Java从入门到精通魔乐科技(MLDN)软件实训中心 编著/2010-04-01/人民邮电出版社
2.Java编程思想(第4版)2007-06-01/机械工业出版社
3.轻量级JavaEE企业应用实战(第3版)李刚编著/2012-04-01/电子工业出版社
4.疯狂Java讲义(第2版)李刚 编著/2012-01-01/电子工业出版社
5.Java语言程序设计:
基础篇(第8版)(美)梁勇 著,李娜 译/2011-06-01/机械工业出版社
6.EffectiveJava中文版(第2版)(美)布洛克 著,杨春花,俞黎敏 机械工业出版社
2项目概述
2.1工作内容
本项目需开发出一个可以在windos操作系统上运行的贪吃蛇游戏,要用到J2EE开发环境和eclipse开发工具,使用的JDK版本为6.0。
所需文档包括可行性分析(研究)报告(FAR)和软件需求规格说明书(SRS)。
在系统生命周期中处于软件开发时期。
选用四人小组开发计划,由四人配合一起完成软件的开发。
2.2主要参加人员
xx组长
xxx组员
xx组员
xx组员
2.3产品
2.3.1程序
1.对功能的规定
本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的开始、暂停、退出等功能,分为:
游戏主界面模块、游戏控制模块两个模块。
游戏主界面模块:
主要包括游戏图形区域界面、游戏开始、暂停、退出、加速、减速。
游戏控制模块:
主要完成游戏的开始、暂停、退出、加速、减速等功能。
2.对性能的规定
本游戏在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。
游戏主界面应该力求美观,赏心悦目。
游戏控制模块应做到易懂、易操作,而且准确率高,不易出错。
3.输入输出要求
输入:
玩家可以通过快捷键控制游戏,比如快捷键“ENTER”开始游戏,“空格”暂停游戏,“pageUp”贪食蛇加速,“pageDown”贪食蛇减速。
键盘上的方向键控制蛇的移动方向。
输出:
玩家所得的分数,玩家所用的时间。
当玩家所控制的蛇死亡后,要输出一个提示消息“OH,你死啦,需要重新开始么?
”表示蛇的死亡,然后点击确定重新开始游戏。
4.业务流程图
5.数据流图
6.功能分析图
2.3.3服务
1.设备
WindowsXP
2.支持软件
Eclipse
3.接口
KeyListener:
监听按键,控制蛇的行动或游戏的运行;
2.3.4非移交的产品
测试版本:
SG1.0
2.4验收标准
可运行的完整游戏程序。
2.5完成项目的最迟期限
2014.4.16
2.6本计划的批准者和批准日期
3实施计划
3.1工作任务的分解与人员分工
xxxx任务分配,程序调试,代码编写,软件开发项目总结
xxx程序调试,代码编写,计划与需求文档
xx程序调试,代码编写,设计规格说明书与软件配置管理计划
xx程序调试,代码编写,软件测试计划与软件测试分析报告
3.2进度
对于需求分析、设计、编码实现、测试、移交、培训和安装等工作,给出每项工作任务的预定开始日期、完成日期及所需资源,规定各项工作任务完成的先后顺序以及表征每项工作任务完成的标志性事件(即所谓“里程碑)。
3.3关键问题
逐项列出能够影响整个项目成败的关键问题、技术难点和风险,指出这些问题对项目的影响。
4支持条件
四台能正常运行eclips的计算机.
二、需求规格说明书
完成人:
xxx
1.概述(Summary)
1.1项目的目的与目标(PurposeandAimofProject)
本系统主要是完成贪吃蛇游戏的基本操作。
用户可以自己练习和娱乐。
本系统需要满足以下几点要求:
(1)利用方向键来改变蛇的运行方向。
(2)空格键暂停或继续游戏,并在随机的地方产生食物。
(3)吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。
2.目标系统功能需求(FunctionofTargetSystem)
本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的开始、暂停、退出等功能,分为:
游戏主界面模块、游戏控制模块两个模块。
游戏主界面模块:
主要包括游戏图形区域界面、游戏开始、暂停、退出、减速、加速。
游戏控制模块:
主要完成游戏的开始、暂停、退出等功能。
3.目标系统性能需求(PerformanceofTargetSystem)
本游戏在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。
。
4.目标系统界面与接口需求(InterfaceofTargetSystem)
4.1界面需求(InterphaseRequirement)
游戏主界面应该力求美观,赏心悦目。
游戏控制模块应做到易懂、易操作,而且准确率高,不易出错(。
4.2接口需求(InterfaceRequirement)
无
5.目标系统假设与约束条件(SupposeandRestrictionofTargetSystem)
5.1.设备
WindowsXP
5.2.支持软件
Eclipse
5.3.接口
SnakeListener:
VoidSankeMoved(Snake);
三、软件配置管理计划
完成人:
xx
1.引言
软件配置管理计划对于软件开发管理是非常重要的,其主要思想在于版本控制。
版本控制是软件配置管理计划的核心思想之一,是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理。
版本控制最主要的功能就是追踪文件的变更。
它将什么时候、什么人更改了文件的什么内容等信息忠实地记录下来。
每一次文件的改变,文件的版本号都将增加。
除了记录版本变更外,版本控制的另一个重要功能是并行开发
1.目的
2D游戏贪食蛇软件正常运行,记录游戏运行时的各种状态,如:
加速、减速、重新开始以及暂停
1.2定义和缩写词
本计划中用到的一些术语的定义按GB/T 11457 和GB/T 12504
1.3参考资料
GB/T 11457 软件工程术语
GB 8566 计算机软件开发规范
GB 8567 计算机软件产品开发文件编制指南
2管理
2.1机构
在本游戏软件整个开发期间,必须成立软件配置管理小组负责配置管理工作。
软件配置管理人员应该根据对该游戏的具体要求,制订必要的规程和规定,以确保完全遵守本计划规定的所有要求
2.2任务
A.负责审定软件基线的建立和配置的标识
B.实施项目的配置好管理
C.组长审核配置管理活动
2.3职责
A.对有关软件配置管理的各项工作全面负责,特别要对更改建议的审批和评审负责;
B.负责监督在软件配置管理工作中认真执行软件工程规范;
C.负责检查配置更改时的质量保证措施;
D.负责实施各自的配置管理工作,并参与游戏的功能配置检查和物理配置检查;
E.用户代表负责反映用户对配置管理的要求,并协助检查各类人员对软件配置管理计划的执行情况;
F.负责审查所采用的配置管理工具、技术和方法,并负责汇总、维护和保存有关软件配置管理活动的各项记录
2.4接口控制
KeyListener:
按键控制
Runnable:
多线程
Observer:
观察者模式
2.5实现
建立软件配置管理小组:
在批准软件配置管理计划之后,立即成立软件配置管理小组。
建立各阶段的配置基线:
随着贪食蛇软件任务书的评审和批准,建立起功能基线;随着《贪食蛇游戏软件需求规格说明书》的批准,建立起指派基线;随着游戏软件的集成与系统测试的完成,建立起产品基线。
建立软件库:
在本项目所属的各个子系统的研制工作的开始,就建立起各个子系统的软件开发库,并在本项目配置管理小组的计算机上建立起有关该系统及其子系统的软件受控库。
以后在每个开发阶段的结束,建立各个子系统的新的开发库,同时把这个阶段的阶段产品送入总的软件受控库,并在各个子系统的计算机上建立软件受控库的副本。
软件受控库必须以主软件受控库为准。
当全部开发工作结束,在配置管理小组的计算机上建立起软件产品库,并在各子系统的计算机上建立软件产品库的副本
3软件配置管理活动
3.1配置标识
标题:
贪食蛇(SnakeGame)
版本号:
SG1.0
3.1.1基线
版本:
“SG1.0”
3.1.2代码,文档
GreedSnake:
添加一个观察者,开始游戏,多线程
SnakeControl:
监听处理,对按键进行监听并产生行为
SnakeModel:
游戏模板,包括初始化蛇,对食物的初始化,分数规则等
SnakeView:
游戏视图,游戏的界面处理
四、设计规格说明书
完成人:
xx
1.引言(Introduction)
本章对该文档的目的、功能范围、术语、相关文档、参考资料等进行说明
1.1目的(Purpose)
目的旨在推动软件工程的规范化,使设计人员遵循统一的概要设计书写规范,节省制作文档的时间,降低系统实现的风险,做到系统设计的规范性与全面性,以利于系统的实现、测试、维护、升级等
1.2命名规则(NamingRule)
变量对象命名规则:
申明全局变量、局部变量对象的命名规则。
数据库对象命名规则:
申明数据库表名、字段名、索引名、视图名等对象的命名规则。
1.3参考资料(References)
1.Java从入门到精通魔乐科技(MLDN)软件实训中心 编著/2010-04-01/人民邮电出版社
2.Java编程思想(第4版)2007-06-01/机械工业出版社
3.轻量级JavaEE企业应用实战(第3版)李刚编著/2012-04-01/电子工业出版社
4.疯狂Java讲义(第2版)李刚 编著/2012-01-01/电子工业出版社
5.Java语言程序设计:
基础篇(第8版)(美)梁勇 著,李娜 译/2011-06-01/机械工业出版社
6.EffectiveJava中文版(第2版)(美)布洛克 著,杨春花,俞黎敏 机械工业出版社
1.4相关文档(RelatedDocuments)
源程序
GreedSnake:
主体类
publicclassGreedSnake{
publicstaticvoidmain(String[]args){
SnakeModelmodel=newSnakeModel(20,30);
SnakeControlcontrol=newSnakeControl(model);
SnakeViewview=newSnakeView(model,control);
//添加一个观察者,让view成为model的观察者
model.addObserver(view);
(newThread(model)).start();
}
}
SnakeControl:
控制类
importjava.awt.event.KeyEvent;
importjava.awt.event.KeyListener;
publicclassSnakeControlimplementsKeyListener{
SnakeModelmodel;
publicSnakeControl(SnakeModelmodel){
this.model=model;
}
publicvoidkeyPressed(KeyEvente){
intkeyCode=e.getKeyCode();
if(model.running){//运行状态下,处理的按键
switch(keyCode){
caseKeyEvent.VK_UP:
model.changeDirection(SnakeModel.UP);
break;
caseKeyEvent.VK_DOWN:
model.changeDirection(SnakeModel.DOWN);
break;
caseKeyEvent.VK_LEFT:
model.changeDirection(SnakeModel.LEFT);
break;
caseKeyEvent.VK_RIGHT:
model.changeDirection(SnakeModel.RIGHT);
break;
caseKeyEvent.VK_ADD:
caseKeyEvent.VK_PAGE_UP:
model.speedUp();
break;
caseKeyEvent.VK_SUBTRACT:
caseKeyEvent.VK_PAGE_DOWN:
model.speedDown();
break;
caseKeyEvent.VK_SPACE:
caseKeyEvent.VK_P:
model.changePauseState();
break;
default:
}
}
//任何情况下处理的按键,按键导致重新启动游戏
if(keyCode==KeyEvent.VK_ENTER){
model.reset();
}
}
publicvoidkeyReleased(KeyEvente){
}
publicvoidkeyTyped(KeyEvente){
}
}
SnakeModel:
模板类
importjavax.swing.*;
importjava.util.Arrays;
importjava.util.LinkedList;
importjava.util.Observable;
importjava.util.Random;
publicclassSnakeModelextendsObservableimplementsRunnable{
boolean[][]matrix;//指示位置上有没蛇体或食物
LinkedListnodeArray=newLinkedList();//蛇体
Nodefood;
intmaxX;
intmaxY;
intdirection=2;//蛇运行的方向
booleanrunning=false;//运行状态
inttimeInterval=200;//时间间隔,毫秒
doublespeedChangeRate=0.75;//每次得速度变化率
booleanpaused=false;//暂停标志
intscore=0;//得分
intcountMove=0;//吃到食物前移动的次数
//UPandDOWNshouldbeeven
//RIGHTandLEFTshouldbeodd
publicstaticfinalintUP=2;
publicstaticfinalintDOWN=4;
publicstaticfinalintLEFT=1;
publicstaticfinalintRIGHT=3;
publicSnakeModel(intmaxX,intmaxY){
this.maxX=maxX;
this.maxY=maxY;
reset();
}
publicvoidreset(){
direction=SnakeModel.UP;//蛇运行的方向
timeInterval=200;//时间间隔,毫秒
paused=false;//暂停标志
score=0;//得分
countMove=0;//吃到食物前移动的次数
//initialmatirx,全部清0
matrix=newboolean[maxX][];
for(inti=0;imatrix[i]=newboolean[maxY];
Arrays.fill(matrix[i],false);
}
//initialthesnake
//初始化蛇体,如果横向位置超过20个,长度为10,否则为横向位置的一半
intinitArrayLength=maxX>20?
10:
maxX/2;
nodeArray.clear();
for(inti=0;iintx=maxX/2+i;//maxX被初始化为20
inty=maxY/2;//maxY被初始化为30
//nodeArray[x,y]:
[10,15]-[11,15]-[12,15]~~[20,15]
//默认的运行方向向上,所以游戏一开始nodeArray就变为:
//[10,14]-[10,15]-[11,15]-[12,15]~~[19,15]
nodeArray.addLast(newNode(x,y));
matrix[x][y]=true;
}
//创建食物
food=createFood();
matrix[food.x][food.y]=true;
}
publicvoidchangeDirection(intnewDirection){
//改变的方向不能与原来方向同向或反向
if(direction%2!
=newDirection%2){
direction=newDirection;
}
}
/**
*运行一次
*@return
*/
publicbooleanmoveOn(){
Noden=(Node)nodeArray.getFirst();
intx=n.x;
inty=n.y;
//根据方向增减坐标值
switch(direction){
caseUP:
y--;
break;
caseDOWN:
y++;
break;
caseLEFT:
x--;
break;
caseRIGHT:
x++;
break;
}
//如果新坐标落在有效范围内,则进行处理
if((0<=x&&xif(m