毕业论文-基于分支限界法的连连看局域网对战游戏的开发【完稿】 35371.docx

上传人:韩长文 文档编号:3940842 上传时间:2019-10-10 格式:DOCX 页数:60 大小:2.04MB
返回 下载 相关 举报
毕业论文-基于分支限界法的连连看局域网对战游戏的开发【完稿】 35371.docx_第1页
第1页 / 共60页
毕业论文-基于分支限界法的连连看局域网对战游戏的开发【完稿】 35371.docx_第2页
第2页 / 共60页
毕业论文-基于分支限界法的连连看局域网对战游戏的开发【完稿】 35371.docx_第3页
第3页 / 共60页
毕业论文-基于分支限界法的连连看局域网对战游戏的开发【完稿】 35371.docx_第4页
第4页 / 共60页
毕业论文-基于分支限界法的连连看局域网对战游戏的开发【完稿】 35371.docx_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《毕业论文-基于分支限界法的连连看局域网对战游戏的开发【完稿】 35371.docx》由会员分享,可在线阅读,更多相关《毕业论文-基于分支限界法的连连看局域网对战游戏的开发【完稿】 35371.docx(60页珍藏版)》请在三一文库上搜索。

1、本科毕业论文(设计)题 目基于分支限界法的连连看局域网对战游戏的开发作 者学 院信息科学与工程学院专 业计算机科学与技术学 号指导教师二一三年五月十五日摘 要分支限界法是一种广泛使用的状态空间搜索算法,这种算法常以广度优先或以最小耗费(最大效益)优先的方式来搜索问题的状态空间,在搜索过程中,利用剪枝来提高搜索效率,分支限界法与回溯法、A*算法等常用于游戏中的“寻路”过程。面向对象(Object-oriented,OO)开发方法是目前业界推崇的软件开发方法,使用面向对象开发方法能更好地适应当前的需求变化,容易实现软件复用性、可维护性、可修改性和可扩充性。连连看游戏是一种简单但不失趣味性的大众游戏

2、,具有一定的数学性和动态性,而将普通的传统单机游戏扩充为局域网上的多人对战游戏,能使传统游戏更具备对抗性和刺激性。本文研究以面向对象技术为主要开发方法,以分支限界法作为两张游戏牌的寻路算法,将传统的连连看单机游戏扩充为局域网上的双人对战游戏,重点阐述了分支限界法与面相对象开发思想在连连看局域网对战游戏中的应用。程序开发出来后,不仅正确实现了相关的功能和性能,而且具有良好的稳定性、可维护性和可扩充性,证明了分支限界法和面向对象技术在在连连看局域网对战游戏开发中的可行性。关键词:状态空间; 分支限界法; 连连看; 面向对象; 套接字AbstractBranch and bound method i

3、s an algorithm that used widely in state-space search. This algorithm based on breadth-first or with the way (maximum benefit) in favor of smallest cost to search the problem in State space . During the search ,pruning is used to improve the search efficiency . The branch and bound method , the back

4、track method ,and the A* algorithm is commonly used in the games of path finding process.Object-oriented (Object-oriented, OO) development methods are industry respected software development methods. Object-oriented development methods can better adapt to change in demand, easy to implement software

5、 reusability, maintainability, Modifiability, and scalability.Lianliankan games is a simple yet fun popular games, with a certain mathematical and dynamical .while the expansion of the common traditional games for multiplayer fighting game on the LAN, make the traditional game have a confrontational

6、 and provocative. This articles research use the object-oriented technology as the main development methods and take the branch and bound method as two game pathfinding algorithms. The traditional lianliankan games expanded into a double play against the game on the LAN ,focused on the application o

7、f branch and bound method and the object-oriented development methods in the LAN battle game. The developed program not only implement the functionality and performance properly, but also has good stability, maintainability and scalability. It proves that the bound method and object-oriented technol

8、ogy is feasible in the multiplayer fighting game on the LAN.Keywords: state space; Branch bound algorithm; Lianliankan game; object-oriented; Socket目录摘要IAbstractII插图索引VI附表索引VII第1章 概述11.1 连连看游戏简介11.2 状态空间搜索简介21.3 面向对象方法简介31.4 论文内容与结构4第2章 面向对象分析与设计52.1 用例图建模52.1.1 用例建模与用例图的概念52.1.2 游戏的用例图52.1.3 用例说明62

