人工智能课程设计五子棋文档格式.docx
《人工智能课程设计五子棋文档格式.docx》由会员分享,可在线阅读,更多相关《人工智能课程设计五子棋文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;
它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;
它的棋文化源渊流长,具有东方的神秘和西方的直观;
既有“场”的概念,亦有“点”的连接。
它是中西文化的交流点,是古今哲理的结晶。
五子棋的规则如下:
棋盘:
采用同围棋盘一样的15路或19路线的棋盘,为了减小问题的规模,本系统将采用15路线的棋盘。
下法:
两人分别执黑白两色棋子,轮流在棋盘上选择一个无子的交叉点落子。
无子的交叉点又被称为空点。
输赢判断:
黑、白双方有一方的5个棋子在横、竖或斜方向上连接成一线即为该方赢。
五子棋的AI构想
在由AI所控制的计算机玩家上是不成立的,因为计算机必须知道有那些获胜方式,并计算出每下一步棋到棋盘上任一格子的获胜几率。
一个完整的五子棋的AI构想必须:
1、能够知道所有的获胜组合
2、建立和使用获胜表
3、设定获胜的分数
4、使电脑具有攻击和防守的能力
(一),求五子棋的获胜组合
在一场五子棋的游戏中,计算机必须要知道有那些的获胜组合,因此我们必须求得获胜组合的总数。
我们假定当前的棋盘为10*10:
1、计算水平方向的获胜组合数,每一列的获胜组合是:
6,共10列,所以水平方向的获胜组合数为:
6*10=60
2、计算垂直方向的获胜组合总数,每一行的获胜组合是:
6,共10行,则垂直方向的获胜组合数为:
3、计算正对角线方向的获胜组合总数,正对角线上的获胜组合总数为6+(5+4+3+2+1)*2=36
4、计算反对角线方向的获胜组合总数,反对角线上的获胜组合总数为6+(5+4+3+2+1)*2=36
这样所有的获胜组合数为:
60+60+36+36=192
(二)、建立和使用获胜表
我们已经计算出了一个10*10的五子棋盘会有192种获胜方式,这样我们可以利用数组建立获胜表,
获胜表的主要作用是:
1、判断当前的获胜方式是否有效;
2、判断当前的获胜方式中到底有多少子落入该获胜组合中。
详细的使用您将在后面的程序中可以看出。
(三)、分数的设定
在游戏中为了让计算机能够决定下一步最佳的走法,必须先计算出计算机下到棋盘上任一空格的分数,而其中最高分数便是计算机下一步的最佳走法。
原理:
我们判定当前讨论的空格与当前讨论的点有几种获胜的方式,有几种该空格就加几分。
这种原理初听起来似乎是无法入手,没关系,当您了解我们后面的程序后您就会明白这种决策原理了。
这种决策有一些缺陷,因为如果只根据这个模型设计,就有可能出现电脑或玩家有三个子连成一线的时候,计算机却判断不出,它认为其他某些空格是当前的获胜的最佳位置而不去攻击或防守。
没关系我们完全可以通过一个加强算法来改变当前的分值情况,也就是说当电脑或玩家有三个子或四个子连成一线时,我们通过加强算法将当前与三个子或四个子有关的空格的分值提高,从而可以弥补这一缺憾。
(四)、攻击与防守
以上的方式,事实上计算机只是计算出了最佳的攻击位置,为了防守我们还应计算当前玩家的最佳的攻击位置。
这样有什么用呢?
道理很简单,如果玩家最佳攻击位置的分数大于计算机最佳攻击位置上的分数,那么计算机就将下一步的棋子摆在玩家的最佳攻击位上以阻止玩家的进攻,否则计算机便将棋子下在自己的最佳攻击位置上进行攻击。
事实上,这个AI构想是很强大的如果你不是很厉害的五子棋高手的话,可能很快会被计算机打败。
我在联众上可是中级棋手啊,跟这种构想打的时候胜率也不是很高。
二.开发工具可行性分析
本程序采用开发工具它是Visual的简称。
提到,就不能不先提一下VisualBasic是Windows环境下的一种简单、易学的编程语言,由于其开发程序的快速、高效,深受程序员的喜爱。
的特点:
1、真正成为面向对象以及支持继承性的语言。
2、窗体设计器支持可视化继承,并且包含了许多新的特性,比如自动改变窗体大小、资源本地化支持、数据类工具内在支持XML数据。
3、直接建立在.NET的框架结构上,因此开发人员可以充分利用所有.NET平台特性,也可以与其他的.NET语言交互。
4、为Windows应用程序提供了XCOPY部署,开发者不再需要为DLL的版本问题担忧。
三.需求分析
人工智能的第一大成就是下棋程序,在下棋程度中应用的某些技术,如向前看几步,把困难的问题分解成一些较容易的子问题,发展成为搜索和问题归纳这样的人工智能基本技术。
今天的计算机程序已能够达到下各种棋和国际象棋的水平。
但是,尚未解决包括人类棋手具有的但尚不能明确表达的能力。
如们洞察棋局的能力。
另一个问题是涉及问题的原概念,在人工智能中叫问题表示的选择,人们常能找到某种思考问题的方法,从而使求解变易而解决该问题。
到目前为止,人工智能程序已能知道如何考虑它们要解决的问题,即搜索解答空间,寻找较优解答。
在设计本系统时考虑到用户需要的是一个操作简便界面简单的游戏软件。
同时要提供人机和人人这样的功能。
特别是人机部分,要考虑到不同级别的用户。
电脑智能不能太低需要有一定的智能下棋功能。
人机对战:
选择和电脑对弈的等级操作,同样也可以执行网络联机的悔棋等功能,只是因为是人机所以无需通过确认。
四.程序设计
游戏中提供两种选择模式:
人机对战和人人对战。
在人机对战中玩家通过选择不同的等级和电脑一决高下,可以向后悔棋。
在人人对战中双方通过选择一方作为服务器,通过弹出对话框设置本地应用程序监听端口,而另外一方则作为客户端,通过连接服务器选项,在弹出的对话框中设置要连接的服务器的IP地址和端口号。
当双方都提示连接成功后,两方才可以进行下棋。
如要悔棋则需要通过对方的同意。
同时还可以实现在线聊天。
AI的不同等级是以不同的搜索深度确定的。
程序设计特点
五子棋游戏程序由于规则简单操作简便等特点,自然就成为程序员对人工智能研究的首选对象。
所以网络上关于这类的程序很多,但是由于主要都是采用搜索穷举技术作为解决方案,这将使得问题的规模变的很庞大如当搜索深度为3时,每走一步电脑在将最坏的情况下需要搜索的点将达225*225*225=个。
即使采用的剪枝技术,其某些点的响应的时间也是让人无法忍受的,如开局时,因为这个时候每个点都是空的,没有可以剪枝的点,必须遍历真个盘面,所以很耗时间,大约需要30多秒的时间,这个显然是不可接受的。
为了程序设计和玩家的忍受时间的需要。
不得不减小深度,所以绝大部分都采用深度为2的检索,很明显深度越低系统的智力也相对的降低,需要代价的。
本程序的一个主要特点是,采用了高效的优化方法,使得在相同的搜索规模中所花费的计算时间大幅度的减小。
响应时间明显得到提高。
即使搜索深度达到4的时候,其响应时间在绝大部分的情况下还是可以接受的。
.程序总体设计
结构设计的一条基本原理就是程序应该模块化,也就是一个大程序应该由许多规模适中的模块按合理的层次结构组织而成。
总体设计阶段的第二项主要任务就是设计软件的结构,也就是确定程序由哪些模块组成以及模块间的关系。
通常用层次图或结构图描绘软件的结构。
1、系统模型
选择操作
调用
2、结构图
五.代码分析
这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明。
这种规格说明的作用很类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包含必要的细节,程序员可以根据它们写出实际的程序代码。
下面对该次设计中的主要代码进行做个分析:
初始化赋值系统
Sub
initplayenvironment()
=
"
.\music\"
()
theplayflag
True
//游戏有效
False
//游戏状态标签不显示
//清空picturebox1的内容
yuandian(130,
130)
//调用绘图函数绘制当前电脑先走的位置
Dim
i,
j,
m,
n
As
Integer
For
i
0
To
9
j
table(i,
j)
0
Next
//桌面初始化
191
pflag(i)
cflag(i)
//获胜标志初始化
table(4,
4)
1
//由于我们设定电脑先手,并下了4,4位所以将其值设为1
初始化获胜组合
5
m
4
pwin(j
+
n)
cwin(j
pwin(i,
cwin(i,
重新设定玩家的获胜标志
由于电脑已下了4,4位所以我们需要重新设定玩家的获胜标志
9
4
Step
-1
-
If
pwin(4,
4,
i)
True
Then
End
If
Sub
处理鼠标事件
1、模块名称:
themousedown
2、描述:
此函数主要实行以下功能:
(1)判定当前游戏标志是