基于Qt的黑白棋游戏计算机毕业设计论文.doc

上传人:来看看 文档编号:3921566 上传时间:2019-10-10 格式:DOC 页数:56 大小:682KB
返回 下载 相关 举报
基于Qt的黑白棋游戏计算机毕业设计论文.doc_第1页
第1页 / 共56页
基于Qt的黑白棋游戏计算机毕业设计论文.doc_第2页
第2页 / 共56页
基于Qt的黑白棋游戏计算机毕业设计论文.doc_第3页
第3页 / 共56页
基于Qt的黑白棋游戏计算机毕业设计论文.doc_第4页
第4页 / 共56页
基于Qt的黑白棋游戏计算机毕业设计论文.doc_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《基于Qt的黑白棋游戏计算机毕业设计论文.doc》由会员分享,可在线阅读,更多相关《基于Qt的黑白棋游戏计算机毕业设计论文.doc(56页珍藏版)》请在三一文库上搜索。

1、找毕业设计、项目源码、编程视频,就上码农网manong365基于Qt的黑白棋游戏摘 要本文主要介绍黑白棋游戏的设计与开发流程,同时讨论黑白棋设计中不同搜索算法的原理以及特点,从博弈树搜索算法的进步来反映人工智能的发展。本程序是在Linux(Ubuntu12.04LTS)环境下使用面向对象的C+语言开发。有人人对弈,人机对弈,悔棋等功能。本论文首先指出了黑白棋游戏,Qt以及计算机博弈的发展现状,然后重点介绍了Qt开发工具的使用,黑白棋程序的设计流程(包含类图、用例图、时序图的设计),规则设计,算法设计。最后介绍了Linux桌面环境GUI和计算机博弈的发展趋势。本设计通过一个棋类游戏的开发,阐述了

2、棋类游戏的开发过程,包括软件开发的逻辑分析,程序设计,软件实现和软件测试的几个步骤。关键词:黑白棋;人工智能;搜索算法;QtReversi game based on QtAbstractThis paper describes the Othello game design and development process and discussed different design principles and features of the search algorithm. From the advancement of game tree search algorithm to ref

3、lect advances in the development of artificial intelligence. This program is the use of object-oriented C + + language development under Linux (Ubuntu12.04LTS) environment. Implements the following functions, man-machine to war, multiplayer, undo, etc. In this thesis points out the development statu

4、s of Reversi game, Qt and computer game. Then focuses on the usage of Qt development tools, Othello program design process (including class diagrams, case diagram, sequence diagram design with), rules design, algorithm design. Finally, the development trend of Linux desktop environment GUI and compu

5、ter game.By developing a chess game, describes the development process of board games. Several steps including logical analysis of software development, program design, software implementation and software testing.Key words: Othello; Artificial Intelligence; Search Algorithm; Qt目录摘 要IAbstractII1 绪论1

6、1.1 前言11.2 黑白棋的发展11.2.1 黑白棋程式的发展21.2.2 游戏规则21.2.3 开局策略21.3 机器博弈与人工智能的发展概况31.3.1 机器博弈的基本思想31.3.2 机器博弈系统41.3.3 博弈搜索41.3.4 Min-Max搜索41.3.5 -剪枝搜索41.3.6 alpha-beta的增强算法介绍51.3.7 人工智能的发展状况71.4 主要研究内容81.5 相关实验环境82 工具及算法介绍92.1 Qt简介92.2 信号与槽92.3 Qt和MFC的比较92.4 核心算法介绍103 系统分析与设计123.1 黑白棋的需求分析123.1.1 用例图123.1.2