9、.2 活动图建模92.2.1 活动图的概念92.2.2 游戏的活动图92.2.3 开发工具的选择112.3 状态图建模122.3.1 状态图的概念122.3.2 游戏牌对象的状态图122.3.3 棋盘对象的状态图132.4 对象交互建模132.4.1 交互建模与顺序图的概念132.4.2 程序结构介绍132.4.3 “选中游戏牌”过程的顺序图142.5 类图建模172.5.1 类图的相关概念172.5.2 游戏的类关系图172.5.3 游戏牌类的设计182.5.4 棋盘类的设计192.5.5 绘图器类的设计202.5.6 控制器类的设计212.5.7 客户套接字类的设计222.5.8 监听套接

10、字类的设计222.5.9 服务套接字类的设计232.5.10 游戏主对话框类的设计232.6 小结24第3章 算法设计253.1 状态空间搜索算法简介253.1.1 穷举搜索法简介253.1.2 回溯法简介253.1.3 分支限界法简介263.1.4 A*算法简介273.1.5 遗传算法简介293.2 游戏寻路算法的分支限界过程设计313.3 游戏其他过程的算法设计333.3.1 找出一对能消去的游戏牌的算法设计333.3.2 游戏牌重新排列的算法设计333.3.3 随机发牌的算法设计343.3.4 处理选中游戏牌的算法设计353.3.5 服务端套接字处理数据包的算法设计363.3.6 客户端

11、套接字处理数据包的算法设计373.4 小结38第4章 面向对象实现394.1 面向对象编程概述394.2 使用MFC编程404.3 双缓冲绘图404.4 Socket套接字编程424.5 运行结果434.6 小结44结论45参考文献47致谢48 插图索引图1.1 传统连连看游戏运行界面2图1.2 仅3个物品的0-1背包问题的状态空间树3图2.1 局域网对战模式用例图6图2.2 单人游戏模式活动图10图2.3 局域网对战模式活动图11图2.4 游戏牌对象的状态图13图2.5 棋盘对象的状态图13图2.6 系统模块结构图14图2.7 单人游戏模式下的处理一次鼠标点击事件的顺序图15图2.8 单人游

12、戏模式每隔1秒的扣时操作的顺序图15图2.9 双人对战模式下的处理一次鼠标点击事件的顺序图16图2.10 双人对战模式每隔1秒的扣时操作的顺序图16图2.11 客户端套接字处理接收到的数据包的顺序图17图2.12 游戏的类关系图18图2.13 CCard类的设计19图2.14 CBoard类的设计20图2.15 CDraw类的设计21图2.16 CControl类的设计22图2.17 CClientSocket类的设计22图2.18 CListenSocket类的设计23图2.19 CServerSocket类的设计23图2.20 CCardGameDlg类的设计23图3.1 遗传算法基本流程

13、图30图4.1 直接绘图与双缓冲绘图41图4.2 Socket通信示意42图4.3 连连看局域网双人对战游戏画面43图4.4“局域网连接设置”对话框44 附表索引表2.1 “进行单人游戏”用例的用例描述6表2.2 “进行局域网双人对战游戏”用例的用例描述7表2.3 “设置局域网连接”用例的用例描述8表2.4 游戏的开发平台12表2.5 游戏的运行平台12 概述1.1 连连看游戏简介电脑游戏在人类的发展史中一直扮演着极其重要的角色,尤其是在工作日趋紧张、经济不断发展的现代社会中,电脑游戏已经不是传统意义中孩子的专利。伴着游戏产业日益壮大,现代人类日常生活中经常用游戏来休闲娱乐,游戏市场有很大的潜

14、力,很多国家都对游戏市场十分重视。游戏大致分为两大类,即单机游戏(Console Game)和网络游戏(Online Game)。所谓单机游戏指仅使用一台计算机或者其它游戏平台就可以独立运行的电子游戏。如Windows操作系统自带的纸牌、扫雷等小游戏程序,这一类游戏操作简单,难度比较低,对硬件的环境要求不高。而网络游戏又称 “在线游戏”,简称“网游”。指以互联网为传输媒介,以游戏运营商服务器和用户计算机为处理终端,以游戏客户端软件为信息交互窗口的旨在实现娱乐、休闲、交流和取得虚拟成就的具有可持续性的个体性多人在线游戏。连连看游戏就是很经典的小游戏。连连看来源于街机游戏“四川麻将”和“中国龙”,

