




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、人工智能课程设计五子棋1 .序言 31.1 五子棋简介31.2 五子棋的 AI构想32 .开发工具可行性解析53 .需求解析 64 .程序设计64.1 程序设计特点64.2 .程序整体设计75 .代码解析8初始化赋值系统85.2 初始化获胜组合95.3 重新设定玩家的获胜标志 95.4 办理鼠标事件 10获胜检查算法125.6 电脑算法(1) 145.7 电脑算法(2) 176 .心得领悟207 .参照文件 20人工智能也就是所谓的AI(Artificial Intelligence),它是一门很抽象的技术,AI程序的编写不需要依照任何既定的思虑模式也许规则。特别是游戏中的 AI可以完满依程序
2、设计者自己的思虑逻辑制作。我个人认为人工智能的核心应该是使计算机拥有自动的办理事件的能力,而我们的所有的研究也应该围绕着这一方向。我们今天谈论的是策略类的人工智能。策略类人工智能能够说是AI中比较复杂的一种,最常有的策略类AI游戏就是棋盘式游戏。在这类游戏中,平时的策略类AI程序都是使计算机判断当前情况下所有可走的棋与可能的获胜情况,并计算当前计算机可走棋步的获胜分数也许玩家可走棋步的获胜分数,尔后再决定出一个最正确走法。下面我们先介绍一下五子棋的AI构想。1.1 五子棋简介下面就五子棋的背景和规则做一些简单的介绍。五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“连珠”,英译为
3、 “Renju”,英文称之为 “Gobang ”或 “FIR"(Five in a Row 的缩写),亦有 “连五子”、“五子连”、“串珠”、“五目”、“五目碰”、 “五格”等多种称号。五子棋不但能加强思想能力,提高智力,而且富含真谛,有助于修身养性。五子棋既有现代休闲的显然特点“短、平、快”,又有古典哲学的高明学问“阴阳易理”;它既有简单易学的特点,为人民公众所喜闻乐道,又有高妙的技巧和高水平的国际性比赛;它的棋文化源渊流长,拥有东方的奇特和西方的直观;既有“场”的看法,亦有“点”的连接。它是中西文化的交流点,是古今真谛的结晶。五子棋的规则以下:棋盘:采用同围棋盘同样的 15路或1
4、9路线的棋盘,为了减小问题的规模,本系统将采用15路线的棋盘。下法:两人分别执黑白两色棋子,轮流在棋盘上选择一个无子的交织点落子。无子的交织点又被称为空点。输赢判断:黑、白两方有一方的5个棋子在横、竖或斜方向上连接成一线即为该方赢。1.2 五子棋的 AI构想在由AI所控制的计算机玩家上是不能立的,由于计算机必定知道有那些获胜方式,并计算出每下一步棋到棋盘上任一格子的获胜几率。一个完满的五子棋的AI构想必定:1、能够知道所有的获胜组合2、建立和使用获胜表3、设定获胜的分数4、使电脑拥有攻击和防守的能力(一),求五子棋的获胜组合在一场五子棋的游戏中,计算机必定要知道有那些的获胜组合,因此我们必须求
5、得获胜组合的总数。我们假定当前的棋盘为10*10 :1、计算水平方向的获胜组合数,每一列的获胜组合是:6,共10歹IJ,因此水平方向的获胜组合数为:6*10=602、计算垂直方向的获胜组合总数,每一行的获胜组合是:6,共10行,则垂直方向的获胜组合数为:6*10=603、计算正对角线方向的获胜组合总数,正对角线上的获胜组合总数为6+(5+4+3+2+1 ) *2=364、计算反对角线方向的获胜组合总数,反对角线上的获胜组合总数为6+(5+4+3+2+1 ) *2=36这样所有的获胜组合数为:60+60+36+36=192(二)、建立和使用获胜表我们已经计算出了一个10*10的五子棋盘会有 19
6、2种获胜方式, 这样我们可以利用数构建立获胜表,获胜表的主要作用是:1、判断当前的获胜方式可否有效;2、判断当前的获胜方式中终究有多少子落入该获胜组合中。详细的使用您将在 后边的程序中能够看出。(三)、分数的设定在游戏中为了让计算机能够决定下一步最正确的走法,必定先计算出计算机下 到棋盘上任一空格的分数,而其中最高分数即是计算机下一步的最正确走法。原理:我们判断当前谈论的空格与当前谈论的点有几种获胜的方式,有几种该空格就加几分。这类原理初听起来忧如是无法下手,没关系,当您认识我们后边的程序后您就会理解这类决策原理了。这类决策有一些弊端,由于若是只依照这个模型设计,就有可能出现电脑或玩家有三个子
7、连成一线的时候,计算机却判断不出,它认为其他某些空格是当前的 获胜的最正确地址而不去攻击或防守。没关系我们完满能够经过一个加强算法来改变当前的分值情况,也就是说当电脑或玩家有三个子或四个子连成一线时,我们经过加强算法将当前与三个子或四个子有关的空格的分值提高,从而能够填充这一缺憾。(四)、攻击与防守以上的方式,事实上计算机可是计算出了最正确的攻击地址,为了防守我们还应计算当前玩家的最正确的攻击地址。 这样有什么用呢?道理很简单, 若是玩家 最正确攻击地址的分数大于计算机最正确攻击地址上的分数,那么计算机就将下一步的棋子摆在玩家的最正确攻击位上以阻拦玩家的攻击,否则计算机便将棋子下在自己的最正确
8、攻击地址进步行攻击。事实上,这个AI构想是很富强的若是你不是很厉害的五子棋好手的话,可能 很快会被计算机战胜。我在联众上可是中级棋手啊,跟这类构想打的时候胜率也不是很高。二.开发工具可行性解析本程序采用开发工具它是 Visual B的简称。提到,就不能够不先 提一下Visual Basic是Windows环境下的一种简单、易学的编程语言,由于其开发程序的快速、高效,深受程序员的喜爱。VB.NET的特点:1、真切成为面向对象以及支持继承性的语言。2、窗体设计器支持可视化继承,而且包括了好多新的特点,比方自动改变窗体 大小、资源当地化支持、数据类工具内在支持 XML数据。3、直接建立在.NET的框
9、架结构上,因此开发人员能够充分利用所有.NET平台特点,也能够与其他的.NET语言交互。4、为Windows应用程序供应了 XCOPY部署,开发者不再需要为DLL的版本问题担忧。三.需求解析人工智能的第一大成就是下棋程序,在下棋程度中应用的某些技术,如向 前看几步,把困难的问题分解成一些较简单的子问题,发展成为搜寻和问题归纳这样的人工智能基本技术。今天的计算机程序已能够达到下各种方盘棋和国际象 棋的锦标赛水平。可是,还没有解决包括人类棋手拥有的但尚不能够明确表达的能力。 如国际象棋大师们洞察棋局的能力。另一个问题是涉及问题的原看法,在人工智能中叫问题表示的选择, 人们常能找到某种思虑问题的方法
10、,从而使求解变易而解决该问题。到当前为止,人工智能程序已能知道如何考虑它们要解决的问题, 即搜寻解答空间,搜寻较优解答。在设计本系统时考虑到用户需要的是一个操作简略界面简单的游戏软件。 同时要供应人机和人人这样的功能。特别是人机部分,要考虑到不同样级其他用户。 电脑智能不能够太低需要有必然的智能下棋功能。人机对战:选择和电脑棋战的等级操作,同样也能够执行网络联机的悔棋 等功能,可是由于是人机因此无需经过确认。四.程序设计游戏中供应两种选择模式:人机对战和人人对战。在人机对战中玩家经过选 择不同样的等级和电脑一决高低,能够向后悔棋。 在人人对战中两方经过选择一方作为服务器,经过弹出对话框设置当地
11、应用程序监听端口,而别的一方则作为客户端,经过连接服务器选项,在弹出的对话框中设置要连接的服务器的IP地址和端口号。当两方都提示连接成功后,两刚才能够进行下棋。如要悔棋则需要通过对方的赞成。同时还可以够实现在线聊天。AI的不同样样级是以不同样的搜寻深度确定的。4.1 程序设计特点五子棋游戏程序由于规则简单操作简略等特点,自然就成为程序员对人工智能研究的首选对象。因此网络上关于这类的程序好多,可是由于主要都是采用搜寻穷举技术作为解决方案,这将使得问题的规模变的很弘大如当搜寻深度为3时,每走一步电脑在将最坏的情况下需要搜寻的点将达225*225*225=11390625 个即使采用的剪枝技术,其某
12、些点的响应的时间也是让人无法忍受的,如开局时,由于这个时候每个点都是空的,没有能够剪枝的点,必定遍历真个盘面,所以很耗时间,大体需要 30多秒的时间,这个显然是不能接受的。为了程序设计和玩家的忍受时间的需要。不得不减小深度,因此绝大部分都采用深度为2的检 索,很显然深度越低系统的智力也相对的降低,需要代价的。本程序的一个主要特点是,采用了高效的优化方法,使得在同样的搜寻规模中所开销的计算时间大幅度的减小。响应时间显然获取提高。即使搜寻深度达到4的时候,其响应时间在绝大部分的情况下还是能够接受的。4.2 .程序整体设计结构设计的一条基根源理就是程序应该模块化,也就是一个大程序应该由许多规模适中的
13、模块按合理的层次结构组织而成。整体设计阶段的第二项主要任务就是设计软件的结构,也就是确定程序由哪些模块组成以及模块间的关系。平时用层次图或结构图描绘软件的结构。1、系统模型2、结构图五.代码解析这个阶段的任务还不是编写程序, 而是设计出程序的详细规格说明。 这类规 格说明的作用很近似于其他工程领域中工程师经常使用的工程宏图,它们应该包含必要的细节,程序员能够依照它们写出本质的程序代码。下面对该次设计中的主要代码进行做个解析:初始化赋值系统Sub initplayenvironment()player.FileName = ".musiczhyu01.mid”player.Play()
14、theplayflag = True游戏有效Label1.Visible = False游戏状态标签不显示PictureBox1.Refresh()清空picturebox1的内容 yuandian(130, 130)调用绘图函数绘制当前电脑先走 的地址Dim i, j, m, n As IntegerFori = 0 To 9Forj = 0 To 9table(i, j) = 0NextNext桌面初始化For i = 0 To 191pflag(i) = Truecflag(i) = TrueNext获胜标志初始化4,table(4, 4) = 1由于我们设定电脑先手,并下了4位因此将其
15、值设为 15.2 初始化获胜组合n = 0For i = 0 To 9 Forj = 0 To 5 For m = 0 To 4 pwin(j + m, i, n) = True cwin(j + m, i, n) = True Next n = n + 1 NextNext For i = 0 To 9 For j = 0 To 5 For m = 0 To 4 pwin(i, j + m, n) = True cwin(i, j + m, n) = True Next n = n + 1 Next Next For i = 0 To 5 For j = 0 To 5For m = 0 To
16、 4 pwin(j + m, i + m, n) = True cwin(j + m, i + m, n) = True Next n = n + 1 NextNext5.3 重新设定玩家的获胜标志由于电脑已下了 4, 4位因此我们需要重新设定玩家的获胜标志 For i = 0 To 5For j = 9 To 4 Step -1For m = 0 To 4pwin(j - m, i + m, n) = Truecwin(j - m, i + m, n) = TrueNextn = n + 1NextNextFor i = 0 To 191If pwin(4, 4, i) = True The
17、npflag(i) = FalseEnd IfNextEnd Sub5.4 办理鼠标事件Case 1 themousedown2、描绘:此函数主要实行以下功能:(1)判断当前游戏标志可否有效。(2)将本质坐标转变为虚假坐标。(3)绘制玩家的棋子。(4)执行检查获胜函数。(5)执行电脑算法函数。Sub themousedown(ByVal x As Integer, ByVal y As Integer)If theplayflag = False ThenExit SubEnd If检查游戏状态可否有效Dim i, j As IntegerDim zhx, zhy As Integerzhx
18、= Int(x - 10) / 30)zhy = Int(y - 10) / 30)For i = 0 To 9Forj = 0 To 9If table(zhx, zhy) > 0 ThenExit SubEnd IfNextNext/检查当前鼠标点击的格子可否有效Dim mycolor As ColorDim brush1 As System.Drawing.Brush = New SolidBrush(mycolor)g.FillEllipse(brush1, zhx * 30 + 10, zhy * 30 + 10, 30, 30)绘制玩家的棋子table(zhx, zhy) =
19、 2For i = 0 To 191If cwin(zhx, zhy, i) = True Thencflag(i) = FalseEnd IfNext重设电脑的获胜标志checkwin()检查当前玩家可否获胜diannao()/调用电脑算法End Sub获胜检查算法1、模块名称:checkwin2、描绘:此模块执行以下功能:(1)检查可否和棋。(2)检查电脑可否获胜。(3)检查玩家可否获胜。Sub checkwin()Dim i, j, k, m, n As IntegerDim ca As IntegerDim pa As IntegerDim cnormal As Integer = 0
20、For i = 0 To 191If cflag(i) = False Thencnormal = cnormal + 1End IfNextIf cnormal = 190 ThenLabel1.Visible = TrueLabel1.Text ="和棋,请重新开始!"PictureBox1.Refresh()theplayflag = FalseExit SubEnd If设定和棋规则For i = 0 To 191If cflag(i) = True Thenca = 0Forj = 0 To 9For k = 0 To 9If table(j, k) = 1 Th
21、enIf cwin(j, k, i) = True Thenca = ca + 1End IfEnd IfNextNextIf ca = 5 ThenLabel1.Visible = TrueLabel1.Text ="电脑获胜,请重新开始"PictureBox1.Refresh()theplayflag = FalseExit SubEnd IfEnd If检查电脑可否获胜NextFor i = 0 To 191If pflag(i) = True Thenpa = 0Forj = 0 To 9For k = 0 To 9If table(j, k) = 2 ThenIf
22、 pwin(j, k, i) = True Thenpa = pa + 1End IfEnd IfNextNextIf pa = 5 ThenLabel1.Visible = TrueLabel1.Text ="玩家获胜,请重新开始"PictureBox1.Refresh()theplayflag = FalseExit SubEn End IfNext检查玩家可否获胜End Sub5.6电脑算法(1)1、模块名称:diannao2描绘:此程序主要执行以下功能:(1)初始化赋值系统。(2)赋值加强算法。(3)计算电脑和玩家的最正确攻击位。(4)比较电脑和玩家的最正确攻击位并
23、决定电脑的最正确策略。(5)执行检查获胜函数。Sub diannao()Dim i, j, k, m, n As IntegerDim dc As IntegerDim cab As IntegerDim pab As IntegerFor i = 0 To 9Forj = 0 To 9pscore(i, j) = 0cscore(i, j) = 0NextNext初始化赋值数组For i = 0 To 191If cflag(i) = True Thencab = 0Forj = 0 To 9For k = 0 To 9If table(j, k) = 1 ThenIf cwin(j, k,
24、 i) = True Thencab = cab + 1End IfNextNextSelect Case cabCase 3For m = 0 To 9For n = 0 To 9If table(m, n) = 0 ThenIf cwin(m, n, i) = True Then cscore(m, n) = cscore(m, n) + 5End IfEnd IfNextNextCase 4For m = 0 To 9For n = 0 To 9If table(m, n) = 0 ThenIf cwin(m, n, i) = True Then yuandian(m * 30 + 10
25、, n * 30 + 10) table(m, n) = 1For dc = 0 To 191If pwin(m, n, dc) = True Then pflag(dc) = False checkwin()Exit SubEnd IfNextEnd IfEnd IfNextNextEnd SelectEnd IfNextFor i = 0 To 191If pflag(i) = True Thenpab = 0For j = 0 To 9For k = 0 To 9If table。,k) = 2 ThenIf pwin(j, k, i) = True Thenpab = pab + 1E
26、nd IfEnd IfNextNextSelect Case pabCase 3For m = 0 To 9For n = 0 To 9If table(m, n) = 0 ThenIf pwin(m, n, i) = True Then pscore(m, n) = pscore(m, n) + 30End IfEnd IfNextNextCase 4For m = 0 To 9For n = 0 To 9If table(m, n) = 0 ThenIf pwin(m, n, i) = True Then yuandian(m * 30 + 10, n * 30 + 10) table(m
27、, n) = 1For dc = 0 To 191If pwin(m, n, dc) = True Then pflag(dc) = False checkwin()Exit SubEnd IfNextEnd IfEnd IfNextNextEnd SelectEnd IfNext5.7电脑算法(2)1、赋值系统For i = 0 To 191If cflag(i) = True ThenForj = 0 To 9For k = 0 To 9If table(j, k) = 0 ThenIf cwin(j, k, i) = True ThenFor m = 0 To 9For n = 0 To
28、 9If table(m, n) = 1 ThenIf cwin(m, n, i) = True Then cscore(j, k) = cscore(j, k) + 1End IfEnd IfNextNextEnd IfEnd IfNextNextEnd IfNextFor i = 0 To 191If pflag(i) = True ThenForj = 0 To 9For k = 0 To 9If table(j, k) = 0 ThenIf pwin(j, k, i) = True ThenFor m = 0 To 9For n = 0 To 9If table(m, n) = 2 ThenIf pwin(m, n, i) = True Then pscore(j, k) = pscore(j, k) + 1End IfEnd IfNextNextEnd IfEnd IfNextNe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 咨询服务协议书样本
- 解析卷-北师大版8年级数学上册期中试题及参考答案详解(B卷)
- 2025版电子信息设备融资租赁委托合同样本
- 2025年度国内高端柴油批发与物流配送合作合同
- 2025版城镇化改造土方工程劳务分包合同范本
- 2025版住宅小区改造工程委托施工合同
- 2025版企业间融资租赁借款合同汇编
- 2025年度智能停车场设备安装与租赁合同样本
- 2025年度城市公共交通系统采购框架合同
- 2025年度典当借款与艺术品市场风险管理服务协议
- 土壤肥料学课件
- 人教版数学一年级上册全册教学课件
- 影视鉴赏-第六章-影视艺术的鉴赏与评论
- 2024高海拔地区模块化增压式建筑技术标准
- 仓库消防知识培训课件
- 重症护理的护理课件
- 医务科医疗质控记录范文
- 《电梯企业介绍》课件
- BG转子式干燥机说明指导书
- 关于规范学校中层及以上领导干部岗位设置及任免办法
- 劳务分包合同示范文
评论
0/150
提交评论