7、程序流程图133.2 模块设计133.2.1 主要模块简介133.2.2 类图143.2.3 棋盘数据结构设计153.3 设计系统的现实意义174 详细设计184.1 界面设计184.2 核心算法代码及注释205 系统测试295.1 白盒测试295.2 黑盒测试305.3 总结325.4 展望33参考文献34致谢351 绪论 1.1 前言计算机博弈(Computer Games),也称之为机器博弈,就是让计算机可以像人脑一样进行思维活动,最终可以下棋,下国际象棋、西洋跳棋、黑白棋、中国象棋、围棋等等。 早在计算机诞生的前夜,著名的数学家和计算机学家阿伦图灵(Alan Turing)便设计了一个

8、能够下国际象棋的纸上程序,并经过一步步的人为推演,实现了第一个国际象棋的程序化博弈。那些世界上最著名的科学家,如计算机创始人冯.诺依曼(John von Neumann),信息论创始人科劳德.香农(Claude E. Shannon) ,人工智能的创始人麦卡锡(John McCarthy)等人都曾涉足计算机博弈领域,并做出过非常重要的贡献。 从上世纪 40年代计算机诞生,计算机博弈经过一代又一代学者的艰苦奋斗和坎坷历程,终于在上世纪的八、九十年代,以计算机程序战胜棋类领域的天才而享誉世界。其中最为著名的则是 1997 年5 月 IBM“深蓝”战胜世界棋王卡斯帕罗夫,成为计算机科学史上一个不朽的

9、丰碑。在这之后,计算机博弈一天也没有停息过拼搏。由Science杂志评选的 2007年十大科技突破中,就还包括了加拿大阿尔波特大学的科研成果解决了西洋跳棋(Checker)博弈问题,也就是说,在西洋跳棋的博弈中计算机将永远“立于不败之地”。计算机博弈原理与方法学既涉及到博弈论(对策论)、搜索原理等理论内容,又更多地涉及到数据结构、软件工程、程序设计方法学等方面的知识。计算机博弈属于计算机科学与应用学科的研究方向之一,又是人工智能领域的重要研究方向,应该属于智能科学与技术学科的一个分支。本文着重介绍了黑白棋的设计与开发,通过介绍博弈算法与程序设计的基本流程让您对计算机博弈原理与方法以及程序设计有

10、更深入的了解。1.2 黑白棋的发展黑白棋是起源于英国19世纪末的一种棋盘类游戏,又叫反棋(Reversi)、奥塞罗棋(Othello)、苹果棋或翻转棋。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。为什么以奥塞罗棋来命名黑白棋呢?上世纪70年代日本人Goro Hasegawa借用莎士比亚名剧“奥塞罗”为黑白棋重新命名。在莎士比亚笔下的主角奥塞罗,是一位黑肤色的摩那人将军,他的妻子是一位白人贵族的女儿苔丝狄蒙娜(Desdemon),因为受到小人伊阿古(Iago)的挑拨离间,怀疑自己的妻子不忠而亲手杀死了自己的妻子。真相大白后,由于内心充满后悔和愧疚而自杀身亡。就如同奥塞罗据中男女

11、主角之间的爱恨纠葛一样,黑白棋在游戏的过程中黑子与白子必须不断翻动对手棋子,因此黑白棋就以Othello来命名。1.2.1 黑白棋程式的发展上世纪90年代初,由于计算深度和尾局的准确性,黑白棋程式的棋力已经很强。这个时期的程式由人工加入行动力、位置策略等因素,所以程式的棋力依赖于程式员本身的棋力,导致程式中存在人类棋手的弱点。这一情况在1995年左右得到了突破性的发展,程式员Michael Buro写出了能自我学习的黑白棋游戏Logistello。自此,程式员不在把人工策略写死在程式里,而是由程式自我学习,程式会纪录形状,自动调整下棋策略。具有先进算法,高效率和准确的编程,使黑白棋程式的棋力远