15、是给一堆图案中的相同图案进行配对的简单游戏,2003年,一个叫做朱俊的网友将这种形式搬到了PC上,立刻成为办公一族的新宠,并迅速传遍了世界各地1。饱受工作压力的人们没有太多的时间进行复杂的游戏,而对于这种动动鼠标就能过关的游戏情有独钟。之后村子的连连看风靡版,阿达的连连看奥运版,连连看反恐版,还有敏敏连连看,水晶连连看等遍地开花,造就了一个连连看的新世界。连连看游戏规则简单,在一个摆放了游戏牌的棋盘内,只要将相同花色的两个游戏牌用三根以内的直线连在一起就可以消除,在规定的时间内消除了棋盘内的所有游戏牌,即可获得游戏胜利,否则游戏失败。连连看游戏并没有绚烂的画面和庞大的场景,操作简单,对硬件和环

16、境要求不高,但是却变化无穷,容易上手,男女皆宜,节奏很快,令人上瘾。适度游戏,不仅能增强思维能力,提高智力,锻炼眼力,还能起到健脑益智的效果。局域网连连看对战这样的智力游戏也被人们所接受,从而连连看从棋盘也走向了网络,局域网连连看对战不限制地点的模式深受连连看爱好者的喜爱。连连看游戏上手极其简单,但是要熟练地掌握其中的操作与图案消除技巧,难度却不低,其普及程度也是非常高。连连看游戏很快成为家喻户晓的大众游戏之一,也成为电脑游戏发展史上的一个经典。由于连连看游戏具有的数学性、动态性与知名度,也经常拿来作为程序设计的练习题材。传统的连连看游戏的最初运行界面如图1.1所示。图1.1 传统连连看游戏运

17、行界面1.2 状态空间搜索简介状态是指在系统中决定系统状态的最小数目的变量的有序集合。而所谓状态空间也叫做解空间,是指该系统的全部可能状态的集合2。状态空间搜索就是通过在状态空间中的初始状态出发,按照一定的顺序和条件对空间中的状态进行遍历,最终找到目标状态2。由于求解问题的过程中分枝有很多,主要是求解过程中求解条件的不确定性,不完备性造成的,使得求解的路径很多这就构成了一个图,称为状态空间。问题的求解实际上就是在这个图中找到一条路径可以从开始到结果。这个寻找的过程就是状态空间搜索。状态空间搜索广泛应用于优化问题中,如经典的“0-1背包问题”、“旅行商问题”、“迷宫问题”、“最大团问题”、“n皇

18、后问题”等,在计算机求解的过程中,都需要进行状态空间搜索。状态空间至少包含问题的一个最优解。如对于有n种可选物品的0-1背包问题,其解空间由长度为n的0-1向量组成,该解空间包含了对变量所有可能的0-1赋值。如当n=3时,其解空间为(0,0,0), (0,0,1), (0,1,0), (0,1,1), (1,0,0), (1,0,1), (1,1,0), (1,1,1),这个解空间可以用一颗完全二叉树来表示,如图1.2所示。可以把解空间看作树或者图的形式,叶节点表示一个可能的解,从根节点到叶节点的任一路径表示解空间的一个元素。图1.2 仅3个物品的0-1背包问题的状态空间树1.3 面向对象方法

19、简介随着软件形式化方法及新型软件的开发,传统的软件工程方法的局限性逐渐暴露出来3,4。传统的软件工程方法是面向过程的,将数据和处理过程分离,增加了软件开发的难度。由于问题空间与解空间的模型、描述方式的不同,它们之间存在着复杂的转换过程,尤其对于复杂系统及普遍存在的需求变化,就更难适应。同时,传统的软件工程方法难于支持软件复用。面向对象的方法则是将软件系统看作一系列离散的解空间对象的集合,并使问题空间的对象与解空间对象尽量一致,这些解空间对象相互之间发送消息而相互作用,从而获得问题空间的解3,4。这样,问题空间与解空间的结构、描述的模型十分一致,减少了软件系统开发的复杂度,使系统易于理解和维护。

