logo资料库

大连大学嵌入式期末大作业.doc

第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
资料共16页,剩余部分请下载后查看
一、系统分析与总体设计
1、选题的意义
2、需求分析
3、总体设计
二、系统的详细设计
1、图案方块的连接判断
三、系统实现与调试
1、 鼠标交互功能的实现
2、绘图功能的实现
2.1绘图方案的设计
2.2绘图资源的载入与初始化
2.3 游戏区域的绘制
四、系统运行的结果
总结
1 《嵌入式高级编程》 ————连连看游戏程序 姓 名: 专业班级: 计科 111 学 号: 任课教师: 王明军 日 期:2014 年 6 月 20 号 1
2 目 录 一、系统分析与总体设计........................................................................................................ 3 1、选题的意义 .................................................................................................................. 3 2、需求分析...................................................................................................................... 3 3、总体设计...................................................................................................................... 4 二、系统的详细设计................................................................................................................ 7 1、图案方块的连接判断 .................................................................................................. 7 三、系统实现与调试.............................................................................................................. 11 1、 鼠标交互功能的实现.............................................................................................. 11 2、绘图功能的实现 ........................................................................................................ 12 2.1 绘图方案的设计 ........................................................................................................ 12 2.2 绘图资源的载入与初始化 ........................................................................................12 2.3 游戏区域的绘制....................................................................................................... 13 四、系统运行的结果.............................................................................................................. 14 总结 ...........................................................................................................................................16 2
3 一、系统分析与总体设计 1、选题的意义 连连看来源于街机游戏《四川麻将》和《中国龙》,是给一堆图案中的相同图案进行配对的 简单游戏,在 2003 年,一个叫做朱俊的网友将这种形式搬到了 PC 上,立刻成为办公一族 的新宠,并迅速传遍了世界各地。饱受工作压力的人们没有太多的时间进行复杂的游戏,而 对于这种动动鼠标就能过关的游戏情有独钟。之后村子的连连看风靡版,阿达的连连看奥运 版,连连看反恐版,还有敏敏连连看,水晶连连看等遍地开花,造就了一个连连看的新世界。 连连看游戏有多种地图样式和道具系统、大大加强了游戏的可玩性,是一款老少皆宜的休闲 佳品。网络小游戏制作的目的是满足了人们休闲的需要,在紧张工作之余休闲类的小游戏能 够给人带来最大程度的放松,也可以增进人们之间的交流,沟通,通过游戏还可以认识更多 的朋友,也可以到达跨省、跨市,甚至跨国间人们互相娱乐的目的。 2、需求分析 关于连连看的功能描述如下:运行游戏并进行初始化工作,将整个游戏区域分成纵向和横 向扩展的若干个小方块,并且这些小方块是由多种动物图案成对地分布于游戏区域的不同位 置。玩家可以通过选取相同的两个物件来对它们进行消除的操作,直到将游戏区域中的所有 方块对都被消除后为胜利 图 1.1 运行的初始效果 3
4 3、总体设计 3.1 系统的开发环境 Intel® Pentium® 4 2.0GHz,512M 内存,500G 硬盘 Microsoft® Windows™ 2000 Professional WCE 3.2 系统总体功能,系统的结构,模块图、每个功能的详细说明 3.2.1 类设计 这个游戏的主要类是游戏模式类,类名为 PocketLianDlg。这个类主要对包括图案方块 的销毁判断,游戏胜利判断以及整个游戏用户交换功能的实现。它 uml 图如下 :CDC :CDC : BOOL int int int int int :CBitmap :CDC CLinkToLinkDlg m_mem3DBkDC m_mem3DBkBmp m_memAnimalDC m_memAnimalBmp :CBitmap m_MemDC m_memBitmap : CBitmap m_map : m_nRow : m_nCol : : m_nX1 m_nY1 : GameDraw(CDC * pDC) : void StartNewGame() : void IsLink(int x1,int y1,int x2,int y2) : BOOL IsWin(void) X1_Link_X2(int x,int y1,int y2) Y1_Link_Y2(int x1,int x2,int y) OneCornerLink(int x1,int y1,int x2,int y2) : BOOL TwoCornerLink(int x1,int y1,int x2,int y2) : BOOL YThrough(int x,int y,BOOL bAdd) XThrough(int x,int y,BOOL bAdd) LineX(int x,int y1,int y2) LineY(int x1,int x2,int y) BOOL : : BOOL : BOOL : BOOL : : BOOL BOOL 这些成员函数和成员变量的算法分析与设计以及核心算法中有详细介绍 3.2.2 游戏地图设计 对于整个游戏区域,可以把它看作一个是由若干个小方块构成的地图,而且每一 个小方块放置着不同的动物图案,可将其称之为图案小方块。这些图案小方块零 散地分布在地图的不同位置区域,并且每一个图案小方块都有与其对应的完全一 样的另外一个小方块,如图 1.4 所示。 4
5 如图 1.2 所示,整个游戏游戏区域被抽象成一个有坐标位置属性的平面,平面上 零散地分布着若干个小方块,并且这些小方块的物种起码是成对出现的。经过前 面的描述和分析后,可以把游戏区域地图用一个数组 m_map 来表示。m_map 是 把地图设计成一个动态分配的 int 整形一维数组,对地图中的行列数的表达,用 一个转换法则即可。可以在 LinkToLinkDlg 类对象定义中添加地图核心数据的成 员变量,具体如下: //地图位置相关属性组 int* m_map; int int m_nRow; m_nCol; //动态地图数据头指针(一维数组) //地图的行数(虚拟) //地图的列数(虚拟) 上面的成员变量中定义了一个整形指针标量 m_map,用于记录动态分配出 来的一维数组地图空间的首地址。对于地图区域中的某个小方块的类型,可以用 一个整形的 ID 来进行识别。这里为标识地图的行列位置分别添加 m_nRow 和 m_nCol 变量。 现在,地图的数据结构已经设计好。下面对游戏进行初始化。由于方块需 要成对地出现,因此在做地图的初始化时,不仅仅是对动物种类做简单的随机取 数,然后将该随机选取出来的物件放到地图区域中去就了事,而是需要成对地对 物种进行成对选取,就是说地图中的小方块必须是偶数个。 前面提到过,把地图数组设置成动态分配方式,目的是让其数据空间可以 根据行列数的需求动态地获取,而对于实际不同大小比例的地图可以预先定义几 组关于行列数的宏来实现。当需要创建时,根据宏值的不同分配不同大小的地图 空间即可。接下来在 LinkToLinkDlg 类的构造函数对地图数据进行相关的初始化: 8 12 //行数 //列数 #define ROWCOUNT #define COLCOUNT ...... CLinkToLinkDlg::CLinkToLinkDlg(CWnd* pParent /*=NULL*/) : CDialog(CLinkToLinkDlg::IDD, pParent) {…… //初始化行列数 m_nRow=ROWCOUNT; m_nCol=COLCOUNT; //根据行列数动态分配内核数据数组空间 m_map=new int[m_nRow*m_nCol]; 5
} CLinkToLinkDlg::~CLinkToLinkDlg() { //释放动态数组空间 delete[] m_map; } 在 LinkToLinkDlg 类对象的实现中,定义了一些关于地图行列数的宏,如 ROWCOUNT 和 COLCOUNT,并且在 LinkToLinkDlg 类对象的构造函数中,进 行了行列的真实确认赋值,并根据当前行列数的大小对地图数据空间进行动态创 建。因为地图数据是用 new 在堆栈动态创建的,所以在销毁该对象时要将这些 内存空间释放,如代码所示在 LinkToLinkDlg 类对象的析构函数中调用 delete 将 m_map 指向的所有空间都释放掉。 3.2.3 数据的初始化工作 接下来,再分配好的空间中放上适当的图案方块物件,对数据进行初始化。 即需要对地图空间内的数据进行成对性的随机布局,因此可以将该功能的实现封 装在 StartNewGame()函数里面,其代码如下: 6 6 void CLinkToLinkDlg::StartNewGame() { //初始化地图,将地图中所有方块区域位置置为空方块状态 for(int iNum=0;iNum<(m_nCol*m_nRow);iNum++) { m_map[iNum] = BLANK_STATE; } //部下随机种子 srand(time(NULL)); //生成随机地图 //将所有匹配成对的动物物种放进一个临时的地图中 CDWordArray tmpMap; for(int i=0;i<(m_nCol*m_nRow)/6;i++) for(int j=0;j<6;j++) tmpMap.Add(i); //每次从上面的临时地图中取走(获取后并在临时地图删除) //一个动物放到地图的空方块上 for(i=0;i
} 7 在游戏进行初始化的过程中,应该先对整个地图中的各个区域做必要的初始 化操作,将它们的状态设置为 BLANK_START 空白方块状态(无动物图案方块), 关于 BLANK_START 空白方块状态的定义,跟其他动物方块的物种定义表达类 似,也是用整数 ID 来对它进行标识,不过不同的是,由于他代表该方块区域无 图案,所以这里用-1 的宏值来表示,具体定义如下: #define BLANK_STATE -1 //空方块(没有任何动物) 可以看到,对图案方块的布局,先用 srand()函数对时间函数布下随机种 子,然后调用 rand()函数对具体的图案方块的种类进行随机的获取。在这里需 要引入一个临时地图 tmpMap,该临时地图的大小与内核数据地图的大小一致, 并且先添置好 4 组完全一样的图案类型 ID 数据(0~(m_nCol*m_nRow)/4), 然后再将已经安放在 tmpMap 中的图案作随机抽取,并放到内核地图数据中去, 将取出的元素从 tmpMap 中除去。 二、系统的详细设计 1、图案方块的连接判断 对于选中的两个方块的销毁,他们必须符合下面 3 个条件: (1)选中的两个方块图案相同。 (2)选中的两个方块之间没有障碍物阻碍的情况下,可以用若干个垂直的直线 线段连接起来。 (3)这些将它们连接起来的直线线段的折点不超过两个(连接线由 x 轴和 y 轴 的平行线组成)。 现在针对(2)和(3)进行分析,如图 1.3。 如图 1.3 所示可知道,同种物件的连接方式大致可以分成以下 3 种: (1) 直接方式 (2) 有一个折点的垂直线段连接。 (3) 有两个折点的垂直线段连接.。 1. 直接连接方式 在直接连接方式中,必须要求所选定的两个方块在同一水平直线上 (可以为 x 方向或 y 方向),并且两个方块之间没有任何其他图案方块。 2.一个这点连接方式 所选定的两个方块如果通过折点的方式连接,那么对于折点来说,每个折点 必定有且至少有一个坐标(x 或 y)是和其中一个目标点相同的,即折点必定在 两个目标点所在的 x 方向或 y 方向的直线上。 此外,对于一个折点连接的情况,折点应该为第一个选中方块的横向线或纵 向线与第二个选中方块的纵向线和横向线相交而得出。 3.两个折点的连接方式 这种方式的两个折点所连成的直线与两物件的直接连线可以构成平行线,因 7
8 此可以根据这个规律,将这条水平线在游戏区域允许的条件上下移动,然后通过 判断整条带垂直折线点的曲线之间有无障碍物方式来确定是否可以连同。这种情 况可以分为两种情况: (1)选中的两图案方块在同一直线,两折点间的直连线可在其这两个方块 之间的空间位置作移动,其约束是不超过游戏边界区域。 (2)选中的两图案方块不在同一直线,两折点间的直连线可在两个方块之 间的空间位置作移动,其约束是两方块之间的区域。 经过上面详细的分析后,可以对选定的两方块是否可以作抵消操作可以这样 设计下去。 首先,对简单的直接连情况进行判断,看其是否符合条件,假如不能,再加深一 个级别的复杂度,对一个折点的情况进行判断,依次类推,如下图所示。 图 1.3 图 1.4 8
分享到:
收藏