连连看游戏-武汉理工大学visual《c++课程设计》

上传人:小** 文档编号:88217825 上传时间:2019-04-21 格式:DOC 页数:25 大小:1.41MB
返回 下载 相关 举报
连连看游戏-武汉理工大学visual《c++课程设计》_第1页
第1页 / 共25页
连连看游戏-武汉理工大学visual《c++课程设计》_第2页
第2页 / 共25页
连连看游戏-武汉理工大学visual《c++课程设计》_第3页
第3页 / 共25页
连连看游戏-武汉理工大学visual《c++课程设计》_第4页
第4页 / 共25页
连连看游戏-武汉理工大学visual《c++课程设计》_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《连连看游戏-武汉理工大学visual《c++课程设计》》由会员分享,可在线阅读,更多相关《连连看游戏-武汉理工大学visual《c++课程设计》(25页珍藏版)》请在金锄头文库上搜索。

1、武汉理工大学C+课程设计 1 目 录 连连看游戏2 1.引言2 1.1 游戏介绍 2 1.2 目的 2 1.3 主要问题 3 1.4 开发环境 3 2需求分析.3 3.功能模块的设计4 3.1 类设计 4 3.2.框架的搭建4 4算法分析与设计.6 4.1 游戏地图数据设计 6 4.2 数据的初始化工作 7 5 . 核心算法8 5.1 图案方块的连接判断 8 5.2 游戏胜利的判断 .16 5.3 鼠标交互功能的实现 .17 6.绘图功能的实现.21 6.1 位图图像的准备 .21 6.2 绘图方案的设计 .21 6.3 绘图资源的载入与初始化 .21 总结.24 参考文献.24 武汉理工大学

2、C+课程设计 2 连连看游戏连连看游戏 摘要:摘要:本文用 visual c+来设计与实现简单的连连看游戏的基本功能,玩家 可以在游戏区域中通过键盘控制来选取相同的两个物件,采用特定的消除规则 对它们进行消除的操作,当游戏区域中的所有方块对都被消除后玩家即可胜利。 文章对该游戏的算法以及游戏图案的绘制进行详细的介绍。实现起来较简单, 同时也比较实用。 关键词:关键词: 连连看 , vc ,游戏 Abstract: In this paper, we, using visual C+, design and implement the basic functions of Linking gam

3、e. Players can control the game through the keyboard to select the same two objects in the user interface , then eliminate the same two objects using specific rules . Finally the players win while all the squares in the user interface have been eliminated. The article describes algorithms of the gam

4、es and drawing the design in detail. It is simply to carry out the game which is practical. Key words: Linking up , vc , game 1.1.引言引言 1.11.1 游戏介绍游戏介绍 连连看来源于街机游戏四川麻将和中国龙,是给一堆图案中的相 同图案进行配对的简单游戏,在 2003 年,一个叫做朱俊的网友将这种形式搬到 了 PC 上,立刻成为办公一族的新宠,并迅速传遍了世界各地。饱受工作压力的 人们没有太多的时间进行复杂的游戏,而对于这种动动鼠标就能过关的游戏情 有独钟。之后村子

5、的连连看风靡版,阿达的连连看奥运版,连连看反恐版,还 有敏敏连连看,水晶连连看等遍地开花,造就了一个连连看的新世界。连连看 游戏有多种地图样式和道具系统、大大加强了游戏的可玩性,是一款老少皆宜 的休闲佳品。 1.21.2 目的目的 网络小游戏制作的目的是满足了人们休闲的需要,在紧张工作之余休闲类 的小游戏能够给人带来最大程度的放松,也可以增进人们之间的交流,沟通, 武汉理工大学C+课程设计 3 通过游戏还可以认识更多的朋友,也可以到达跨省、跨市,甚至跨国间人们互 相娱乐的目的。 另外也通过本程序将三年来所学的专业知识和其他方面的知识融入到实际 应用中。 1.31.3 主要问题主要问题 开始制作

6、游戏时,主要要解决的问题有以下几个方面:如何设置整个游戏 的界面;如何控制连连看游戏中随机图片的生成且每种图片必须为偶数个;游 戏开始后,判断鼠标两次点击的图片能否消去,即图片是否相同且图片之间路 径的判断. 1.41.4 开发环境开发环境 Intel Pentium 4 2.0GHz,512M 内存,80G 硬盘 Microsoft Windows 2000 Professional Microsoft Visual C+ 6.0 2 2需求分析需求分析 关于连连看的功能描述如下:运行游戏并进行初始化工作,将整个游 戏区域分成纵向和横向扩展的若干个小方块,并且这些小方块是由多种动物 图案成对

7、地分布于游戏区域的不同位置。玩家可以通过选取相同的两个物件 来对它们进行消除的操作,直到将游戏区域中的所有方块对都被消除后为胜 利。 游戏的整体运行效果如图 1.1。 武汉理工大学C+课程设计 4 图 1.1 3.3.功能模块的设计功能模块的设计 3.13.1 类设计类设计 这个游戏的主要类是游戏模式类,类名为 CLinkToLinkDlg。这个类主 要对包括图案方块的销毁判断,游戏胜利判断以及整个游戏用户交换功能的 实现。它 uml 图如下: CLinkToLinkDlg m_mem3DBkDC :CDC m_mem3DBkBmp :CBitmap m_memAnimalDC :CDC m_