20、如果是按照以下4个概念设计和实现的系统,称为是面向对象的,即:面向对象=对象+类+继承+通信3,4。面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。面向对象程序设计的一些显著的特性包括3,4:1程序设计的重点在于数据而不是过程;2程序被划分为所谓的对象;3数据结构为表现对象的特性而设计;4函数作为对某个对象数据的操作,与数据结构紧密的结合在一起;5重要数据被隐藏起来,不能为外部函数访问;6对象之间可以通过函数沟通;7新的数据和函数可以在需要的时候轻而易举的添加进来;8在程序设计过程中遵循由下至上(bottom-up)的设计方

21、法。 1.4 论文内容与结构本章为第1章,即绪论部分,本章之后,各章安排如下。第2章,标题为“面向对象分析与设计”,阐述待开发的连连看游戏的面向对象分析与设计过程,包括用例建模、活动图建模、对象状态建模、对象交互建模、类图建模,并详细介绍了游戏中类的设计。第3章,标题为“算法设计”,重点阐述分支限界法对两张游戏牌进行“寻路”的算法,来判断两张游戏牌能否消去,同时给出了自动找出一对能消去的游戏牌、游戏牌重新排列、随机发牌、处理选中游戏牌、服务端套接字处理数据包、客户端套接字处理数据包等主要过程的算法设计。第4章,标题为“面向对象实现”,阐述待开发的连连看游戏的面向对象实现过程,并给出编程时使用到

22、的具体技术,如:Windows GDI双缓冲、Socket套接字编程。结论部分,总结开发出来的连连看游戏系统的特点,并论证面向对象方法和分支限界算法思想在连连看游戏开发的可行性,并分析了开发出的连连看游戏的优势和不足。 面向对象分析与设计2.1 用例图建模2.1.1 用例建模与用例图的概念用例建模是用于描述一个系统的功能(即系统应该做什么)的建模技术,用例建模不仅用于获取新系统的客户需求,还可以作为对已有系统进行升级时的指南。建立用例模型的目的是为了寻找需求规约,需要通过开发者和客户之间进行多次交互完成。用例模型(Use Case Model)4是表达系统外部事物(执行者)与系统之间交互的可视

23、化工具。一个系统的用例模型由若干用例图组成,主要用于需求分析阶段,它的建立是系统开发者和用户反复讨论的结果,表明了开发者和用户对需求规格说明达成的共识。用例模型驱动了需求分析之后各阶段的开发工作,不仅在开发过程中保证了系统所有功能的实现,而且被用于验证和检测所开发的系统,从而影响到开发工作的各个阶段。用例图的主要成分有用例、执行者和系统,它用简单的图符准确地描述了执行者与系统的交互情况以及系统的功能。在用例模型中,功能以用例来表示,每个用例指明了一个完整的功能。系统由若干用例组成,系统的边界定义了一个系统所具有功能。通过执行者与系统中的用例进行交互,具体描述系统是如何提供这些功能来完成相应的服

24、务的4。用例模型的步骤包括4,5:定义系统,寻找执行者和用例,描述用例,定义用例之间的关系,最后确认模型。用例图(Use Case Diagram)4,5描述了各种外部执行者与系统所提供的用例(use case)之间的连接。在用例图中标识用例名和执行者名,用例图中使用连线描述执行者和用例之间的关系。用例与用例之间也可以发生联系通过它们之间的连线表示,并在连线附近用文字描述联系的内容。执行者(actor)4,5是指在系统外部与系统交互的人或其他系统,他以某种方式参与系统内用例的执行。“与系统交互”是指执行者向系统发送消息,或从系统那里接收消息,或与系统交换信息。2.1.2 游戏的用例图待开发的连

25、连看局域网对战游戏系统,支持单人游戏,也支持在一台机器上或者局域网不同的两台机器上最多有两个玩家同时游戏,但这两个玩家的性质完全相同,因此处于系统边界之外的参与者只有一个,就是玩家。而系统需要提供单人游戏模式、局域网双人对战模式,这显然是处于系统内。玩家通过选择游戏模式,与“进行单人游戏”用例、“进行局域网双人对战”用例这两个用例进行交互。在进行局域网双人对战时,首先要设置局域网连接,因此“局域网连接”用例应作为“局域网双人对战”用例的扩展用例。连连看局域网对战游戏的用例图,如图2.1所示。图2.1 连连看局域网对战游戏用例图2.1.3 用例说明获得用例图后,至少要给出于执行着直接关联的类的描