12、远超过人类棋手。黑白棋算法的不断改进,体现了人工智能(AI)的发展。1.2.2 游戏规则游戏开始时棋盘正中有交叉放置的四个棋子,两黑两白,黑棋总是先手。双方交替下棋。新落下的棋子与棋盘上已有同色棋子之间,被夹住得所有对方棋子都要翻转过来。且夹住位置上必须全部是对手的棋子,不能有空格。一步棋可以在数个方向上翻棋,任何被夹住得棋子必须被翻转过来。如果一方在棋盘上没有地方可以落子,则对手可以连续落子。双方都没有棋子可落时,棋局结束,棋子数目多的一方获胜。在棋盘还没有下满是,如果一方棋盘上没有棋子,则棋局结束。将对手棋子吃光的一方获胜。1.2.3 开局策略黑白棋最常见的开局策略有以下几种:最多子策略(

13、The Maximum Disc Strategy)位置权重策略(The Weighted Square Strategy)行动能力策略(The Mobility Consideration Strategy)稳定子策略(The Stability Disc Strategy)这四种开局策略各有优缺点,以下会对其简单介绍:(1)最多子策略(The Maximum Disc Strategy)此策略采用贪心算法,是最直接简单的一种策略。此策略在落子时,会判断在哪个位置落子可以造成己方棋子数目最多,即可以翻转对手棋子最多的位置,从而取得胜利。虽然使用此策略会在初期占据大量棋子并取得优势,但是占据的

14、棋子并非不会再被对手所占据的稳定子,且让对手有更多落子的位置的选择。因此很容易被对方逆转局面,失去领先地位。(2)位置权重策略(The Weighted Square Strategy)棋盘上每个位置都有各自对整个盘面变化产生的价值,因此将每个位置不同的价值作为落子时考虑的权重,如图1-1所示在角落位置(*)因为对盘面有较大的影响力,因此也就拥有比其他位置较高的权重,一旦占领角落后,不仅此位置不会被对手再占领,且将可以此位置为锚,进而占领盘面上其他的位置,所以在位置权重策略上对角落位置给予较高权重。而在盘面上C与X被赋予较低的权重,因为落子在这些位置时有可能对盘面发展状况造成不利的影响,落子在

15、C、X会让对手有机会占领角落,而让自己处于不利局面。此外在A、D位置会给予次高的权重,落子在这些位置时,将有可能让对手被迫落子在C、X位置,而陷于困境,因此A、D位置有次高权重。(3)行动能力策略(The Mobility Consideration Strategy)以合法步的数量来决定其行动能力的状态,如果是对手可下的合法步数量少得话,将会使对手无合法步可以落子发生pass,或是被迫下在不利位置(如图1-1 C、X位置)。(4)稳定子策略(The Stability Disc Strategy)落子时考虑落子的位置将会造成多少稳定子来决定该下在哪里,稳定子即无法再被对手所翻动的棋子。在上述

16、的策略中,每一种策略都有其应用的情况,也有其不足之处,所以在一盘棋局中不能只采用一种策略,最好的方式应该是在面对不同的棋局情况时采用对应的策略。 图1-1位置权重策略示意图1.3 机器博弈与人工智能的发展概况1.3.1 机器博弈的基本思想机器博弈的核心思想并不复杂,实际上就是对博弈树节点的估值过程和对博弈树搜索过程的结合。在博弈的任何一个中间阶段,站在博弈双方其中一方的立场上,可以构想一个博弈树。这个博弈树的根节点是当前时刻的棋局,它的儿子节点是假设再行棋一步以后的各种棋局,孙子节点是从儿子节点的棋局再行棋一步的各种棋局,以此类推,构造整棵博弈树,直到可以分出胜负的棋局。整棵的博弈树非常庞大,

17、且不同的棋类有所不同,分支因子大的如围棋的博弈树显然要比分支因子小的如国际象棋的博弈树要大得多。博弈程序的任务就是对博弈树进行搜索找出当前最优的一步行棋。对博弈树进行极大极小搜索,可以达到这一目的。极大极小搜索,是因为博弈双方所要达到的目的相反,一方要寻找的利益恰是一方失去的利益,所以博弈的一方总是希望下一走是儿子节点中取值最大者,而另一方恰恰相反。这便形成了极大极小过程。当然,程序不能也没有必要做到搜索整棵博弈树的所有节点,对于一些已经确定为不佳的走步可以将以它为根节点的子树剪掉。而且,搜索也不必真地进行到分出胜负的棋局,只需要在一定深度范围内对局面进行评价即可。只有搜索空间缩小到一定程度,

