1.3需求分析
站在游戏玩家的角度看待软件的需求,系统设计应该具备如下的要求:游戏画面要精美、动作处理要连贯、玩家可以在任意时间暂停和继续游戏、有保存功能,玩家可以在重新开始游戏前,选择上一次保存的游戏。
对于贪食蛇游戏,其功能概要描述如下:游戏开始后,在屏幕上出现一条小蛇,以及一些供蛇吃的水果,这些水果会定时定量的产生,玩家可以通过小键盘上的方向键控制蛇的移动[6]。蛇每吃掉一个水果后其自身长度会自动增加,同时,系统会立刻产生一个安放在随即位置的虫子。当蛇碰到墙壁、吃到虫子或蛇头接触到蛇身的某一部分,游戏就会结束。
2.系统设计
2.1游戏总体流程
该贪食蛇游戏设计可以通过两种方式开始游戏:一种直接开始,另一种是从上次保存的记录开始游戏。游戏开始后,利用方向键控制屏幕上蛇的移动,吃掉随机刷新的水果。蛇在移动过程中不得触碰到墙壁与虫子,否则游戏判输且退出游戏。游戏执行过程流程图如图1所示。
图1 游戏流程图
2.2系统模块划分
系统整体设计分为两个部分:类设计和图像处理。游戏设计中,最重要的就是算法设计和游戏显示[7]。关于方法与算法的实现都封装在类中,游戏的显示所用到的技术是图像处理技术。以下内容分别介绍贪食蛇游戏设计的两个部分。
1) 类设计:经过对游戏中可见性物体的分析,贪食蛇游戏设计归结为两个类CSnake类和BackGround类。
(1)Csnake类包含所有对于蛇的操作,比如移动、吃水果和死亡等。该类还封装蛇的结构信息及游戏算法,重点设计蛇的移动。为了使程序占用更少内存且速度更快,需要设计蛇的结构和蛇的移动算法。在速度与内存之间取得一个平衡。
(2)BackGround类提供蛇移动的场景、背景刷新、食物随机产生、虫子产生和墙的绘制都封装在这个类中。
2) 图像处理技术:在贪食蛇游戏设计中所用的图像处理技术主要有双缓冲技术和透明处理技术[8]。图像处理技术主要解决如下问题:
(1)双缓冲技术解决由于普通贴图方式在屏幕上会产生严重闪烁问题。墙的绘制主要考虑墙的位图资源是一个元素,程序设计把这个元素填充在墙所在的区域。
(2)背景贴图用到GDI相关技术:利用相关函数和算法能够实现蛇、水果和虫子在屏幕上的显示。
3.详细设计
3.1 CSnake类的细化
(1)蛇的数据结构以及属性的设计:首先考虑的是如何表示整条蛇的变量,该变量的特征是一系列有序点的集合,所以在蛇的数据结构中应定义CPoint pos 表示蛇的坐标。蛇身的数据结构是点的集合。所以应该设置一个结构体,方便于存储一个节点的信息。为了便于程序的实现,该结构体中不仅存储了屏幕坐标信息,而且存储了相对应的二文表坐标信息。有了单个点的结构以后就可以用它来定义蛇头和蛇身。在这里,蛇身使用数组结构体表示。用snakeSize表示蛇的长度。在游戏中,蛇头的朝向有四个方向,对于不用方向的处理在程序中解决,这里不再单独作为一个属性。
(2)蛇的移动操作:蛇身的移动,也就是蛇的数据结构点集的移动。蛇移动的过程中,蛇头的移动的每个方向对应的结构也不相同,需要单独处理。蛇身上任意点的位置,在下一时刻会改变为其前一个点的位置。移动蛇所需要的操作是把整个数组的点集的位置整体前移一位,把蛇头的位置赋值给点集的第一个节点。
算法总体流程如下。
void CSnake::snakeMove(int direct)
{
初始化变量; VC++贪食蛇游戏的实现(2):http://www.youerw.com/jisuanji/lunwen_1708.html