《数据结构关于连连看游戏课程设计完整版》由会员分享,可在线阅读,更多相关《数据结构关于连连看游戏课程设计完整版(25页珍藏版)》请在金锄头文库上搜索。
1、武汉理工大学C+课程设计目 录连连看游戏21.引言21.1 游戏介绍21.2 目的21.3 主要问题31.4开发环境32需求分析33.功能模块的设计43.1 类设计43.2.框架的搭建44算法分析与设计64.1游戏地图数据设计64.2数据的初始化工作75 . 核心算法85.1图案方块的连接判断85.2 游戏胜利的判断165.3 鼠标交互功能的实现176.绘图功能的实现216.1 位图图像的准备216.2绘图方案的设计216.3绘图资源的载入与初始化21总结24参考文献24连连看游戏摘要:本文用visual c+来设计与实现简单的连连看游戏的基本功能,玩家可以在游戏区域中通过键盘控制来选取相同的
2、两个物件,采用特定的消除规则对它们进行消除的操作,当游戏区域中的所有方块对都被消除后玩家即可胜利。文章对该游戏的算法以及游戏图案的绘制进行详细的介绍。实现起来较简单,同时也比较实用。关键词: 连连看 , vc ,游戏 Abstract: In this paper, we, using visual C+, design and implement the basic functions of Linking game. Players can control the game through the keyboard to select the same two objects in the
3、 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 games and drawing the design in detail. It is simply to carry out the game which is practical
4、.Key words: Linking up , vc , game1.引言1.1 游戏介绍连连看来源于街机游戏四川麻将和中国龙,是给一堆图案中的相同图案进行配对的简单游戏,在2003年,一个叫做朱俊的网友将这种形式搬到了PC上,立刻成为办公一族的新宠,并迅速传遍了世界各地。饱受工作压力的人们没有太多的时间进行复杂的游戏,而对于这种动动鼠标就能过关的游戏情有独钟。之后村子的连连看风靡版,阿达的连连看奥运版,连连看反恐版,还有敏敏连连看,水晶连连看等遍地开花,造就了一个连连看的新世界。连连看游戏有多种地图样式和道具系统、大大加强了游戏的可玩性,是一款老少皆宜的休闲佳品。1.2 目的 网络小游戏制
5、作的目的是满足了人们休闲的需要,在紧张工作之余休闲类的小游戏能够给人带来最大程度的放松,也可以增进人们之间的交流,沟通,通过游戏还可以认识更多的朋友,也可以到达跨省、跨市,甚至跨国间人们互相娱乐的目的。 另外也通过本程序将三年来所学的专业知识和其他方面的知识融入到实际应用中。 1.3 主要问题 开始制作游戏时,主要要解决的问题有以下几个方面:如何设置整个游戏的界面;如何控制连连看游戏中随机图片的生成且每种图片必须为偶数个;游戏开始后,判断鼠标两次点击的图片能否消去,即图片是否相同且图片之间路径的判断. 1.4开发环境lIntel Pentium 4 2.0GHz,512M内存,80G硬盘lMi
6、crosoft Windows 2000 ProfessionallMicrosoft Visual C+ 6.02需求分析关于连连看的功能描述如下:运行游戏并进行初始化工作,将整个游戏区域分成纵向和横向扩展的若干个小方块,并且这些小方块是由多种动物图案成对地分布于游戏区域的不同位置。玩家可以通过选取相同的两个物件来对它们进行消除的操作,直到将游戏区域中的所有方块对都被消除后为胜利。 游戏的整体运行效果如图1.1。 图1.13.功能模块的设计3.1 类设计这个游戏的主要类是游戏模式类,类名为CLinkToLinkDlg。这个类主要对包括图案方块的销毁判断,游戏胜利判断以及整个游戏用户交换功能的
7、实现。它uml图如下:CLinkToLinkDlgm_mem3DBkDC :CDCm_mem3DBkBmp :CBitmap m_memAnimalDC :CDC m_memAnimalBmp :CBitmap m_MemDC :CDC m_memBitmap : CBitmapm_map : intm_nRow : int m_nCol : int m_nX1 : int m_nY1 : int GameDraw(CDC * pDC) : voidStartNewGame() : voidIsLink(int x1,int y1,int x2,int y2) : BOOLIsWin(void
8、) : BOOLX1_Link_X2(int x,int y1,int y2) : BOOLY1_Link_Y2(int x1,int x2,int y) : BOOLOneCornerLink(int x1,int y1,int x2,int y2) : BOOLTwoCornerLink(int x1,int y1,int x2,int y2) : BOOLYThrough(int x,int y,BOOL bAdd) : BOOLXThrough(int x,int y,BOOL bAdd) : BOOLLineX(int x,int y1,int y2) : BOOLLineY(int
9、 x1,int x2,int y) : BOOL 这些成员函数和成员变量的算法分析与设计以及核心算法中有详细介绍。3.2.框架的搭建 从图1.1可以看出,整个运行的界面很简单,没有菜单栏,只有游戏区域的图形显示,因此,只需要用对话框模板的方式去搭建整个框架即可。首先,创建一个基于对话框模板的项目LinkToLink,如图1.2所示。 图1.2 在创建过程的第一步“MFC 应用程序向导 步骤1”中应该选择“基本对话框”选项,确保应用程序的创建是对话框模板,如图1.3所示。图1.34算法分析与设计 在对算法进行分析前,应先抽象出游戏的基本是具结构,而对连连看游戏来说,核心的部分应该是整个游戏区域的
10、地图数据。那么,下面将分析游戏特性,然后设计出标识地图的数据结构。 4.1游戏地图数据设计 对于整个游戏区域,可以把它看作一个是由若干个小方块构成的地图,而且每一个小方块放置着不同的动物图案,可将其称之为图案小方块。这些图案小方块零散地分布在地图的不同位置区域,并且每一个图案小方块都有与其对应的完全一样的另外一个小方块,如图1.4所示。 图1.4 如图1.4所示,整个游戏游戏区域被抽象成一个有坐标位置属性的平面,平面上零散地分布着若干个小方块,并且这些小方块的物种起码是成对出现的。经过前面的描述和分析后,可以把游戏区域地图用一个数组m_map来表示。m_map是把地图设计成一个动态分配的int
11、整形一维数组,对地图中的行列数的表达,用一个转换法则即可。可以在LinkToLinkDlg类对象定义中添加地图核心数据的成员变量,具体如下: /地图位置相关属性组int*m_map; /动态地图数据头指针(一维数组)intm_nRow; /地图的行数(虚拟)intm_nCol; /地图的列数(虚拟)上面的成员变量中定义了一个整形指针标量m_map,用于记录动态分配出来的一维数组地图空间的首地址。对于地图区域中的某个小方块的类型,可以用一个整形的ID来进行识别。这里为标识地图的行列位置分别添加m_nRow和m_nCol变量。现在,地图的数据结构已经设计好。下面对游戏进行初始化。由于方块需要成对地
12、出现,因此在做地图的初始化时,不仅仅是对动物种类做简单的随机取数,然后将该随机选取出来的物件放到地图区域中去就了事,而是需要成对地对物种进行成对选取,就是说地图中的小方块必须是偶数个。前面提到过,把地图数组设置成动态分配方式,目的是让其数据空间可以根据行列数的需求动态地获取,而对于实际不同大小比例的地图可以预先定义几组关于行列数的宏来实现。当需要创建时,根据宏值的不同分配不同大小的地图空间即可。接下来在LinkToLinkDlg类的构造函数对地图数据进行相关的初始化:#define ROWCOUNT 8/行数#define COLCOUNT 12/列数.CLinkToLinkDlg:CLink
13、ToLinkDlg(CWnd* pParent /*=NULL*/): CDialog(CLinkToLinkDlg:IDD, pParent)/初始化行列数m_nRow=ROWCOUNT;m_nCol=COLCOUNT;/根据行列数动态分配内核数据数组空间m_map=new intm_nRow*m_nCol;CLinkToLinkDlg:CLinkToLinkDlg()/释放动态数组空间delete m_map;在LinkToLinkDlg类对象的实现中,定义了一些关于地图行列数的宏,如ROWCOUNT和COLCOUNT,并且在LinkToLinkDlg类对象的构造函数中,进行了行列的真实确
14、认赋值,并根据当前行列数的大小对地图数据空间进行动态创建。因为地图数据是用new在堆栈动态创建的,所以在销毁该对象时要将这些内存空间释放,如代码所示在LinkToLinkDlg类对象的析构函数中调用delete将m_map指向的所有空间都释放掉。4.2数据的初始化工作 接下来,再分配好的空间中放上适当的图案方块物件,对数据进行初始化。即需要对地图空间内的数据进行成对性的随机布局,因此可以将该功能的实现封装在StartNewGame()函数里面,其代码如下:void CLinkToLinkDlg:StartNewGame()/初始化地图,将地图中所有方块区域位置置为空方块状态for(int iNum=0;iNum(m_nCol*m_nRow);iNum+)m_mapiNum = BLANK_STATE;/部下随机种子srand(time(NULL);/生成随机地图/将所有匹配成对的动物物种放进一个临时的地图中CDWordArray tmpMap;for(int