18、搜索才可以真正的进行。当搜索进行到一定深度,用局面评价机制来评价棋局,按照极大极小的原则选出最优,向上回溯,给出这一局面的父亲节点的价值评价,然后再继续向上回溯,一直到根节点,最优走步就是这样搜索出来的。在这个过程中,最为重要的是搜索算法,高效的搜索算法可以保证用尽量少的时间和空间损耗来达到寻找高价值的走步。但是真的想要博弈程序棋力提高,还必须有一个好的局面评价机制,即估值算法作后盾。就是说,用这个估值算法评价的局面价值必须是客观的、正确的,可以确凿的评价局面的优劣以及优劣的程度。1.3.2 机器博弈系统根据机器博弈的基本思想,可以确定一个机器博弈系统的一般构成6。首先是知识表示的问题,选用一

19、种合适的方法记录棋局。这时需要考虑在这种知识表示的数据结构之上将要进行的各种操作,知识表示应该使最经常进行的操作花费的时间和空间代价最小。其次,根据不同的棋类的不同规则集,要有一个相应的走法产生机制。它的作用是用来产生整棵博弈树,即处于博弈树的任何一个节点位置上,应该能够运用该机制产生这个节点的所有儿子节点,也就是接下来的所有合法走步。除了以上两个模块以外,就是博弈核心的搜索技术和与之配合的估值技术了。这四个部分相互配合运转起来,就可以实现机器博弈。1.3.3 博弈搜索博弈搜索的基本思想已经提出半个多世纪,目前广泛研究的是确定的、二人、零和、完备信息的博弈搜索。也就是说,没有随机因素的博弈在两

20、个人之间进行,在任何一个时刻,一方失去的利益即为另一方得到的利益,不会出现“双赢”的局面,而且在任何时刻,博弈的双方都明确的知道每一个棋子是否存在和存在于哪里。二人、零和、完备信息的博弈搜索理论已经很系统。极大极小算法是所有搜索算法的基础。在这个基础上,目前在这一领域的算法主要有两类,一类是作为主流的深度优先的alpha-beta搜索及其系列增强算法,另一类是最佳优先的系列算法。博弈搜索从搜索方向上可以分为宽度优先搜索(Breadth-first search)和深度优先搜索(Depth-first search)。前者能够保证在搜索树中找到一条通向目标节点的最短途径。但是巨大的时间和空间开销

21、使得它在计算机博弈中很少采用。深度优先搜索的最大特点就是可以节省大量的节点存储空间。因为它通常是采用递归过程来遍历搜索树,即后序遍历,得到一个节点值,就对其子节点做递归,然后根据他们的俄返回值来决定自身的返回值,搜索过的底层节点也随即撤销,因此它所占用的动态空间十分有限。1.3.4 Min-Max搜索在机器与人对弈的过程中,机器事先并不知道人的水平如何,因而机器只能假设人走的每一步都会为自己带来最小的收益,而机器走的每一步都要为自己争取最大的利益,这就是极大极小原理。如果我们把机器和人连接走的每一步画成树状结构(即博弈树),对于每一个节点,其子节点是下一步所有可能走的位置(有可能是对方走,也有

22、可能是自己走),对于叶子节点我们运用一次估值函数得到叶子的权值,之后便一直向上反推,直到得到根节点的权值。我们把每一次机器要走的节点叫做Max节点,因为这个节点的值是其子节点所有值中的最大值,而把每一个人要走的节点叫做Min节点,因为这个节点的值是其子节点所有值中的最小值。这样得到的根节点的值,就是机器走这一步期望的最大收益。1.3.5 -剪枝搜索-搜索实际上就是运用-剪枝优化后的Min-Max搜索,其基本的极大极小思想是不变的。首先引入两个变量、,表示当前节点在前面的搜索过程中,依据子节点的返回值来估计出的当前节点最后的结果的下限和上限。下面给出剪枝和剪枝的定义:1.如果当前节点是Min节点