26、述。下面将给出“进行单人游戏”用例、“进行局域网双人对战游戏”用例、“设置局域网连接”用例的用例,与其有关联的扩展用例和包含用例、子用例将会在这三个用例中一并描述。“进行单人游戏”用例的用例描述如表2.1所示。表2.1 “进行单人游戏”用例的用例描述名称描述用例名称进行单人游戏执行者玩家目的在单价模式下进行游戏类型基本的、主要的过程描述1选择“游戏”菜单中的“开始单人游戏”选项,启动开始单人游戏。2在棋盘内除了最上方和最下方两行,最左边和最右边一列,其余每一个位置随机摆一张花色的游戏牌,每一种花色的游戏牌出现的次数必须是偶数,并且满足存在一对能够消去的游戏牌(花色相同、存在一条拐弯次数不超过2

27、的路径),启动计时器的秒数,游戏开始。3每隔1秒钟,计时器自动减1,如果时间耗尽,转14;4如果玩家用鼠标选中一张游戏牌,转5,否则转3;5搜索玩家上一次选中的并且未消去的游戏牌,如果不存在玩家上一次选中的并且未消去的游戏牌,转12,否则,转6;6如果玩家当前选中的游戏牌和上次选中的并且未消去的游戏牌不是同一张游戏牌,转7;否则,转13;7判断当前选中的游戏牌和上次选中的并且未消去的游戏牌能否消去,如果不能,转8,如果能,转9;8将玩家上一次选中的并且未消去的游戏牌取消选中,将当前选中的游戏牌指为选中状态,并罚时4秒钟,转3;9将当前选中的游戏牌指为选中状态,消去这一对游戏牌,并加时2秒钟,转

28、11;10如果棋盘内所有的游戏牌都被消去,转15,否则,转14;11如果不存在一对能够消去的游戏牌,则在原有位置重新摆放未消去的游戏牌,直到存在一对能够消去的游戏牌,转3;12将当前选中的游戏牌置为选中状态,转3;13将上一次选中的并且未消去的游戏牌置为未选中状态,转3;14游戏失败,则给出相应的失败信息提示,转16;15游戏胜利,则给出相应的胜利信息提示;16游戏结束。“进行局域网双人对战游戏”用例的用例描述如表2.2所示。表2.2 “进行局域网双人对战游戏”用例的用例描述名称描述用例名称进行局域网双人对战游戏执行者玩家目的在局域网双人对战模式下进行游戏类型主要的过程描述1玩家选择作为同时作

29、为服务端和客户端,还是仅作为客户端。如果是同时作为服务端和客户端的玩家,转2,否则转3;2服务端启动局域网对战模式,设置创建监听,等待客户端连接,如果客户端连接上服务端,转4;3客户端启动局域网对战模式,进行连接服务端的操作,等待服务端启动游戏;4服务端启动游戏,在棋盘内除了最上方和最下方两行,最左边和最右边一列,其余每一个位置随机摆一张花色的游戏牌,每一种花色的游戏牌出现的次数必须是偶数,并且满足存在一对能够消去的游戏牌(花色相同、存在一条拐弯次数不超过2的路径),启动计时器的秒数,游戏开始;5每隔1秒钟,计时器自动减1,如果时间耗尽,转14;6对每个玩家,执行下述步骤:7如果某一个玩家用鼠

30、标选中一张游戏牌,转8;8搜索玩家上一次选中的并且未消去的游戏牌,如果不存在玩家上一次选中的并且未消去的游戏牌,并将当前状态通过数据包发送给服务端,服务端将该玩家的状态再通过数据包转发给其他玩家;转9,否则转10;9将当前选中的游戏牌置为选中状态,转5;10如果玩家当前选中的游戏牌和上次选中的并且未消去的游戏牌不是同一张游戏牌,如果不是转11,否则转12;11判断当前选中的游戏牌和上次选中的并且未消去的游戏牌能否消去,如果不能,转13,如果能,转14;12将上一次选中的并且未消去的游戏牌置为未选中状态,并将当前状态通过数据包发送给服务端,服务端将该玩家的状态再通过数据包转发给其他玩家,转5;1

