毕业设计Qt黑白棋_第1页
毕业设计Qt黑白棋_第2页
毕业设计Qt黑白棋_第3页
毕业设计Qt黑白棋_第4页
毕业设计Qt黑白棋_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计论文(潘登).doc(1)原创本文转自同名 word 的无格式文档,复制到此,无法保持原有格式,在此给大家阅读造成不便,敬请包涵!封面中原工学院信息商务学院毕业设计(论文)此封面系里统一发题 目:专 业:班 级:学 号:学生姓名:指导教师: 年 月 日 Linux 下基于 QT 的黑白棋游戏软件设计与实现Black Linux; AI; QT目 录摘 要 IAbstract II目 录 III第 1 章 绪 论 11.1 黑白棋开发背景 11.2 黑白棋游戏简介 21.2.1 黑白棋规则 21.2.2 黑白棋战术分析 21.3 相关实现环境 31.3.1 开发环境 41.3.2 运行环境 41.3.3 硬件环境 41.4 主要研究内容 41.5 系统开发的现实意义 5第 2 章 开发工具 QT 62.1 QT 简介 62.2 QT 的使用 62.3 信号与槽 8第 3 章 黑白棋需求分析 113.1 黑白棋程序界面的需求 113.1.1 调查对比同类软件 113.1.2 确定需求 143.2 黑白棋游戏规则的需求 143.3 黑白棋程序的其它需求 15第 4 章 黑白棋程序设计 164.1 程序流程图 164.2 主要模块简介 17第 5 章 程序实现 195.1 界面实现 195.2 功能按钮的实现 215.3 程序主要函数 235.4 电脑战术分析 265.4.1 棋盘扫描 265.4.2 判断行动力 265.4.3 四角优先战术 275.4.4 选择最佳位置落子 27第 6 章 系统测试 286.1 双人模式下的测试 286.1.1 悔棋和悔棋恢复测试 286.1.2 PASS 情况下的悔棋恢复 306.1.3 游戏规则测试 316.1.4 终局测试 316.2 单人模式下的测试 326.2.1 PASS 情况的测试 326.2.2 游戏正常测试 326.2.3 悔棋测试 326.3 综合测试报告 32第 7 章 总结和展望 337.1 总结 337.2 展望 337.2.1 人工智能展望 337.2.2 Linux GUI 展望 34致 谢 35参考文献 36附 录 37附录 A: 主要源程序 37第 1 章 绪 论本章概述了黑白棋游戏开发的意义,以及对黑白棋的基本知识和相关开发环境做了一个简介。1.1 黑白棋开发背景随着网络技术的日新月异和计算机的普及,当今的计算机技术也走上了平民化和娱乐化的时代,计算机技术再也不是只能由少数人掌握的深不可测的学问;同时个人计算机也由原来单纯的数值计算和工业应用逐渐转变成像电视机一样的家庭娱乐中心,伴随着这种巨大的转变计算机软件的发展也走向了娱乐化。尤其是游戏产业的发展已经成为信息产业中发展势头最猛烈最具前景的一个分支,而游戏厅也渐渐被网吧挤出了正常的营业市场,游戏除了单纯的个人娱乐功能之外,也逐渐向互动的方向发展。游戏的功能不断按照玩家的需求和爱好扩展延伸进化,如今运行在各种平台上不同名称,不同内容,不同形式的游戏不仅仅为广大游戏爱好者提供了丰富的选择,而且为游戏开发商带来了丰厚的回报,游戏产业吸引着许多程序员去开发更多更新的游戏。基于游戏发展的历史和前景,我决定用 C+语言开发一款小游戏,游戏内容来自网络上日渐流行的一种智力游戏黑白棋。我希望把平时界面简单、选项复杂的游戏,在 Linux 里面做成漂亮的、简单的游戏程序,以给 Linux 玩家一个新的选择。人工智能是一门极富挑战性的科学,包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。例如繁重的科学和工程计算本来是要人脑来承担的, 现在计算机不但能完成这种计算, 而且能够比人脑做得更快、更准确, 因而当代人已不再把这种计算看作是“需要人类智能才能完成的复杂任务”, 可见复杂工作的定义是随着时代的发展和技术的进步而变化的, 人工智能这门科学的具体目标也自然随着时代的变化而发展。它一方面不断获得新的进展, 一方面又转向更有意义、更加困难的目标。目前能够用来研究人工智能的主要物质手段以及能够实现人工智能技术的机器就是计算机, 人工智能的发展历史是和计算机科学与技术的发展史联系在一起的。除了计算机科学以外, 人工智能还涉及信息论、控制论、自动化、仿生学、生物学、心理学、数理逻辑、语言学、医学和哲学等多门学科。随着计算机处理速度的飞速提高,人们很早就提出了疑问:计算机是否会超越人类?世界国际象棋棋王卡斯帕罗夫与美国 IBM 公司的 RS6000(深蓝)计算机系统于 1997 年 5 月 11 日进行了六局“人机大战”,结果“深蓝”以 3.5 比2.5 的总比分获胜。比赛结束了给人们留下了深刻的思考;下棋要获胜要求选手要有很强的思维能力、记忆能力、丰富的下棋经验,还得及时做出反应,迅速进行有效的处理,否则一着出错满盘皆输,这显然是个“智能”问题。尽管开发“深蓝”计算机的 IBM 专家也认为它离智能计算机还相差甚远,但它以高速的并行的计算能力(2r108 步秒棋的计算速度)。实现了人类智力的计算机上的部分模拟。那么计算机已经超过了人类吗?看完本文,相信你会对计算机棋手的智能有所了解。1.2 黑白棋游戏简介黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello),苹果棋,翻转棋。黑白棋起源中世纪的英国,18 世纪传入日本,并在日本得到了发展。现在,黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。有一种说法是:只需要几分钟学会它,却需要一生的时间去精通它。黑白棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。黑白棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。1.2.1 黑白棋规则1两人对弈,以轮流方式持黑子与白子。2开辟新局者持白子,加入者持黑子, 之后以轮流方式将棋子置于棋盘格子中。若无地方可下子,则跳过一回,由对方下子。3在提示的格子中,选择一个格子下子, 当下子的位置与离最近的同色旗子中, 若有其他棋子则中间的棋子变为与我方一样颜色。4当下满 64 个棋子,棋子多者为胜。1.2.2 黑白棋战术分析黑白棋规则规定对局结束时子多的一方为胜方,于是初学者通常会一开始使劲吃子,这实际上是犯了短视的错误。每一步都尽可能吃更多的子,我们把这种下法叫做大食策略(MAXIMUM DISC STRATEGY)。除了大食策略以外,还有其它几种常用的策略以及重要位置和术语,它们是:稳定子 - 位置策略(STABLE DISCS - POSITIONAL STRATEGY)楔入(WEDGES)行动力策略(MOBILITY)余裕手(TEMPO,WAITING MOVES)爬边(CREEPING ALONG EDGES) 奇偶性(PARITY) 非平衡边(UNBALANCED EDGES)四通陷阱(STONER TRAPS)从黑白棋的游戏规则上看,应该尽量使自己的棋子多于对手的,很容易就得到了一个战术,就是每步棋都落在能吃掉对手棋子最多的位置,但是经过几局后,你就会发现这并不是一个好的方法。那么黑白棋的正确战术应该是怎样的呢?一般说来,下棋过程中,你必须尽量削减对手的行动力,同时增加自己的行动力,这种策略我们称之为行动力原则(或行动力战术)。当一方达到或接近这个目标时,我们就称该棋手控制了棋局。另外,这个战术的目的是迫使对方下坏棋,如果对方虽然可选位置很少,但每一步却总有好棋,那战术目的就没有达成。记住,你必须让对方完全无好棋可下。 黑白棋规则规定只能在对方棋子相邻的空位下棋,这就可以推出另一个原则。对方棋子边上的空位越多,你下棋的选择也就越多,换句话说,你的行动力就越强;相反,如果你棋子边上的空位越少,对方可下的位置也就越少。我们把相邻位置上有空位的子称为外子,反之称为内子,连在一起的外子称为前线或墙。下棋时要尽量减少自己的外子。1.3 相关实现环境本程序采用 QT 库及其开发环境,使用 C+语言开发运行于 Linux 系统 KDE 桌面环境下的黑白棋游戏。经过实际检测,QT 强大的跨平台性,已经保证了同样的代码在 Windows XP 下、Linux GNOME 下、Linux KDE 下,几乎不用修改就能正常运行。1.3.1 开发环境qt-sdk-linux-x86-opensource-2009.01 (QT4.5)MinGW 编译器1.3.2 运行环境1. Linux 环境Fedora 10 Linux with KDEFedora 10 Linux with Gnome2. Windows 环境Microsoft Windows XP sp21.3.3 硬件环境AMD Sempron 2600+,1024M 内存,160G 硬盘1.4 主要研究内容本文将对计算机棋手下黑白棋做一个全面综述,介绍计算机对黑白棋战术分析的全过程,包括对图形和动画的处理、对棋盘搜索的算法、对棋局做出正确的估计、并生成最佳走法,并将介绍其中各个流程的研究状况及实用技术。本文的重点放在计算机对当前棋局的分析,并做出最佳的选择。介绍搜索算法,棋类游戏不可能一步就决出胜负,象棋中不可能第一步就将对方将死;而对某个棋局的判断也不可能完全精确,在黑白棋中,初局时棋子多并不一定最终取得胜利,因为对手可能在后面的博弈过程中将局面扭转。想想人类下棋时,一般会假设我走这步,那么对手会怎样回应,如果对手回应了某一步,我再走哪一步,如果对手回应了另外某一步,我又该怎么走;然后再假设我走另外的某一步,如此反复下去。这个过程叫做搜索。1.5 系统开发的现实意义利用这次毕业设计的机会可以熟悉 c+语言的各种特性,锻炼程序设计的实践能力,熟悉 c+语言 Linux 下的开发环境,熟悉前沿的 Linux 图形用户界面的开发,以及巩固数据结构和算法等课程的学习成果,并深入理解数据结构和算法在程序设计中的核心地位。同时,借助开发本游戏的过程,可以熟悉人工智能的程序实现,有助于掌握棋类所需人工智能的常见算法,随着游戏产业的日益壮大,人工智能在游戏中的突出表现,人工智能越来越得到世人的重视。在这次的人机对战算法中,通过一定的算法,实现电脑的下棋及走棋运作,加深了对人工智能工作原理的了解。综上所述,通过每次黑白棋的开发,可以深入了解 Linux 编程方法、加深了解AI 算法。第 2 章 开发工具 QT2.1 QT 简介Qt 是一个跨平台的 C+图形用户界面库,由挪威 TrollTech 公司出品,目前包括 Qt, 基于 Framebuffer 的 Qt Embedded,快速开发工具 Qt Designer,国际化工具 Qt Linguist 等部分 Qt 支持所有 Unix 系统,当然也包括 Linux,还支持 WinNT/Win2k,Win95/98 平台。1Qt 是一个多平台的 C+图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt 是完全面向对象的很容易扩展,并且允许真正地组件编程。自从 1996 年早些时候,Qt 进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt 也是流行的 Linux 桌面环境 KDE 的基础,KDE 是所有主要的 Linux 发行版的一个标准组件。基本上,Qt 同 X Window 上的 Motif、Openwin、GTK 等图形界面库和 Windows 平台上的 MFC、OWL、VCL、ATL 是同类型的东西,但是 Qt 具有下列优点:优良的跨平台特性:Qt 支持下列操作系统: Microsoft Windows 95/98、 Microsoft Windows NT、 linux、Solaris、SunOS、HP-UX、Digital UNIX (OSF/1、Tru64)、Irix、FreeBSD, BSD/OS、SCO、AIX、OS390、QNX 等等。面向对象:Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件之间的协同工作变得十分简单。丰富的 API:Qt 包括多达 250 个以上的 C+类,还提供基于模板的 collections、 serialization、file、I/O device、Directory management、date/time 类。甚至还包括正则表达式的处理功能。支持 2D/3D 图形渲染,支持 OpenGL。2.2 QT 的使用本文以一个最常用的例子 HelloWorld 的开发过程,作为 QT 编程的入门。2需要的代码如下:#include #include Int main( int argc, char *argv ) QApplication a( argc, argv ); QPushButton hello( “Hello world!“, 0 ); hello.resize( 300, 100 ); a.setMainWidget( hello.show(); return a.exec(); #include 代码解释:这一行包含了 QApplication 类的定义。在每一个使用 Qt 的应用程序中都必须使用一个 QApplication 对象。QApplication 管理了各种各样的应用程序的广泛资源,比如默认的字体和光标。 #include 这一行包含了 QPushButton 类的定义。参考文档的文件的最上部分提到了使用哪个类就必须包含哪个头文件的说明。 QPushButton 是一个经典的图形用户界面按钮,用户可以按下去,也可以放开。它管理自己的观感,就像其它每一个 QWidget。一个窗口部件就是一个可以处理用户输入和绘制图形的用户界面对象。程序员可以改变它的全部观感和它的许多主要的属性(比如颜色),还有这个窗口部件的内容。一个 QPushButton可以显示一段文本或者一个 QP main( int argc, char *argv )main()函数是程序的入口。几乎在使用 Qt 的所有情况下,main()只需要在把控制转交给 Qt 库之前执行一些初始化,然后 Qt 库通过事件来向程序告知用户的行为。argc 是命令行变量的数量,argv 是命令行变量的数组。这是一个 C/C+特征。它不是 Qt 专有的,无论如何 Qt 需要处理这些变量。 QApplication a( argc, argv )a 是这个程序的 QApplication。它在这里被创建并且处理这些命令行变量(比如在 X 窗口下的-display)。请注意,所有被 Qt 识别的命令行参数都会从argv 中被移除(并且 argc 也因此而减少)。接下来是编译:编译一个 C+应用程序,你需要创建一个 makefile。创建一个 Qt 的 makefile的最容易的方法是使用 Qt 提供的连编工具 qmake。如果你已经把 main.cpp 保存到它自己的目录了,你所要做的就是这些: qmake *.promake 第一个命令调用 qmake 来生成一个.pro(项目)文件。第二个命令根据这个项目文件来生成一个(系统相关的)makefile。你现在可以输入 make,然后运行你的第一个 Qt 应用程序! 运行后效果如图 2-1 所示图 2-1 QT 开发的 Hello World2.3 信号与槽QT 不同于其他开发工具的一个重要特点,就是信号与槽。信号和槽用于对象间的通讯。信号/槽机制是 Qt 的一个中心特征并且也许是 Qt与其它工具包的最不相同的部分。3在图形用户界面编程中,我们经常希望一个窗口部件的一个变化被通知给另一个窗口部件。更一般地,我们希望任何一类的对象可以和其它对象进行通讯。例如,如果我们正在解析一个 XML 文件,当我们遇到一个新的标签时,我们也许希望通知列表视图我们正在用来表达 XML 文件的结构。图 2-2 一个关于一些信号和槽连接的摘要图在 Qt 中我们有一种可以替代回调的技术。我们使用信号和槽。当一个特定事件发生的时候,一个信号被发射。Qt 的窗口部件有很多预定义的信号,但是我们总是可以通过继承来加入我们自己的信号。槽就是一个可以被调用处理特定信号的函数。Qt 的窗口部件又很多预定义的槽,但是通常的习惯是你可以加入自己的槽,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论