23、,当前节点的父节点是Max节点,那么当当前节点的一个子节点的值小于当前节点的值时,那么当前节点的其余子节点就不用搜索了,这个过程称为剪枝过程。2.如果当前节点是Max节点,当前节点的父节点是Min节点,那么当当前节点的一个子节点的值大于当前节点的值时,那么当前节点的其余子节点就不用搜索了,这个过程称为剪枝过程。图1-2 Alpha剪枝示意图图1-3 Beta剪枝示意图1.3.6 alpha-beta的增强算法介绍1渴望搜索(Aspiration Search)在alpha-beta剪枝过程中,初始的的搜索窗口往往是从-(即初始的alpha值)到+(初始的beta值),在搜索进行中再不断缩小窗口

24、,加大剪枝效果。渴望搜索就是渴望从一开始就使用小的窗口,从而在搜索初起,就可以进行大量的剪枝。这个初始窗口的选定很重要,如果选择准确,即所要寻找的走步就在这个窗口内,搜索便可以继续进行。如果第一步搜索的返回值证明最佳走步大于beta值,就需要重新确定窗口。以原来的beta值为alpha值,以+为新的beta值重新搜索。相反如果第一步的返回值证明最佳走步小于alpha值,重新确定的窗口就是以-为alpha值,原来的alpha值为beta值了。可见第一次搜索猜测的窗口非常重要,如果猜测准确,搜索时间可以大大缩短,如果不准确,这一优势就不明显了。由于渴望搜索是一种基本的搜索方法,它在和后面叙述的遍历

25、深化结合使用的时候,就可以借助前一次深度为depth的搜索的结果来猜测当前深度为depth+1搜索的窗口了。2极小窗口搜索(Minimal Window Search)极小窗口搜索,也被称为是主变量导向搜索(Principal Variation Search),常常简称为PVS算法或者NegaScout算法。这个算法应用非常广泛。它的出发点是和渴望搜索大致相同的,即用极小的窗口来限制剪枝范围。它的过程是这样的:在根节点处,假定第一个儿子节点为主变量,也就是假定它为最佳走步,对它进行完整窗口(a,b)的搜索并得到一个返回值v,对后面的儿子节点依次用极小窗口(也被称为是零窗口)(v,v+1)来进

26、行搜索,如果搜索返回值大于零窗口,则证明这一分支亦为主变量,对它进行窗口为(v+1,b)的搜索,可是如果返回值小于零窗口,这一分支就可以忽略,因为它的最佳走步还不如已有的走步。极小窗口搜索采用了极小的窗口,剪枝效率最高,并且只对主变量进行大窗口的搜索,所以大部分搜索动作是有效的,搜索产生的博弈树也很小。3置换表(Transposition Table)在搜索进行中,查询所有的走步,经常会在相同的或者不同的路径上遇到相同的棋局,这样的子树就没有必要重复搜索,把子树根节点的估值、子树的最好走步和取得这个值的深度信息保存在一个称为置换表的数据结构中,下次遇到时直接运用即可。但是,对不同的情况要区别对

27、待。对于固定深度的搜索,如果前一次保存的子树深度小于新节点要搜索的深度,还是要进行重新的搜索以保证所取得数据的准确程度。反之,如果置换表中保存的子树信息表明,子树的深度大于或者等于当前的新节点要求的搜索深度,它的信息就可以直接运用了。置换表增强如果和有效的alpha-beta搜索结合使用,结果就会使实际搜索的博弈树小于最小树。博弈树搜索的问题实际上是一个有向图的搜索。那些在置换表中被命中的节点,就是有向图中若干路径的交叉点。只有避免这些交点被重复搜索,搜索过程中生成的搜索树才有可能小于最小树。这也是后来证明深度优先的算法并不比最佳优先的算法差的原因之一。这个算法存在的问题是,置换表的构造,必须