31、3将玩家上一次选中的并且未消去的游戏牌取消选中,将当前选中的游戏牌指为选中状态,并罚时4秒钟,并将当前状态通过数据包发送给服务端,服务端将该玩家的状态再通过数据包转发给其他玩家;转5;14将当前选中的游戏牌指为选中状态,消去这一对游戏牌,并加时2秒钟,并将当前状态通过数据包发送给服务端,服务端将该玩家的状态再通过数据包转发给其他玩家,转16;15如果棋盘内所有的游戏牌都被消去,转18,否则转17;16如果不存在一对能够消去的游戏牌,则在原有位置重新摆放未消去的游戏牌,直到存在一对能够消去的游戏牌,转5;17游戏失败,则给出相应的失败信息提示,并将当前状态通过数据包发送给服务端,服务端将该玩家的

32、状态再通过数据包转发给其他玩家;转19;18游戏胜利,则给出相应的胜利信息提示,并将当前状态通过数据包发送给服务端,服务端将该玩家的状态再通过数据包转发给其他玩家;19游戏结束。“设置局域网连接”用例的用例描述如表2.3所示。表2.3 “设置局域网连接”用例的用例描述名称描述用例名称设置局域网连接执行者玩家目的设置局域网双人对战模式下的局域网连接类型主要的、基本的过程描述1玩家输入名称,选择将当前系统既作为整个游戏的服务端又作为自己的客户端,还是仅作为客户端,如果当前系统既作为服务端又作为客户端,转2,否则转8;2输入端口号;3创建监听,等到客户端连接;4将自己同时作为客户端,连接本机的服务端

33、;5等待另一玩家客户端的连接;6如果监测到另一玩家的客户端的连接请求,转7,否则转5;7如果包含自己在内的连接数已经超过2个,则拒绝该客户端的连接;8接受另一玩家的客户端的连接请求,并发送数据包给对方玩家,转13;9输入需要连接的服务端的IP地址和端口号;10发送连接请求给服务端;11等待服务端响应;12如果接收到服务端的响应消息,给出连接成功提示,转13,否则转11;13操作结束2.2 活动图建模2.2.1 活动图的概念活动图是系统动态行为建模的图形工具之一,用来表示完成一个操作所需求的活动,或者是一个用例实例(场景)的活动4,5。活动图实际上也是一种流程图,它描述活动的序列,即系统从一个活

34、动到另一个活动的控制流,与流程图不同的是,活动图还可以描述系统的并发处理4,5。用圆角矩形框表示在工作流程中执行某个活动或步骤,即活动。用带箭头的实线表示各种活动状态的先后顺序,即迁移。迁移的开始端点,即活动图的起始点称为起始活动,其本身无活动。活动图的终止点,即活动图的最后活动称为结束活动,本身无活动。条件判定,与程序设计语言中条件分支相似,它是一个转折点,通常是一个条件表达式,活动转移根据满足条件的方向进行转移,空心菱形表示条件判定。2.2.2 游戏的活动图连连看局域网对战游戏系统根据其业务逻辑来看,提供了单人游戏模式和局域网双人对战模式。玩家可以根据个人喜好来选择游戏模式。玩家可随时选择

35、开始单人游戏,在局域网双人对战游戏中,有且只有服务器端有选择可以开始游戏的权利,而客服端只能等待游戏开始。结合之前的用例描述,分析游戏系统的业务流程,得出了连连看局域网对战游戏系统的活动图。单人游戏模式下的活动图,如图2.2所示。图2.2 单人游戏模式活动图局域网双人对战游戏模式下的活动图,如图2.3所示。图2.3 局域网对战模式活动图2.2.3 开发工具的选择在软件开发行业中,各种可视化程序设计工具和编译平台如:Visual C+、Visual C#、Delphi、C+Builder、Java等都是当今的主流。然而,鉴于对连连看局域网对战游戏涉及的技术细节并不是十分复杂的考虑,以及该程序设计