8、memAnimalBmp :CBitmap m_MemDC :CDC m_memBitmap : CBitmap m_map : int m_nRow : int m_nCol : int m_nX1 : int m_nY1 : int GameDraw(CDC * pDC) : void StartNewGame() : void IsLink(int x1,int y1,int x2,int y2) : BOOL IsWin(void) : BOOL X1_Link_X2(int x,int y1,int y2) : BOOL 武汉理工大学C+课程设计 5 Y1_Link_Y2(int x

9、1,int x2,int y) : BOOL 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) : BOOL XThrough(int x,int y,BOOL bAdd) : BOOL LineX(int x,int y1,int y2) : BOOL LineY(int x1,int x2,int y) : BOOL 这些成员函数和成员变量的算法分析与设计以及核心算法中有详细介绍

10、。 3.2.3.2.框架的搭建框架的搭建 从图 1.1 可以看出,整个运行的界面很简单,没有菜单栏,只有游戏区域 的图形显示,因此,只需要用对话框模板的方式去搭建整个框架即可。首先, 创建一个基于对话框模板的项目 LinkToLink,如图 1.2 所示。 图 1.2 在创建过程的第一步“MFC 应用程序向导 步骤 1”中应该选择 “基本对话框”选项,确保应用程序的创建是对话框模板,如图 1.3 所示。 武汉理工大学C+课程设计 6 图 1.3 4 4算法分析与设计算法分析与设计 在对算法进行分析前,应先抽象出游戏的基本是具结构,而对连连看游戏 来说,核心的部分应该是整个游戏区域的地图数据。那

11、么,下面将分析游戏特 性,然后设计出标识地图的数据结构。 4.14.1 游戏地图数据设计游戏地图数据设计 对于整个游戏区域,可以把它看作一个是由若干个小方块构成的地图,而 且每一个小方块放置着不同的动物图案,可将其称之为图案小方块。这些图案 小方块零散地分布在地图的不同位置区域,并且每一个图案小方块都有与其对 应的完全一样的另外一个小方块,如图 1.4 所示。 武汉理工大学C+课程设计 7 图 1.4 如图 1.4 所示,整个游戏游戏区域被抽象成一个有坐标位置属性的平面, 平面上零散地分布着若干个小方块,并且这些小方块的物种起码是成对出现的。 经过前面的描述和分析后,可以把游戏区域地图用一个数

12、组 m_map 来表示。 m_map 是把地图设计成一个动态分配的 int 整形一维数组,对地图中的行列数 的表达,用一个转换法则即可。可以在 LinkToLinkDlg 类对象定义中添加地图 核心数据的成员变量,具体如下: /地图位置相关属性组 int*m_map; /动态地图数据头指针(一维数组) intm_nRow; /地图的行数(虚拟) intm_nCol; /地图的列数(虚拟) 上面的成员变量中定义了一个整形指针标量 m_map,用于记录动态分配 出来的一维数组地图空间的首地址。对于地图区域中的某个小方块的类型,可 以用一个整形的 ID 来进行识别。这里为标识地图的行列位置分别添加

13、m_nRow 和 m_nCol 变量。 现在,地图的数据结构已经设计好。下面对游戏进行初始化。由于方块需 要成对地出现,因此在做地图的初始化时,不仅仅是对动物种类做简单的随机 取数,然后将该随机选取出来的物件放到地图区域中去就了事,而是需要成对 地对物种进行成对选取,就是说地图中的小方块必须是偶数个。 前面提到过,把地图数组设置成动态分配方式,目的是让其数据空间可以 根据行列数的需求动态地获取,而对于实际不同大小比例的地图可以预先定义 几组关于行列数的宏来实现。当需要创建时,根据宏值的不同分配不同大小的 地图空间即可。接下来在 LinkToLinkDlg 类的构造函数对地图数据进行相关的 初始

14、化: #define ROWCOUNT 8/行数 #define COLCOUNT 12/列数 CLinkToLinkDlg:CLinkToLinkDlg(CWnd* pParent /*=NULL*/) : CDialog(CLinkToLinkDlg:IDD, pParent) /初始化行列数 m_nRow=ROWCOUNT; m_nCol=COLCOUNT; 武汉理工大学C+课程设计 8 /根据行列数动态分配内核数据数组空间 m_map=new intm_nRow*m_nCol; CLinkToLinkDlg:CLinkToLinkDlg() /释放动态数组空间 delete m_map

15、; 在 LinkToLinkDlg 类对象的实现中,定义了一些关于地图行列数的宏, 如 ROWCOUNT 和 COLCOUNT,并且在 LinkToLinkDlg 类对象的构造函数中, 进行了行列的真实确认赋值,并根据当前行列数的大小对地图数据空间进行动 态创建。因为地图数据是用 new 在堆栈动态创建的,所以在销毁该对象时要将 这些内存空间释放,如代码所示在 LinkToLinkDlg 类对象的析构函数中调用 delete 将 m_map 指向的所有空间都释放掉。 4.24.2 数据的初始化工作数据的初始化工作 接下来,再分配好的空间中放上适当的图案方块物件,对数据进行初始化。 即需要对地图

16、空间内的数据进行成对性的随机布局,因此可以将该功能的实现 封装在 StartNewGame()函数里面,其代码如下: void CLinkToLinkDlg:StartNewGame() /初始化地图,将地图中所有方块区域位置置为空方块状态 for(int iNum=0;iNumy2) /数据交换 int n=y1; y1=y2; y2=n; /直通 for(int i=y1+1;ix2) int x=x1; x1=x2; 武汉理工大学C+课程设计 13 x2=x; /直通 for(int i=x1+1;iy2) int y=y1; y1=y2; y2=y; for(int y=y1;yx2) 武汉理工大学C+课程设计 14 int x=x1; x1=x2; x2=x; for(int x=

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号