28、使对置换表的查找和插入操作不成为整个搜索的负担,才能提高效率。一般使用散列表来实现。4遍历深化(Iterative Deepening)遍历深化是因对博弈树进行多次遍历,又不断加深其深度而得名,有人还把它称为蛮力搜索。算法利用了alpha-beta算法对子节点排序敏感的特点。它希望通过浅层的遍历给出节点的大致排序,把这个排序作为深层遍历的启发式信息。另外,算法用时间控制遍历次数,时间一到,搜索立即停止,这也符合人类棋手的下棋特点。在关键的开局和残局,由于分支较少,也可以进行较深层次的搜索。算法的过程是,对以当前棋局为根节点的博弈树进行深度为二的遍历,得出其儿子节点的优劣排序,接着再从根节点进行

29、深度为三的遍历,这一次优先搜索上次遍历中得出的最优者,从而加大剪枝效果,以此类推,在进行第三次、第四次的遍历,一直达到限定时间为止。由于这个算法的每次遍历都从根节点开始,所以有人称其为蛮力搜索,但实际上由于每次都可以优先搜索相对好的节点,导致剪枝效率增大,其实算法效率是很高的,目前这一算法也得到了广泛的认可。5历史启发搜索(History Heuristic)历史启发也是迎合alpha-beta搜索对节点排列顺序敏感的特点来提高剪枝效率的,即对节点排序,从而优先搜索好的走法。所谓好的走法即可以引发剪枝的走法或者是其兄弟节点中最好的走法。一个这样的走法,一经遇到,就给其历史得分一个相应的增量,使

30、其具有更高的优先被搜索的权利。6杀手启发搜索(Killer Heuristic)杀手启发实际上是历史启发的特例。它是把同一层中,引发剪枝最多的节点称为杀手,当下次搜索时,搜索到同一层次,如果杀手走步是合法的话,就优先搜索杀手。7MTD(f)算法MTD(f)搜索的全称是Memory enhanced Test Driver with f and n。它是一个较新的算法,在1995左右年由Aske Plaat等人提出。它不是单一的alpha-beta算法的增强,但也是alpha-beta算法的改进。在算法进行中多次调用了零窗口的alpha-beta搜索过程。在算法初起,要给定一个初始值f,一个上界

31、和一个下界。初始值要尽可能的靠近最后要找到的最优走步值,上界和下界要保证能把这个最优走步包含在内。算法实际上就是不断的应用零窗口的alpha-beta搜索,缩小上界和下界,并移动初始值使其接近最优走步。以下使这个算法的伪代码。function MTD(n, ) ;g := ;+ := + ; := ;repeatif g = then := g + 1 else := g;g := alphabeta(n,-1,)if g 先获取当前窗口的高和宽,height()和width(),必须在painterEvent事件中,因为在窗口发生变化时,重绘工作要重新获取宽和高的数值,才能准确画出棋盘;3f

32、or循环9次画线;3将棋盘中间的四个位置画上相应的棋子。其他位置绘制棋子就事先在此类的构造函数中将棋盘模拟成一个三维数组,用不同的枚举状态代表不同的颜色。然后这里进行数组遍历,根据不同颜色,在计算出四个棋子的相对坐标上将棋子(圆)画上去。双方棋子数目的显示:在另一模块中定义两个QLCDNumber对象,将其初始化后,用QHBoxLayout放入QWidget 框架中。然后在用connect()棋子的数目变化与display()槽连接。当棋子数目发生变化时,发送信号使其显示棋子数。当点击开始按钮(QPushButton)时发射信号给自定义槽Init(),槽的功能则是将棋盘(数组)重新初始化为新一