36、需要直接调用Windows API的情况比较多,编程在面向对象程序设计工具的支持下要具有一定的灵活性,最终要达到比较高的执行效率,因此,本游戏选择使用Visual C+ 2010进行开发。此次开发的连连看局域网对战游戏程序,既没有涉及到数据库,也没有涉及到中间件等环境。系统的开发平台和运行平台,分别如表2.4和表2.5所示。显然,软件的运行平台对硬件的要求要低于开发平台。表2.4 游戏的开发平台软硬件最低要求CPU1.730GHz内存2G 以上DDR内存硬盘160G,5400转以上硬盘显示设备1024*768分辨率以上操作系统Windows 7简体中文旗舰版32位开发平台Visual Stud

37、io 2010(含Visual C+ 2010)其他工具Office2010(含Word、Visio等组件)表2.5 游戏的运行平台软硬件最低要求CPU1GHz内存512 以上DDR内存,如使用Windows Vista/2008/7系统则需要1G内存硬盘80G,5400转以上硬盘显示设备1024*768分辨率以上操作系统Windows XP/2003/Vista/2008/72.3 状态图建模2.3.1 状态图的概念一个类的对象的各种状态以及这些状态的迁移组成一个状态图。描述状态图的图符元素除了图符和迁移图符外,还有起始状态(用实心圆表示)、结束状态(用一个圆中间套实心圆表示)、条件判定(用

38、空心菱形表示)、发出信号(用一个一侧为凸尖角的矩形表示)、接收信号(用一个一侧为凹尖角的矩形表示)和并发(用一条粗短实线表示)等各种图符元素4,5。2.3.2 游戏牌对象的状态图经过分析,可以得出,此次开发的连连看局域网对战游戏程序的核心部分是游戏牌对象。游戏牌对象的状态,包括“选中”、“未选中”、“清除”3个状态。因此,得到其游戏牌对象的状态图,如图2.4所示:图2.4 游戏牌对象的状态图2.3.3 棋盘对象的状态图在本次开发设计中,棋盘对象的状态包括:绘制棋盘和清除棋盘内游戏牌等状态。因此,得到棋盘对象的状态图如图2.4所示:图2.5 棋盘对象的状态图2.4 对象交互建模2.4.1 交互建

39、模与顺序图的概念一次交互就是指在特定语境中,为了实现某一个目标,而在一组对象之间进行交换的一组消息所表示的行为。在待开发的系统中,对象都是通过传递消息进行交互的。因此在设计系统时,就免不了对交互进行建模,并用交互图展现出来。交互图是用来描述对象之间以及对象参与者之间的动态协作关系和协作过程中行为次序的图形文档。它通常用来描述一个用例的行为,显示该用例中所涉及的对象和这些对象之间的消息传递情况。交互图定义了四种图,即:顺序图、通信图、时间图和交互概览图。本文选择用顺序图对交互进行建模。顺序图是一种强调消息时间顺序的交互图,着重描述对象按照时间顺序的消息交换,为读者提供了控制流随着时间推移的清晰的

40、可视化轨迹。2.4.2 程序结构介绍在Web开发中,有一种常用的开发模式,被称为MVC模式(Model-View- Controller),这种模式开发的Web系统大致由模型(Model)、视图(View)和控制器(Controller)三个基本部分组成。MVC模式的优点包括:低耦合性、高重用性、可适用性、较低的生命周期成本、快速的部属、可维护性、以及有利于软件的工程化管理等。本文设计的连连看局域网双人对战游戏,虽然不涉及Web,也不涉及数据库,但是也可以吸收MVC模式的特点,从某种程度上降低了程序的复杂度,使程序结构更加直观。这里可以将棋盘对象和游戏牌对象的集合看作游戏的模型,此外,还需要编

41、写一个绘图类,绘图类的对象负责在界面上通过Windows GDI函数将棋盘及其内部的游戏牌等对象在游戏对话框绘制出来,还需要编写一个控制器类,控制器类的对象通过接收玩家的鼠标控制,改变棋盘及其游戏牌集合的某些状态,并控制绘图器对象将模型对应的对象改变后的结果,重新绘制在对话框内。待开发的连连看局域网对战游戏程序,包含游戏模式选择和游戏设置两个子系统。“游戏模式选择”子系统包含“单人游戏”、和“局域网双人对战”两个功能模块(这两个模块可以包含共同的、可以复用的子模块)。“游戏设置”子系统包含“局域网连接设置”功能模块。整个系统的模块结构图,如图2.6所示。图2.6 系统模块结构图2.4.3 “选

