java贪吃蛇设计文档.doc_第1页
java贪吃蛇设计文档.doc_第2页
java贪吃蛇设计文档.doc_第3页
java贪吃蛇设计文档.doc_第4页
java贪吃蛇设计文档.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

数据结构课程设计贪吃蛇姓名:XXXXXX学号:XXXXXX目录1 引言41.1 编写目的41.2 项目背景41.3 开发工具和语言41.4 术语说明41.4.1 数据结构41.4.2 类52 概要设计52.1 目标52.2 运行环境52.3 总体设计52.3.1 游戏设计思路52.3.2 算法中的基本概念62.3.3 游戏结构62.3.4 游戏整体流程63 数据结构设计63.1 蛇、石头、食物的表示73.2 蛇的移动73.3 存储蛇身的数据结构73.4 蛇的移动方向73.5 如何显示蛇身83.6 蛇身的移动方向83.7 吃到食物判定84 类的设计84.1 设计84.1.1 GamePanel类84.1.2 Snake类84.1.3 Food类84.1.4 Ground类94.1.5 Controller类94.1.6 Mouse类94.2 通过事件监听建立联系95 详细设计95.1 controller包95.1.1 Controller类95.2 mouse包105.2.1 Mouse类105.3 entities包105.3.1 Food类105.3.2 Ground类105.3.3 Snake类105.4 game包115.4.1 Game类115.5 listener包115.5.1 Snakelistener类115.6 util包115.6.1 Global类115.7 view包125.7.1 GamePanel类125.8 sound包125.8.1 Sound类126 UI设计121 引言 1.1 编写目的 本文档为“编程实习贪吃蛇游戏”的全程设计说明书。包括需求分析、概要设计、详细设计等方面。 本文档的预期读者为: 1、 评审小组老师 2、 项目开发小组人员 3、 与本项目相关的其他人员等 1.2 项目背景 贪吃蛇是世界知名的益智类小游戏,选择这个题目一方面的原因是为了将我们自己的所学知识加以运用;另一方面,虽然很小就接触这个游戏,但是它的制作方法对我们而言还是很神秘的。我们希望通过自己的所学知识把它剖析开来,通过自己的动手实践,真正的了解它的本质和精髓。 希望通过这次实践,我们能从中提高自己的编程能力。并从中学会从零开始分析设计程序。 1.3 开发工具和语言 本游戏的开发语言为Java。开发工具选用Eclipse。 Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。这里采用Java作为开发语言主要是基于Java的面向对象和可移植性。 Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。 1.4 术语说明 1.4.1 数据结构 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 1.4.2 类 类是 面向对象程序设计语言中的一个概念。 类(Class)实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。 类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。虽然只有一个类,但能从这个类在内存中创建多个相同类型的对象。 2 概要设计 2.1 目标 利用Java的图形化技术和多线程技术开发制作一个贪吃蛇的小游戏。 游戏中玩家可以通过键盘控制游戏中的贪吃蛇的运动,当蛇头碰到系统产生的食物时加长蛇身。当蛇碰到石头或者自己的身体时,游戏结束。游戏玩家还可以通过鼠标来控制蛇的移动。 游戏规则: 1、 玩家通过键盘控制蛇在游戏区中运动; 2、 当蛇头碰到食物时,得分增加,蛇身增长一个单位; 3、 当蛇头碰到蛇身或者石头,游戏结束; 要求实现以下功能: 玩家可以通过键盘或鼠标来控制贪吃蛇吃食物,游戏过程中还配有音效渲染气氛。2.2 运行环境 正确安装配置了JRE1.5以上的Windows和Linux的PC机都可正常运行此游戏。 2.3 总体设计 整个游戏设计工作包括:游戏设计思路、算法中的基本概念、游戏结构以及游戏整体流程。 2.3.1 游戏设计思路 贪吃蛇游戏是一款非常经典的游戏,已经有很多版本的贪吃蛇游戏,游戏的玩法各版本大体相同。以下是本课题的贪吃蛇游戏设计的一些简单的说明: 1、 先设置一个主控面板; 2、 依次向面板中添加蛇,食物,石头; 3、 设法引导贪吃蛇吞掉食物以使它变得更长; 4、 添加监听程序,通过方向键来改变蛇的运动方向;5、 添加监听程序,通过鼠标来改变蛇的运动方向; 6、 蛇不能吃到石头或是自己的身体,如果吃到石头或者自己的身体,游戏结束; 7、 蛇吃食物或者死掉的时候都有特定的音效产生。2.3.2 算法中的基本概念 节:一条蛇可以看成由许多圆拼凑成,把它称作节。节是贪吃蛇身上最小的单位。 坐标系:坐标以左上角那点为(0,0),向右则x 递增,向下则y 递增。 链表:用来保存每一节的状态,链表的第一个元素表示蛇的头部结点。 2.3.3 游戏结构 该游戏采用面向对象的设计模式,赋予游戏中的所有物体对象的概念和属性。运行程序后允许用户使用鼠标对贪吃蛇进行控制。在主程序运行的线程中,画面刷新将以一定的频率对屏幕重绘,实时反映整个游戏的进行状态。 为了实现贪吃蛇游戏的上述各种功能,就要对游戏程序进行结构设计,游戏主要包括六个类,分别是:Controller类,Food类,Ground类,Snake类,GamePanel类以及Mouse类。这六个类完全依照面向对象的设计原则,这都是游戏中的对象。 游戏开始后先绘制屏幕,并将各个对象实例化。在主程序运行的线程中,游戏中所有的对象都应该运行在同一个线程下。在屏幕重绘的主程序中,将在每次的循环中判断若干事件,以便程序进入相关的分支执行相关的反应代码。如:贪吃蛇的更新,食物的更新,屏幕上相关信息的绘制等。程序为需要完成独立功能的模块设置了单独的类。 2.3.4 游戏整体流程 这个游戏流程图描述了整个游戏的总体运行过程。在开始游戏后对蛇与食物重绘,以及屏幕上的相关信息绘制。当蛇碰到石头或是咬到自己,就捕捉异常,游戏就结束。3 数据结构设计 3.1 蛇、石头、食物的表示 我们可以把显示区域想象成一个大大的表格,里面的格子就是组成蛇的基本单位,一个格子可以代表一个食物,也可以代表一个石头,几块连在一起的石头就可以代表一条蛇。使用坐标来区分这些格子。 这里我们用一个集合来存储这些坐标,并且要求能够区分出蛇头和蛇尾。 3.2 蛇的移动 蛇向前移动一步,可以看作是蛇头前面增加了一个节点,蛇的尾巴上少了一个节点(即去尾,加头) 3.3 存储蛇身的数据结构 由于要区分蛇头和蛇尾,因此这个数据结构必须是有序的。 另一方面,我们需要经常的访问第一个和最后一个节点,所以LinkedList最合适。因为它有getFirst(),getLast(),和removeLast()方法。 3.4 蛇的移动方向 这里讨论蛇的移动方向控制。 蛇下一步移动到哪里,是由方向来控制的。 这里我们用int型常量来表示蛇的移动方向。 因为我们是根据原蛇头的坐标和方向来确定新蛇头的坐标。在原坐标的基础上,根据蛇头的运动方向来确定新蛇头的坐标,比如向上移动就是y-1. 3.5 如何显示蛇身 显示蛇身,其实就是填充用颜色填充格子。 需要4个参数,像素坐标x,像素坐标y,格子宽度,格子高度。 像素坐标就是矩形左上角的坐标 3.6 蛇身的移动方向 3.6.1 相反方向 和上一次移动的方向相反的方向称为相反方向,这种输入应该忽略。这样可以防止蛇从自己的身体中穿过。 3.6.2 无效方向 在蛇的这一次移动之后和下一次移动之前这个时间间隔内输入了多个非相反方向,只有最后一个是有效方向,其他的都是无效方向。 蛇的最终运动方向以有效方向为准。 3.7 吃到食物判定 这里通过判定坐标是否重合来判断,只需要判断蛇头是否和食物重合就可以了,因为蛇的身体都是走蛇头走过的地方。4 类的设计 4.1 设计 4.1.1 GamePanel类 游戏的显示面板,主要有显示的方法。 4.1.2 Snake类 贪吃蛇的身体,包含移动,改变方向,吃掉食物,判定是否吃到身体,显示等方法。 4.1.3 Food类 食物类,包含蛇是否吃到食物,显示等方法 4.1.4 Ground类 这里可以称作石头,主要有蛇是否吃到石头,显示等方法。 4.1.5 Controller类 Controller主要用来处理按键事件和处理逻辑。4.1.6 Mouse类Mouse主要用来处理鼠标事件。4.2 通过事件监听建立联系 这些类自己主要通过事件监听来互相联系 5 详细设计 游戏主要有以下几个包及包中的类组成。 5.1 controller包 5.1.1 Controller类 该类包含控制器和处理按键逻辑 控制器,控制Ground, Snake, Food.负责游戏的逻辑.处理按键事件 实现了SnakeListener接口的snakeMoved()方法, 可以处理Snake 触发的事件该类继承KeyAdapter类并且覆盖keyPressed()方法:处理按键事件, 根据按键不同, 发出不同的指令: UP: 改变蛇的移动方向为向上 DOWN: 改变蛇的移动方向为向下 LEFT: 改变蛇的移动方向为向左 RIGHT: 改变蛇的移动方向为向右 newGame()开始新游戏的方法5.2 mouse包 5.2.1 Mouse类 实现了SnakeListener接口以及Runnable接口, 可以处理Snake 触发的事件。继承了MouseAdapter类,并覆盖了该类的mousePressed方法。对特定像素点坐标采用网格索引的方法进行处理,使其转换为坐标xIndex = arg0.getX()/Global.CELL_SIZE;yIndex = arg0.getY()/Global.CELL_SIZE;-1: 改变蛇的移动方向为向上 1: 改变蛇的移动方向为向下 2: 改变蛇的移动方向为向左 -2: 改变蛇的移动方向为向右 5.3 entities包 5.3.1 Food类 食物, 有x , y 坐标 和 颜色等属性 可以用setColor()设置食物的颜色 方法isSnakeEatFood判断食物是否被吃运用newFood来创建新食物drawMe方法显示食物5.3.2 Ground类 可以叫做地形, 或地面 和食物一样,Ground也有x,y坐标 和 颜色等属性构造方法Ground()初始化地图,设置格局可以通过setColor()方法设置石头的颜色 方法isSnakeEatRock判断蛇是否吃到食物最后运用drawMe方法显示石头5.3.3 Snake类 本类共包含18个方法,下面一一讲述他们的功能:构造方法Snake()调用init()方法初始化蛇,并确定蛇的起始点及起始方向是向右的move()方法决定蛇怎样移动,默认支持走到边以后从另一边出现 可以用 setHeadColor() 和 setBodyColor() 方法设置蛇头或蛇身体的颜色 getHeadColor() 和 getBodyColor() 方法获得蛇头和蛇身体的颜色drawHead(Graphics, int, int, int, int)和drawBody(Graphics, int, int, int, int) 方法显示蛇头和蛇身体的颜色drawMe()调用drawHead(Graphics, int, int, int, int)和drawBody(Graphics, int, int, int, int) 方法来显示蛇getOldDirection()得到蛇头结点的老方向 getHead()得到蛇头结点,以便与食物坐标相比较isEatBody()返回蛇是否吃到自己的身体eatFood()吃食物的方法,吃到食物身体变长并伴有音效产生changeDirection()蛇改变方向的方法,通过传进来的参数来改变蛇的方向addSnakeListener()添加监听程序die()蛇死,并伴有特定音效产生,最后结束该进程start() 方法内部开启一个新的线程驱动蛇定时移动, 调用这个方法的时候要注意蛇的身体的初始长度必须大于等于2 用内部类SnakeDriver 驱动蛇定时移动 5.4 game包 5.4.1 Game类 主控类,游戏的整体框架。 5.5 listener包 5.5.1 Snakelistener类 蛇的监听器 snakeMoved(Snake snake)。5.6 util包 5.6.1 Global类 工具类。 此类中存放了其他

温馨提示

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

评论

0/150

提交评论