33、局棋盘,包括主要标志位,然后进行重绘。核心算法(人机对战):此算法由事件mousepressEvent(QMouseEvent *e)函数来响应鼠标事件。当点击鼠标后进入该事件,首先获取鼠标点击出坐标x=e-x,()y=e-y(),计算x,y坐标对应的数组位置,即QPoint point。当获取到棋盘坐标后,将其传入另一函数do_pressPoint(QPoint point)中进行进一步处理。参数color代表当前方棋子的颜色,在此分析函数将完成棋盘点击处八个方向的棋子是否可落子判断,八个方向则由i、j加减一来决定,这里只分析一个方向,其他方向雷同。如果坐标的下一格为空或着是与color值相

34、同,则进入下一个方向判断。若上述条件不满足,进入while (-i0),若遇到color则记录坐标处到clor处的格数(count),退出循环。然后用for循环将刚才color间夹得子变成color。跳过:当人对人时,可随意跳过,人对机时要等到某方确实无法下子时,跳过才生效。主要是通过发射信号的方式来显示一个提示框,同时,已经改变同步标志位。胜负提示:当棋盘棋子总数为64或者单方棋子位0时显示提示框。3 系统分析与设计在软件工程中,需求分析指的是在创建一个新的或改变一个现存的系统或产品时,确定新系统的目的、范围、定义和功能时所要做的所有工作。需求分析是软件工程中的一个关键过程。在这个过程中,系

35、统分析员和软件工程师确定顾客的需要。只有在确定了这些需要后他们才能够分析和寻求新系统的解决方法。概要设计的主要任务是把需求分析得到的系统扩展用例图转换为软件结构和数据结构。设计软件结构的具体任务是:将一个复杂系统按功能进行模块划分、建立模块的层次结构及调用关系、确定模块间的接口及人机界面等。数据结构设计包括数据特征的描述、确定数据的结构特性、以及数据库的设计。3.1 黑白棋的需求分析首先要界面简洁,具有黑、白棋子数目显示、倒数计时显示、功能键显示等。其次要界面友好,背景、组件大小等要协调,给用户一种和谐的感官。再次要实现游戏开始、暂停、退出、模式选择、悔棋、跳过等基本功能。最后要选择合适的算法

36、来实现黑白棋的下棋规则功能和计算机自动下棋功能。3.1.1 用例图图3-1用例图由参与者(Actor)、用例(Use Case)以及它们之间的关系构成的用于描述系统功能的静态视图称为用例图。用例图是被称为参与者的外部用户所能观察到的系统功能的模型图,呈现了一些参与者和一些用例,以及它们之间的关系,主要用于对系统、子系统或类的功能行为进行建模。用例图用于对系统、子系统或类的行为进行可视化,使用户能够理解如何使用这些元素,并使开发者能够实现这些元素。用例图定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现。3.1.2 程序流程图图3-2程序流程图3.2 模块设计3.

37、2.1 主要模块简介通过对程序流程图的分析,将采用以下模块来实现黑白棋游戏的开发与设计。(1)游戏界面模块本模块是用来绘制游戏主界面,包括黑白棋记数,时间显示,棋盘,以及实现各种子功能的按钮。该模块是由Qt设计师界面类实现,通过QtDesigner拖拽控件设计主界面。(2)绘制棋盘模块绘制棋盘模块用来绘制8x8正方形棋盘以及黑、白色棋子。通过paintEvent(QPaintEvent *e)函数来实现绘图模块。(3)初始化棋盘模块根据黑白棋的游戏规则,每轮开局前,首先在8*8的棋盘上的中心位置,先放入4枚棋子,黑、白各两枚。初始化模块的作用就是开局以及游戏结束开始新游戏时复位棋盘。(4)黑白棋子记数

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

当前位置:首页 > 其他


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