基于java的贪吃蛇开发文档.doc_第1页
基于java的贪吃蛇开发文档.doc_第2页
基于java的贪吃蛇开发文档.doc_第3页
基于java的贪吃蛇开发文档.doc_第4页
基于java的贪吃蛇开发文档.doc_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

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

文档简介

1中南林业科技大学小组软件过程实验实验报告题目: 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是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于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.轻量级Java EE企业应用实战(第3版)李刚 编著/2012-04-01/电子工业出版社4.疯狂Java讲义(第2版) 李刚编著/2012-01-01/电子工业出版社5.Java语言程序设计:基础篇(第8版) (美)梁勇著,李娜译/2011-06-01/机械工业出版社6.Effective Java中文版(第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. 设备WindowsXP2.支持软件Eclipse3.接口KeyListener:监听按键,控制蛇的行动或游戏的运行;2.3.4非移交的产品测试版本:SG1.02.4验收标准可运行的完整游戏程序。2.5完成项目的最迟期限 2014.4.162.6本计划的批准者和批准日期3实施计划3.1工作任务的分解与人员分工xxxx 任务分配,程序调试,代码编写,软件开发项目总结xxx 程序调试,代码编写,计划与需求文档xx 程序调试,代码编写,设计规格说明书与软件配置管理计划xx 程序调试,代码编写,软件测试计划与软件测试分析报告3.2进度对于需求分析、设计、编码实现、测试、移交、培训和安装等工作,给出每项工作任务的预定开始日期、完成日期及所需资源,规定各项工作任务完成的先后顺序以及表征每项工作任务完成的标志性事件(即所谓“里程碑)。3.3关键问题逐项列出能够影响整个项目成败的关键问题、技术难点和风险,指出这些问题对项目的影响。4支持条件四台能正常运行eclips的计算机.二、需求规格说明书 完成人: xxx 1概述(Summary)1.1项目的目的与目标(Purpose and Aim of Project)本系统主要是完成贪吃蛇游戏的基本操作。用户可以自己练习和娱乐。本系统需要满足以下几点要求:(1) 利用方向键来改变蛇的运行方向。 (2) 空格键暂停或继续游戏,并在随机的地方产生食物。 (3) 吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。2目标系统功能需求(Function of Target System)本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的开始、暂停、退出等功能,分为:游戏主界面模块、游戏控制模块两个模块。游戏主界面模块:主要包括游戏图形区域界面、游戏开始、暂停、退出、减速、加速。游戏控制模块:主要完成游戏的开始、暂停、退出等功能。3目标系统性能需求(Performance of Target System)本游戏在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。4目标系统界面与接口需求(Interface of Target System)4.1 界面需求(Interphase Requirement)游戏主界面应该力求美观,赏心悦目。游戏控制模块应做到易懂、易操作,而且准确率高,不易出错(。4.2 接口需求(Interface Requirement)无5目标系统假设与约束条件(Suppose and Restriction of Target System)5.1. 设备WindowsXP5.2.支持软件Eclipse5.3.接口SnakeListener:Void SankeMoved(Snake); 三、软件配置管理计划完成人: xx 1.引言软件配置管理计划对于软件开发管理是非常重要的,其主要思想在于版本控制。版本控制是软件配置管理计划的核心思想之一,是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理。版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地记录下来。每一次文件的改变,文件的版本号都将增加。除了记录版本变更外,版本控制的另一个重要功能是并行开发1.目的 2D游戏贪食蛇软件正常运行,记录游戏运行时的各种状态,如:加速、减速、重新开始以及暂停1.2 定义和缩写词本计划中用到的一些术语的定义按GB/T11457和GB/T125041.3 参考资料GB/T11457软件工程术语GB8566计算机软件开发规范GB8567计算机软件产品开发文件编制指南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 配置标识标题:贪食蛇(Snake Game)版本号:SG1.03.1.1 基线版本:“SG1.0”3.1.2 代码,文档GreedSnake:添加一个观察者,开始游戏,多线程SnakeControl:监听处理,对按键进行监听并产生行为SnakeModel:游戏模板,包括初始化蛇,对食物的初始化,分数规则等SnakeView:游戏视图,游戏的界面处理四、设计规格说明书完成人: xx 1引言(Introduction)本章对该文档的目的、功能范围、术语、相关文档、参考资料等进行说明1.1 目的(Purpose)目的旨在推动软件工程的规范化,使设计人员遵循统一的概要设计书写规范,节省制作文档的时间,降低系统实现的风险,做到系统设计的规范性与全面性,以利于系统的实现、测试、维护、升级等1.2 命名规则(Naming Rule)变量对象命名规则:申明全局变量、局部变量对象的命名规则。数据库对象命名规则:申明数据库表名、字段名、索引名、视图名等对象的命名规则。1.3 参考资料(References)1.Java从入门到精通 魔乐科技(MLDN)软件实训中心编著/2010-04-01/人民邮电出版社2.Java编程思想(第4版) 2007-06-01/机械工业出版社3.轻量级Java EE企业应用实战(第3版)李刚 编著/2012-04-01/电子工业出版社4.疯狂Java讲义(第2版) 李刚编著/2012-01-01/电子工业出版社5.Java语言程序设计:基础篇(第8版) (美)梁勇著,李娜译/2011-06-01/机械工业出版社6.Effective Java中文版(第2版) (美)布洛克著,杨春花,俞黎敏机械工业出版社1.4 相关文档(Related Documents)源程序GreedSnake:主体类public class GreedSnake public static void main(String args) SnakeModel model = new SnakeModel(20,30); SnakeControl control = new SnakeControl(model); SnakeView view = new SnakeView(model,control); /添加一个观察者,让view成为model的观察者 model.addObserver(view); (new Thread(model).start(); SnakeControl:控制类import java.awt.event.KeyEvent;import java.awt.event.KeyListener;public class SnakeControl implements KeyListener SnakeModel model;public SnakeControl(SnakeModel model) this.model = model;public void keyPressed(KeyEvent e) int keyCode = e.getKeyCode();if (model.running) / 运行状态下,处理的按键switch (keyCode) case KeyEvent.VK_UP:model.changeDirection(SnakeModel.UP);break;case KeyEvent.VK_DOWN:model.changeDirection(SnakeModel.DOWN);break;case KeyEvent.VK_LEFT:model.changeDirection(SnakeModel.LEFT);break;case KeyEvent.VK_RIGHT:model.changeDirection(SnakeModel.RIGHT);break;case KeyEvent.VK_ADD:case KeyEvent.VK_PAGE_UP:model.speedUp();break;case KeyEvent.VK_SUBTRACT:case KeyEvent.VK_PAGE_DOWN:model.speedDown();break;case KeyEvent.VK_SPACE:case KeyEvent.VK_P:model.changePauseState();break;default:/ 任何情况下处理的按键,按键导致重新启动游戏if (keyCode = KeyEvent.VK_ENTER) model.reset();public void keyReleased(KeyEvent e) public void keyTyped(KeyEvent e) SnakeModel:模板类import javax.swing.*;import java.util.Arrays;import java.util.LinkedList;import java.util.Observable;import java.util.Random;public class SnakeModel extends Observable implements Runnable boolean matrix; / 指示位置上有没蛇体或食物 LinkedList nodeArray = new LinkedList(); / 蛇体 Node food; int maxX; int maxY; int direction = 2; / 蛇运行的方向 boolean running = false; / 运行状态 int timeInterval = 200; / 时间间隔,毫秒 double speedChangeRate = 0.75; / 每次得速度变化率 boolean paused = false; / 暂停标志 int score = 0; / 得分 int countMove = 0; / 吃到食物前移动的次数 / UP and DOWN should be even / RIGHT and LEFT should be odd public static final int UP = 2; public static final int DOWN = 4; public static final int LEFT = 1; public static final int RIGHT = 3; public SnakeModel( int maxX, int maxY) this.maxX = maxX; this.maxY = maxY; reset(); public void reset() direction = SnakeModel.UP; / 蛇运行的方向 timeInterval = 200; / 时间间隔,毫秒 paused = false; / 暂停标志 score = 0; / 得分 countMove = 0; / 吃到食物前移动的次数 / initial matirx, 全部清0 matrix = new booleanmaxX; for (int i = 0; i 20 ? 10 : maxX / 2; nodeArray.clear(); for (int i = 0; i initArrayLength; +i) int x = maxX / 2 + i;/maxX被初始化为20 int y = maxY / 2; /maxY被初始化为30 /nodeArrayx,y: 10,15-11,15-12,1520,15 /默认的运行方向向上,所以游戏一开始nodeArray就变为: / 10,14-10,15-11,15-12,1519,15 nodeArray.addLast(new Node(x, y); matrixxy = true; / 创建食物 food = createFood(); matrixfood.xfood.y = true; public void changeDirection(int newDirection) / 改变的方向不能与原来方向同向或反向 if (direction % 2 != newDirection % 2) direction = newDirection; /* * 运行一次 * return */ public boolean moveOn() Node n = (Node) nodeArray.getFirst(); int x = n.x; int y = n.y; / 根据方向增减坐标值 switch (direction) case UP: y-; break; case DOWN: y+; break; case LEFT: x-; break; case RIGHT: x+; break; / 如果新坐标落在有效范围内,则进行处理 if (0 = x & x maxX) & (0 = y & y 0 ? scoreGet : 10; countMove = 0; food = createFood(); / 创建新的食物 matrixfood.xfood.y = true; / 设置食物所在位置 return true; else / 吃到蛇体自身,失败 return false; else / 如果新坐标的点上没有东西(蛇体),移动蛇体 nodeArray.addFirst(new Node(x, y); matrixxy = true; n = (Node) nodeArray.removeLast(); matrixn.xn.y = false; countMove+; return true; return false; / 触到边线,失败 public void run() running = true; while (running) try Thread.sleep(timeInterval); catch (Exception e) break; if (!paused) if (moveOn() setChanged(); / Model通知View数据已经更新 notifyObservers(); else int result=JOptionPane.showConfirmDialog(null, OH,你死啦,需要重新開始么?, Game Over, JOptionPane.OK_CANCEL_OPTION); if(result=0) reset(); else break; running = false; private Node createFood() int x = 0; int y = 0; / 随机获取一个有效区域内的与蛇体和食物不重叠的位置 do Random r = new Random(); x = r.nextInt(maxX); y = r.nextInt(maxY); while (matrixxy); return new Node(x, y); public void speedUp() timeInterval *= speedChangeRate; public void speedDown() timeInterval /= speedChangeRate; public void changePauseState() paused = !paused; public String toString() String result = ; for (int i = 0; i nodeArray.size(); +i) Node n = (Node) nodeArray.get(i); result += + n.x + , + n.y + ; return result; class Node int x; int y; Node(int x, int y) this.x = x; this.y = y; SnakeView:视图类import javax.swing.*;import java.awt.*;import java.util.Iterator;import java.util.LinkedList;import java.util.Observable;import java.util.Observer;public class SnakeView implements Observer SnakeControl control = null; SnakeModel model = null; JFrame mainFrame; Canvas paintCanvas; JLabel labelScore; public static final int canvasWidth = 200; public static final int canvasHeight = 300; public static final int nodeWidth = 10; public static final int nodeHeight = 10; public SnakeView(SnakeModel model, SnakeControl control) this.model = model; this.control = control; mainFrame = new JFrame(GreedSnake); mainFrame.setLocation(600, 200); Container cp = mainFrame.getContentPane(); / 创建顶部的分数显示 labelScore = new JLabel(得分:); cp.add(labelScore, BorderLayout.NORTH); / 创建中间的游戏显示区域 paintCanvas = new Canvas(); paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1); paintCanvas.addKeyListener(control); cp.add(paintCanvas, BorderLayout.CENTER); / 创建底下的帮助栏 JPanel panelButtom = new JPanel(); panelButtom.setLayout(new BorderLayout(); JLabel labelHelp; labelHelp = new JLabel(PageUp:加速, PageDown:减速, JLabel.LEFT); panelButtom.add(labelHelp, BorderLayout.NORTH); labelHelp = new JLabel(ENTER:重新开始, JLabel.LEFT); panelButtom.add(labelHelp, BorderLayout.CENTER); labelHelp = new JLabel(SPACE:暂停, JLabel.LEFT); panelButtom.add(labelHelp, BorderLayout.SOUTH); cp.add(panelButtom, BorderLayout.SOUTH); mainFrame.addKeyListener(control); mainFrame.pack(); mainFrame.setResizable(false); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainFrame.setVisible(true); void repaint() Graphics g = paintCanvas.getGraphics(); /draw background g.setColor(Color.WHITE); g.fillRect(0, 0, canvasWidth, canvasHeight); / draw the snake g.setColor(Color.BLACK); LinkedList na = model.nodeArray; Iterator it = na.iterator(); while (it.hasNext() Node n = (Node) it.next(); drawNode(g, n); / draw the food g.setColor(Color.RED); Node n = model.food; drawNode(g, n); updateScore(); private void drawNode(Graphics g, Node n) g.fillRect(n.x * nodeWidth, n.y * nodeHeight, nodeWidth - 1, nodeHeight - 1); public void updateScore() String s = 得分: + model.score; labelScore.setText(s); public void update(Observable o, Object arg) repaint(); 2系统设计(Design of Collective)2.1 体系结构设计(Design of Architecture)采用包图画出体统的体系结构模型,然后进行扩展,画出个子系统内构成及模块之间的关系。2.2 模块设计(Module Design)对象类用类图说明各个类属性和方法以及类之间的关系,对于复杂对象要画出状态图。2.3 功能模块清单(Module List)模块(类)清单表3-3 模块清单模 块 编 号模块英文名模块功能简述模块的接口简述M 1-1GreedSnake主体类,添加一个观察者,开始游戏无M 2-1SnakeControl监听按键,对游戏控制进行处理KeyListener:按键的监听M 2-2SnakeModel游戏基础的定义,例如蛇的初始化,食物的初始化,分数初始化等Runnable:多线程M 2-3SnakeView游戏视图,对游戏的窗口样式进行定义,规划Observer:观察者模式五、软件测试计划 完成人: xx 1引言1.1编写目的本测试计划文档作为指导此测试项目循序渐进的基础,帮助我们安排合适的资源和进度,避免可能的风险。本文档有助于实现以下目标:1) 确定现有项目的信息和应测试的软件结构。2) 列出推荐的测试需求3) 推荐可采用的测试策略,并对这些策略加以详细说明4) 确定所需的资源,并对测试的工作量进行估计。5) 列出测试项目的可交付元素,包括用例以及测试报告等。1.2背景软件系统名称:贪吃蛇游戏该开发项目的历史:蛇引诱夏娃吃了苹果之后,就被贬为毒虫,阴险的象征。 而蛇吃东西是整只动物吞进去的,大概在文艺复兴的时候就有人

温馨提示

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

评论

0/150

提交评论