1、职场大变样社区():下载毕业设计成品全套资料,全部 50 元以下毕业设计(论文)题目:基于 Qt 的五子棋游戏的设计与实现学 生 姓 名 学 号 班 级 所属院(系) 指 导 教 师 2016 年 4 月 1 日太原科技大学华科学院毕业设计(论文)任务书专业: 时间: 学 生 姓 名 指 导 教 师设计(论文)题目 基于 Qt 的五子棋游戏的设计与实现主要研究内容1、服务器启动2、客户端启动3、用户注册及登陆4、用户匹配5、人人模式下棋功能6、人机模式下棋功能7、悔棋、认输操作8、与对手的聊天框9、胜负及积分判定10、系统退出研究方法1)理论研究方法:通过网上图书和相关文献进行参阅,结合案例进
2、行分析并进行相关研究。2)实证研究方法:通过系统的运行,分析存在的问题。主要技术指标(或研究目标)1) 能够按照任务和要求完成毕业设计;2) 毕业设计说明书紧扣课题,内容严谨,联系实际;3) 开题报告和毕业设计说明书的格式要符合要求;4) 毕业设计说明书字数不少于 12000 字,装订规范。主要参考文献1、杰普软件嵌入式软件课程体系标准及培训计划2、系统开发规范与文档编写3、软件工程4、国家标准 软件需求说明书GB856T88五子棋游戏的应用分析摘 要随着互联网+的日新月异和计算机的普及,如今的计算机技术也走上了大众化和娱乐化的时代,计算机技术也不再是只能由少数人掌握的深不可测的学问;同时个人
3、计算机也非常普遍的走进了千家万户逐渐转变成像电视机一样的家庭重点娱乐电器,伴随着这种巨大的转变计算机软件的开发也走向了娱乐化。尤其是现在游戏产业的发展已经成为当今产业信息中发展势头最猛烈和最有发展前景的一个分支,而游戏厅也基本上被网吧挤出了正常的营销市场,游戏除了单纯给人带来娱乐功能之外,也逐渐向更多人的互动方向发展。游戏的功能和玩法正在不断的按照玩家的需求和爱好渐渐的发展的更全面,如今运行在各式各样的游戏平台上不同的名字,不同类型,不同玩法的游戏不仅仅为游戏市场提供了丰富多彩的选择,而且为游戏开发公司也带来了非常可观的回报,游戏产业吸引着越来越多的程序员去开发更多更新更好玩的游戏。基于现在互
4、联网+和游戏业发展的趋势和前景,我想用 C+在 Qt 环境下开发一款小游戏五子棋。我希望把大家平时玩的界面单一、选项复杂的游戏,在 Linux 里面做成精美的、简单的游戏程序,以便给更多的玩家一个全新的选择。人类的智能是什么?人类自十万年前进化成为智人。人类的大脑里有这我们一路进化的痕迹。我们从爬行动物,哺乳动物,再进化到智人。每一段历史进化的过程都在对我们大脑的结构造成很多的影响,直到形成我们今天的生活方式。人工智能在近几年飞速发展,被广泛用于语音识别,自然语言处理,图像识别等领域。“智能”两字,给人们无限遐想。人工智能是否真能和人类的智能比拟?人们很早就提出了疑问:计算机是否会超越人类?2
5、016 年 1 月,谷歌旗下的 DeepMind 公司在自然发表封面论文,介绍人工智能围棋程序AlphaGo 的算法。论文同时宣布,AlphaGo 已于去年十月完胜欧洲围棋冠军樊麾。2016 年 3 月 9 日、10 日,AlphaGo 迎战围棋界顶级高手李世石,再次完胜。一棋激起千层浪。围棋的变化如恒河沙数,一直是人类最引以为豪的智力游戏,如今却被程序无情地攻破。全球观战的人们纷纷惊呼奇点已经临近,人工机器智能即将到来,超越人类的物种雏形已经出现。人工智能是否会在不久的将来,接近甚至超过人类智能?人类智能的本质是什么?关键词:五子棋;C+;Qt;设计Application of backga
6、mmon gameAbstractWith the popularity of computers and the ever-changing Internet +, todays computer technology has also embarked on popularity and entertainment era of computer technology is no longer only by a few people grasp the unfathomable knowledge; while the personal computer is also very uni
7、versal gradually transformed into the household television imaging the same family focused entertainment appliances, along with this huge shift toward computer software development is also the entertainment.Especially now that the development of the game industry has become a branch of todays inform
8、ation industry development momentum of the most violent and the most promising, and the game room was basically out of the normal Internet marketing market, in addition to the game alone brings entertainment outside the function, but also to gradually more interactive direction of human development.
9、 Game features are now constantly in accordance with the needs and preferences of players gradually develop better, and now runs on a variety of gaming platforms of different names, different content, different styles of the game not only for the market to provide a wealth of choice, but for game de
10、velopers the company also brought good returns, the game industry is attracting more and more and more programmers to develop newer and more fun games.Based on current situation and prospects of the development of Internet + and games, I decided to use C + language in a Qt environment to develop a s
11、mall game backgammon. I hope that we usually play with the simple interface options complex game, made in Linux inside beautiful, simple game program, in order to give more players a new choice.What human intelligence is? Since humans thousands of years ago evolved into Homo sapiens. The human brain
12、 has evolved this way we trace. We reptiles, mammals, and then evolved into Homo sapiens. Each segment in the course of evolution impact on our brain structure, until the formation of our brains today.In recent years, the rapid development of artificial intelligence, is widely used in speech recogni
13、tion, natural language processing, image recognition, and other fields. “Smart“ word, give people unlimited reverie. AI really can compare and human intelligence? It has long been questioned: whether the computer will surpass humans? January 2016, Googles DeepMind in “Nature“ published a cover paper
14、 describes artificial intelligence algorithms -AlphaGo Go programs. Papers also announced that, AlphaGo was win the European Championship Go Fan Hui last October. March 9, 2016, on the 10th, AlphaGo community go against top players Shishi, win again.A chess ripple. Go as countless changes, mankind h
15、as been the most proud of the intellectual game, the program is now being ruthlessly broken. Spectators have exclaimed singularity is near the machine era is coming, beyond the human species prototype has emerged.Will artificial intelligence in the near future, close to or above human intelligence?
16、What is the nature of human intelligence?Keywords: backgammon; C +; Qt; Design目 录第 1 章 绪论 11.1 选题的目的和意义 11.2 五子棋介绍以及开发环境 11.2 .1 五子棋简介 .11.2 .2 五子棋国内外发展情况 .21.2 .3 QT 的基本特征综述 3第 2 章 需求分析、关键技术及相关原理介绍 .42.1 需求分析 42.2 关键技术 42.3 相关原理 42.4 可行性研究 5第 3 章 详细设计 .63.1 总体思路 63.2 窗体的设计 73.3 棋盘以及功能按钮的设计 73.4 判断胜
17、负的设计 7第 4 章 功能说明 94.1 服务器启动 .94.2 客户端启动 .134.3 单机模式 .144.4 用户登录、注册 .144.5 用户匹配 .16 4.6 游戏对战 .194.7 悔棋、认输操作 .204.8 与对手的聊天框 .214.9 胜负及积分判定 .214.10 积分存储及等级判定存储 214.11 系统退出 21第 5 章 测试 225.1 测试的重要性及目的 225.1 测试内容 23参考文献 24致 谢 24附 录 25第 1 章 绪 论1.1 选题 的 目的和意义目的:本文的题目是基于 Qt 的五子棋游戏的开发与实现,本文档主要描述了基于 Qt的五子棋的需求,
18、以用户注册信息存储、实现用户之间的游戏对战、胜负判定、积分评定为目标。通过该文档分析,描述用户所需要的具体需求,定义开发程序内容的需求和范围,另外也可作为各方面之间沟通的一种依据,也为下一步的工作可以提供更好的指示。可以在家庭里连接同一路由器可以进行家人的对战。为了给生活增添一些色彩,增加一些思考,停下生活急速的脚步,我准备设计一款基于 Qt 的五子棋休闲社交类软件。五子棋是一种在网络上日渐流行的小游戏,本身的人机对战又需要考虑到人工智能。设计通过一个棋类游戏的开发,简单的给用户阐述了棋类游戏的开发全过程,包括软件开发的逻辑分析,程序编程,软件设计等这几个步骤。想想我们人类在下棋的过程时,一般
19、情况下大家都会假设好多步数,而且对手同时也会考虑好多种的回应方式,如果对手回应了自己所想的某一步了,那么我应该再怎么走才能难住对手了呢?如果对手回应的是另外的一步了,那么我又要思考怎么走?然后一直在假设我走另外的某一步,就这个过程然后一直反复的思考下去。这个过程叫做搜索。那么在人机对战的时候人工智能是否也会达到这种复杂的过程呢?1.2 五子棋介绍以及开发环境1.2.1 五子棋简介五子棋是一种两人轮流出子的纯策略型棋类游戏,是起源于中国古代传统的黑白棋之一。早在“尧造围棋”之前,可能民间就已有五子棋游戏。发展于日本,流行于欧美。五子棋容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强玩游戏人
20、的思维能力,提高智力,而且富含非常大的哲理,有助于修身养性,已在各个游戏平台有应用。五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为 “ 连珠 ” ,亦有 “ 连五子 ” 、 “ 五子连 ” 、 “ 串珠 ” 、 “ 五目 ” 、 “ 五目碰 ” 、 “ 五格 ” 等多种称谓。五子棋既有现代休闲的明显特征 “ 短、平、快 ” ,还有古典哲学中的高深学问 “ 阴阳易理 ” ;它既有简单易学的特性,为人民群众所喜闻乐见,任何人都可以上手,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有 “ 场 ” 的概念,亦有 “ 点 ” 的连接。它是中西文化
21、的交流点,是古今哲理的结晶。五子棋相传起源于四千多年前的尧帝时期,相比之下比围棋的历史还要悠久,可能早在“尧造围棋 ”之前,民间就已经有了五子棋游戏的玩法。有关记载在早期五子棋的文史资料中是与围棋有相似之处的,因为在古代五子棋的棋具与围棋是完全一样的。在上古的神话传说中有“ 女娲造人,伏羲做棋 ”一说,增山海经 中记载:“休舆之山有石焉,名曰帝台之棋,五色而文状鹑卵。”李善注引三国魏邯郸淳艺经中曰:“ 棋局,纵横各十七道,合二百八十九道,白黑棋子,各一百五十枚”。这段虽没明讲是何种棋类,但至少知道远古就以漂亮的石头为棋子。因而规则简单的五子棋也可能出自当时,并是用石子作棋子。辞海中亦言:“五子
22、棋是棋类游戏,棋具与围棋相同,两人对局,轮流下子,先将五子连成一行者为胜。”可见,五子棋颇有渊源。在古代,五子棋棋具虽然与围棋相同,但是下法和规则却是完全不同的。1.2.2 五子棋国内外发展情况国内:2003 年,国家体育总局批准了中国棋院审定的中国五子棋竞赛规则和中国五子棋段级位制2004 年,中国围棋协会五子棋分会成立。2006 年,五子棋正式立为比赛项目。国家体育总局棋牌运动管理中心从 2002 年起举办全国五子棋邀请赛。2007 年起全国五子棋邀请赛更名为全国五子棋锦标赛。2009 年起举办全国五子棋公开赛。2009 年成为了第一届全国智力运动会正式的比赛项目,2011 年成为第二届智
23、力运动会正式的比赛项目,此后每四年举办一次。2010 年,中国围棋协会五子棋项目等级分制度实施办法正式颁布并且于 2011 年开始正式实施。2013 年全国五子棋团体赛在原本男团体组和女团体组的基础上添加大学生混合组。各地方棋院、共青团、五子棋俱乐部等均有举办各种规模的赛事。目前国内五子棋在全国不少省市成立有五子棋的组织和五子棋的培训机构(一般都是针对青少年儿童) ,其中北京上海浙江江苏等地发展较好。国外:1988 年,国际连珠联盟(RIF)在瑞典斯德哥尔摩正式成立,迄今已有 50 多个会员国。1989 年起,每两年举办一届“世界连珠个人锦标赛”。1996 年起,每两年举办一届“世界连珠团体锦
24、标赛”以及“世界青少年连珠锦标赛”。中国棋手吴镝和曹冬分别在 2007 年和 2011 年获得世界连珠个人锦标赛冠军。中国棋手曹冬、李一、殷立成、奚振扬四人组成的代表队于 2010 年获得世界连珠团体锦标赛冠军。1.2.3 QT 的基本特征综述QT 是 Trolltech 公司的标志性产品,是一个跨平台的 C+图形用户界面(GUI )工具包,QT 应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置(QT/windows QT/Mac QT/x11(linux))QT对不同平台的 API 进行了进行了专门的封装(文件处理,网络)。Qt 是一
25、个相对完整的应用程序开发软件,包括一个类库和一些跨平台、国际化的工具。它是挪威 Troll Tech 公司的标志产品。Qt 工具箱有三种不同的版本,一是专业版,另一种是免费版,还有一种是嵌入式免费版。专业版用于创造成功的商业贸易方面的跨平台软件;而自由版已经成为用 C+ GUI 工具包在 Linux 上进行自由软件开发的主流,它是 Linux 上流行的 KDE 桌面环境的基础。由于 Qt 是一个跨平台的 GUI 工具箱,它确保了软件非常方便的应用于绝大多数操作系统。Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt 提供了一种称为 signal
26、s/slots 的安全类型来替代 callback,这使得各个元件 之间的协同工作变得十分简单。Qt 包括多达 250 个以上的 C+ 类,还提供基于模板的 collections,serialization, file, I/Odevice,directory management,date/time 类。甚至还包括正则表达式的处理功能。支持 2D/3D 图形渲染,支持 OpenGL,大量的开发文档, XML 支持,Webkit 引擎的集成,可以实现本地界面与 Web 内容的无缝集成。但是真正使得 Qt 在自由软件界的众多 Widgets (如 Lesstif,Gtk ,EZWGL ,Xfo
27、rms,fltk 等等)中脱颖而出的还是基于 Qt 的重量级软件 KDE 。1.面向对象QT 有模块设计和注重软件构件或元素的可重用性的特点。2.构件支持QT 提供信号和槽的概念,这是一种类型安全的方法,它允许回调,并支持使用者双方在不知道彼此信息的情况下进行有效的合作,这使得 QT 非常适合于构件编程。3.友好的联机帮助QT 可以为用户或者开发者提供大量的联网参考资料。并且可以非常轻松的通过互联网访问到 QT 的官网,在诺基亚公司的网页上面也可以查询到特别多有用有帮助的文献,以及开发帮助,甚至还可以与全世界的所有的使用者在论坛上面交流使用心得和技巧。第 2 章 需求分析、关键技术及相关原理介
28、绍2.1 需求分析需求分析是在每个系统软件开发中都是非常重要的一个过程,开发者只有通过分析软件的需求才能把要实现的目标明确,从而奠定软件开发的基础。在系统开发阶段必须要了解本软件能否达到用户要求的各种功能。要清楚的知道用户是希望软件可以做到什么。准确的把用户的要求表达出来。功能需求:1)界面简洁,用户能够清楚的知道该怎么使用。2)提供帮助,关于说明。3)具有悔棋,关闭等功能。4)符合五子棋的基本规则。本软件是自己开发的一个五子棋游戏的程序,主要实现的功能是可以实现人机对战。通过玩游戏,让玩家可以能深刻的体会到五子棋游戏的乐趣和技巧。本系统是独立的软件系统,暂不与其他的软件系统提供接口,所产生的
29、输出也是独立的。本系统将部署在安装了 QT 环境变量的操作系统下 ,可在客户端上完成注册及游戏操作,也可以服务器进行客户端之间的链接。本系统将采用 C+高级编程语言进行开发,页面显示部分由 QT自定义的脚本化语言 QML 实现,要求程序代码符合相应的书写规范。本系统的最终表现形式为图形用户管理界面,使用外部设备进行点击及录入操作。2.2 关键技术本系统主要分为输入模块、输出模块和判断模块这三大块。各模块依据所属功能的不同来划分。本次采用了 QT 进行程序设计,对于图形界面有较好的处理方法和环境。2.3 相关原理五子棋游戏有一个非常明显的特点就是先走棋的一方优势会非常大,因此在职业比赛中裁判和规
30、则会对黑方做了种种限制,以利公平竞争。五子棋的比赛规则如下: (1)黑棋先手、白棋后手,从天元开始相互顺序落子;(2)可以最快在棋盘的横向、纵向或斜向连成连续颜色相同的五个棋子的即为胜者;(3)黑棋禁手判负、白棋无禁手。(4)如分不出胜负,则到为平局; (5)五连与禁手同时形成,判胜; 五子棋是黑白双方或两个人之间的竞技活动,由于对黑白双方规则不同,黑棋必须先行。一般采用猜先的方法来决定谁执黑先行,即双方各抓一种颜色的几枚棋子,大数减小数,单数双方交换,偶数不换;黑方在落下关键的第五子即形成五连的同时,如又形成禁手,此时因黑方已经成五,而“五”在五子棋中是至高无上的,故禁手失效,黑方胜;所谓黑
31、方形成禁手,是指黑方落下一子同时形成两个或两个以上的活三、冲四及长连等。此时白方应立即指出,自然而胜。 专业连珠五子棋虽然对黑棋采取了种种限制,但是黑棋先行的优势依然很大。因此,在高段位的专业比赛中,又出现了三种特殊的规定: “指定打法”:指比赛双方按照约定好的开局进行对弈。例如“斜月局”、“长星局”等。 “三手可交换”:指黑棋下第二手棋盘面第三手棋之后,白方如感觉黑方棋形不利于己方,可提出交换,即执白棋一方变为执黑棋一方此方法不适用于指定开局打法,而用于随意开局。采用此规定以后,黑棋就不会再使用诸如“浦月”、“花月”之类的必胜开局了。 “五手两打”:指黑棋在下盘面上关键的第五手棋时,必须下两
32、步棋,让白方在这两步棋中任选一步,然后再继续下。 采用这一系列规定以后,黑棋先行就再无优势可言。2.4 可行性研究社会和经济意义:五子棋游戏在玩的过程中不仅可以增强自身整体的思维能力,提高智力的开发,而且它本身富含很高的生活哲理,有助于修身养性它既有面的广阔,又有点的忠言。它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西方文化交流中的一个点,是古今哲理的结晶。项目前景:用户范围广阔,系统内容丰富益智,具有较高的市场前景。1.技术可行性运用 linux 操作系统或者 Qt 客户端,以 QT 为平台开发界面,开发功能完整的五子棋游戏。2.经济可行性非常简
33、洁的界面设计,可以让玩游戏的人很明白的操作。而且游戏系统的开发成本非常低,在现在所有的计算机上可以很轻松简单的完成实现整个环境的需求。3.操作可行性新的系统运行后对现行旧的系统带来包括(工作环境、管理方式、组织机构等)的后果以及影响来进行评判和估计。同时更需要考虑到的是:对现有的管理人员进行培训,补充、分析在给出的时间里是不是能完成预定开发系统的任务等系统的开发,是典型的Mis 开发,主要是对数据的处理,包括数据的收集,数据的变换,及数据的各种报表形式的输出.只需要鼠标的点击就可以完成真的玩游戏。可行性研究的目的不在于提出解决问题的方案,而在与研究解决问题的必要性和可能性。在软件开发实践中,由
34、于软件开发人员或用户对市场的了解不充分,对技术的把握不成熟,对进行开发的各项风险估计不足等因素,许多问题都不能在预期的时间范围内或资源限制下得到解决。如果开发人员能够尽早预知存在的问题没有合理的解决方案,那么尽早停止项目的开发就能够避免时间、资金、人力和物力的浪费。流程图是以特定的图形符号加上说明,表示算法的图,称为流程图或框图。流程图是流经一个系统的信息流、观点流或部件流的图形代表。在企业中,流程图主要用来说明某一过程。这种过程既可以是生产线上的工艺流程,也可以是完成一项任务必需的管理过程。流程图是揭示和掌握封闭系统运动状况非常有效的方式。作为诊断工具,它能够辅助决策制定,让管理者清楚地知道
35、,问题可能出在什么地方,从而确定出可供选择的行动方案。流程图有时也称作输入-输出图。该图直观地描述一个工作过程的具体步骤。流程图对准确了解事情是如何进行的,以及决定应如何改进过程极有帮助。流程图的优缺点优点:形象直观,各种操作一目了然,不会产生“歧义性”,便于理解,算法出错时容易发现,并可以直接转化为程序。缺点:所占篇幅较大,由于允许使用流程线,过于灵活,不受约束,从而造成程序阅读和修改上的困难,不利于结构化程序的设计。第 3 章 详细设计3.1 总体思路首先应当勾画出来一个简单的窗体可以最大化,最小化和关闭。然后在勾画出来的窗体中刻画出自己想要分配的所有区域。键盘区域:在传统的历史中五子棋的
36、棋具与围棋是一样的,棋子分为黑白两色。两人对弈开始,彼此双方各选一个颜色,进行轮流下子,先将横行竖排或斜线的 5 个或 5个以上同一颜色的棋子连成不间断的一排者即为胜利。功能区域:1.选择颜色的单选框:建立一个单选框其中应包含两个选择即 1:选择为黑色。2 选择为白色。(同一时间只能选择一个颜色作为自己的)。2.显示信息的小块:设立两个按钮使其能够对其居中。在使用鼠标单击 help 按钮式能够显示出来关于这个游戏的玩法帮助说明。鼠标单击 about 按钮时能够显示出来这有游戏的关于信息。3.悔棋,重新开始,关闭小块:当游戏进行到一定的程度时可以根据自己的意向使用鼠标单击悔棋按钮自动清除上一步双
37、方所下的旗子,使其还原到上上次落子的状态。当本局游戏已经不想再继续玩下去的时候可以通过鼠标的单击然后重新选择开始的按钮使游戏直接还原到刚开始的那步。当游戏者不想玩这个游戏的时候点击关闭按钮能够关闭整个游戏包括窗体。考虑到整个的下棋过程(无论对方是电脑抑或其他网络玩家)可以分为:己方落子、等待对方落子、对方落子、设置己方棋盘数据这一系列过程,因此一人游戏类、二人游戏类和棋盘类之间的关系参考了抽象工厂模式,以实现对两个不同模块进行一般化的控制。棋盘类整个架构的核心部分,类名为 Board。封装了棋盘在游戏中各种可能用到的功能,如保存游戏进度数据、初始化、判断游戏胜负等。用户操作主界面,主界面与 B
38、oard 进行交互来完成对游戏的操作。3.2 窗体的设计1.定义一个窗体类在其 public 属性中设置必要的属性,然后完成 setupUi 的函数。在函数中设置成个窗体大小为固定大小(745,570)。并将其需要的所有图片棋盘刻画图片棋子图片全部都可以添加进去,使得窗体在初始化的过程中让整个用到的按钮和棋盘全部都可以显示出来。2.在 Edit 中打开真个布局图画,然后使用鼠标拖拽完成棋盘区域,显示信息区域,功能区域的划分,并且在其各自的区域里设置相应的属性以及相应的对象。3.讲一些可以比较容易设置的简单功能在各自的属性列表中通过信号和槽设置完毕。实现包括简单的退出最小化等等的一些功能。3.3
39、 棋盘以及功能按钮的设计1.定义一个棋盘类,在 public slot 属性中定义需要使用的函数 Class Board:public QWidget。然后定义 Chess *grid225用来存储棋子指针。Char realgrid1515(棋子网络数组,真正的网络,标示已有棋子,用于节点和生成字节点的判断)等。要把棋盘和棋子显示出来,可以分为下面的几个过程;得到当前绘图 DC 句柄,并保存当前绘图环境到内存 DC 中。2) 载入一张棋盘 BMP 图片,并在主界面对话框的客户区绘画出来。 3) 遍历棋子数组,根据数组中的数据,把相应颜色的棋子图片绘出来。4) 更新内存 DC 到当前的绘图 D
40、C 中。这样就可以把棋盘和棋子所有都显示出来了。2.鼠标输入数据的处理,要实现鼠标输入数据的处理,可以分为以下几步:得到鼠标在当前窗口中点击的左键坐标。根据棋盘每格的大小得到当前坐标在棋子二位数组中的相应行和列数据。判断数组中对应的行和列的数据是否是有效数据。如果是有效数据,说明有棋子已经在当前位置落下,这里就不能落子,提示并等待用户下一次点击。如果无效数据,就把这个数据填写为相应的颜色数据。把对应的行列和颜色数据发送出去。调用规则类判断当前的胜负状态,如果获胜直接提示。3.3 判断胜负的设计五子棋的胜负的判断,在于判断棋盘上是否有一个赢的点,从这个点开始的左、右、上、下、左上、左下、右上、右
41、下八个方向是否有连续的五个颜色相同的棋子出现,如果有,则可判定有的一方为获胜。每当一方落子后,都需要作如下处理:如果己方此坐标的获胜组合仍为 true,且仍有可能在此获胜组合处添加棋子,则将此获胜组合添加棋子数加 1;如果对方此坐标的获胜组合仍为 true,则将对方此坐标的获胜组合置为 false,并将对方此获胜组合添加棋子数置为-1(不可能靠此组合获胜)。判断的过程为得为整个棋盘建立一张表格用以记录棋子信息,我们使用一 15*15 的二维数组 Table1515(15*15 是五子棋棋盘的大小),数组的每一个元素对应棋盘上的一个交*点,用0表示空位、1代表己方的子、2代表对方的子;这张表也是
42、今后分析的基础。在此之后还要为电脑和玩家双方各建立一张棋型表 Computer1515和 Player1515,用来存放棋型数据,就是刚才所说的重要程度,比如用20代表“冲四”的点,用15代表“活三”的点,那么在计算重要性时,就可以根据2015 得出前者比后者重要,下子时电脑便会自动选择“冲四”的点。(1)初始化:首先,建立盘面数组 Table1515、对战双方的棋型表Computer1515和 Player1515并将它们清零以备使用;然后初始化显示器、键盘、鼠等输入输出设备并在屏幕上画出棋盘。 (2)主循环控制模块:主要负责控制下棋的顺序,当轮到某一方落子的时候,负责将用到的程序转到相对应
43、的模块中去,在系统中主要担当一个调度者的身份。 (3)玩家下子:当轮到玩家下时,您通过键盘或鼠标在棋盘上落子,程序会根据该点的位置,在 Table1515数组的相应地方记录2,以表明该子是玩家下的。 (4)盘面分析填写棋型表:本程序为主要核心模块之一,是整个系统中人工智能算法的根本依据!它具体的实现方法如下:当你在下五子棋时,一定要先观察棋盘上的情况,找出当前最重要最需要的一些点位,然后再在其中合适的点选择落子。但是,电脑不会像人脑一样很清楚的分析问题,要让电脑知道哪是“活三”、哪是“冲四”,就得在棋盘上进行合理的计算,一步一步的教它。先来分析自己所执的颜色棋型,我们从棋盘的左上角进行出发,向
44、右逐行搜索,当遇到一个空白点时,以它为中心向左挨个查找,如果遇到己方的子则记录然后继续,如果遇到了对方的子、空白点或边界就停止了查找。左边完成后再向右进行同上一样的操作;最后把左右两边所搜索的记录合并起来,得到的数据就是该点横向上的棋型,然后把棋型的编号填入到 Computerxyn中就行了(x、y 代表坐标,n=0、1、2、3 分别代表横、竖、左斜、右斜四个方向)。(5)电脑下子:有了上面填写的两张棋型表,现在要作的就是让电脑知道在哪一点下子了。其中最简单的计算方法,就是遍历棋型表 Computer1515和 Player1515找出其中数值最大的一点,在该点下子即可。但这种算法的弱点相对来
45、说还是比较明显的,只顾眼前利益,不能兼顾大局,这就和许多刚学五子棋的人一样都是犯了“目光短浅”的毛病。 (6)胜负判断:无须多言,某方形成五子连即获胜。第 4 章 功能说明启动界面人机模式弱智模式炼狱模式服务器数据库登陆界面 匹配界面注册界面数据传输传输当前客户端信息判断登陆并返回游戏界面结算交互模块流程关系图4.1 服务器启动启动服务器,监听操作,读取 sqlite3 中数据,等待用户连接,用户不能看到此时的我操作服务器数据传输格式悔棋操作 $主要代码: if(data.contains(“$“)qsrand(time( NULL);name = QString(tmp.mid(11, tm
46、p.indexOf(“:“)-11);tmp.remove(0, tmp.indexOf(“:“)+1);pwd = QString(tmp.mid(0, tmp.indexOf(“);number = qrand() % 10000 + 100;dosql.clear();sql = tr(“select * from users where number=%1“).arg(number);query.exec(sql);while(query.next();sql.clear();sql = tr(“insert into users values(null,%1,%2,%3,0,0,0)
47、“).arg(number).arg(name).arg(pwd);query.exec(sql);tmp.clear();QString num;num.setNum(number);tmp = “$“;tmp.append(num);tmp.append(QByteArray(“);client-write(tmp);clientlist.removeAt(i);else if(data.contains(“$“)number = tmp.mid(8, tmp.indexOf(“:“)-8).toInt();tmp.remove(0, tmp.indexOf(“:“)+1);pwd = Q
48、String(tmp.mid(0, tmp.indexOf(“);sql = tr(“select * from users where number=%1 and pwd=%2“).arg(number).arg(pwd);query.exec(sql);if(query.next()/登录成功int j;for(j=0; jgetNumber()=number)client-write(QByteArray(“$2“);break;if(j=vector.size()UserInfo *user = new UserInfo;user-setMark(-1);user-setNumber(
49、number);user-setName(query.value(“name“).toString();user-setTotal(query.value(“total“).toInt();user-setScore(query.value(“score“).toInt();user-setWin(query.value(“win“).toInt();vector.append(user);/user-print();client-write(QByteArray(“$1“);服务器内部工作流程图4.2 客户端启动客户端启动,建立与服务器的连接与服务器进行交互,数据传输,注册用户信息写进表,判定用户是否登陆成功启动效果图主要代码: list-addMedia(QUrl:fromLocalFile(“./StartGame/gaosh