42、中游戏牌”过程的顺序图连连看局域网对战游戏系统根据其业务逻辑来看,提供了单人游戏模式和局域网双人对战模式。玩家可以根据个人喜好来选择游戏模式。玩家可随时选择开始单人游戏,在局域网双人对战游戏中,只有服务器端有选择可以开始游戏,而客服端只能等待游戏开始。结合之前的用例描述,分析游戏系统的业务流程,得出了连连看局域网对战游戏系统的活动图。单人游戏模式下的活动图,如图2.7所示。图2.7 单人游戏模式下的处理一次鼠标点击事件的顺序图单人游戏模式下,每隔1秒钟之后的扣时操作的顺序图如图2.8所示。图2.8 单人游戏模式每隔1秒的扣时操作的顺序图双人对战模式下的处理一次鼠标点击事件的顺序图如图2.9所示

43、。图2.9 双人对战模式下的处理一次鼠标点击事件的顺序图双人对战模式下,每隔1秒钟之后的扣时操作的顺序图如图2.10所示。图2.10 双人对战模式每隔1秒的扣时操作的顺序图双人对战模式下,客户端套接字处理接收到的数据包的顺序图,如图2.11所示。图2.11 客户端套接字处理接收到的数据包的顺序图2.5 类图建模2.5.1 类图的相关概念由UML中的类图和对象图组成的可视化模型能有效地描述一个软件系统,它具有强大的模型描述表达能力。建立类和对象模型是面向对象分析与设计方法的核心技术之一,也是面向对象技术的基本任务,是软件开发的基础4。类图由若干类的图形符号及表示其之间关系的图形符号组成。类之间的

44、关系有关联、聚集、继承、依赖、细化等。类图是系统的一种静态模型,它是其他图的基础。一个系统的类模型可以由多张类图描述,一个类也可以出现在几张类图中。类的图形符号表示分为长式和短式两种。短式图形符号由一个矩形实绩方框及在方框内书写的类名表示。长式图形符号也是由一个矩形实绩方框表示,但它用两条实绩分成3部分,上边部分书写类名,中间部分描述类的属性,下边部分描述类的操作。2.5.2 游戏的类关系图通过需求分析得到的用例模型以及活动图,可以分析得出游戏系统中所要涉及的一些基本的对象,如:游戏牌、棋盘区、控制系统、对话框(窗体)、绘图系统和数据包等。通过以上的分析,可以初步得出连连看局域网对战游戏类关系

45、图,如图2.12所示:图2.12 游戏的类关系图2.5.3 游戏牌类的设计该类主要针对m_nIndex(游戏牌序号)、m_bIsNone(是否能被清除)、m_Pos(当前位置)、Clear()(清除游戏牌)、SetPos()(设置位置)、SetIndex()(设置游戏牌序列号)、m_bSelected(游戏牌是否选中)、GetIndex()(获取游戏牌序列号)、GetPos()(获取当前位置)、IsNone()(判断是否为空)、HasPic()(将当前位置改为非空函数)、Selected()(选中游戏牌)等进行相应定义。其详细定义的相关类图如图2.13所示。图2.13 CCard类的设计2.5

46、.4 棋盘类的设计棋盘类CBoard主要针对m_nWidth(棋盘宽度)、m_nHeight(棋盘高度)、m_nTypeNum(不同类型的花色数)、m_nRemainCount(剩余游戏牌数)、m_nSpendTime(消耗的时间)、m_nLimitTime(总共时限)、Find()(路径查找)、IsEmpty()(判断当前位置是否为空)、m_GameState(游戏状态)、m_IP(IP地址)、二维数组m_ppDist(m_ppDistij表示从某个网格出发到第i行第j列的网格需要的最少拐弯数次)、m_bFind(是否存在路径)、ClearPair()(清除路径)、Exchange()(改变棋盘当前布局)、Find()(查找路径)、InMap()(判断参数表示的行列位置是否在棋盘内)、GetHeight()(获取游戏牌集合的行数,棋盘行数 = 游戏牌集合的行数 + 2)、GetWidth()(获取游戏牌列数,棋盘列数 = 游戏牌集合的列数 + 2)、GetTypeNum()(获取游戏牌花色种类)、Success()(判断是否胜利)、AddTime()(设置游戏时间)、GetGameState()(获取游戏状态)等

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1