1人工智能课程设计--五子棋姓名张茜班级计算机0953学号09010853182摘要本系统将利用五子棋游戏作为研究对象,通过设计出一个能够实现对战模式的五子棋游戏。并对所涉及到的相关技术进行初步的探讨,将重点放在人机对奕中AI算法研究方面。游戏中提供两种选择模式:人机对战和人人对战。在人机对战中玩家通过选择不同的AI等级和电脑一决高下。在人人对战中双方可以进行下棋,悔棋但要通过对方的同意。同时还可以实现在线聊天。AI的不同等级是以不同的搜索深度确定的。本系统以深度为2,3,4分别为初级,中级,高级。策略类人工智能可以说是AI中比较复杂的一种,最常见的策略类AI游戏就是棋盘式游戏。在这类游戏中,通常的策略类AI程序都是使计算机判断目前状况下所有可走的棋与可能的获胜状况,并计算当前计算机可走棋步的获胜分数或者玩家可走棋步的获胜分数,然后再决定出一个最佳走法。关键字:五子棋、博奕AI算法3目录第一章引言...................................................................................................................................41.1五子棋简介.........................................................................................................................41.2五子棋的AI构想..............................................................................................................5第二章详细设计过程...................................................................................................................72.1概要介绍.............................................................................................................................72.1.1程序设计..................................................................................................................72.1.2程序特点..................................................................................................................72.2可行性分析报告.................................................................................................................82.2.1开发工具可行性分析..............................................................................................82.2.2算法可行性分析......................................................................................................82.2.3需求分析.................................................................................................................82.2.4总体设计..................................................................................................................9第三章代码分析...........................................................................................................................103.1初始化赋值系统...............................................................................................................103.2初始化获胜组合...............................................................................................................113.3重新设定玩家的获胜标志...............................................................................................113.4处理鼠标事件...................................................................................................................123.5获胜检查算法..................................................................................................................143.6电脑算法(1)......................................................................................................................163.7电脑算法(2).................................................................................................................194第一章引言人工智能也就是所谓的AI(ArtificialIntelligence),它是一门很抽象的技术,AI程序的编写不需要依据任何既定的思考模式或者规则。尤其是游戏中的AI可以完全依程序设计者本身的思考逻辑制作。我个人认为人工智能的核心应该是使计算机具有自动的处理事件的能力,而我们的所有的研究也应该围绕着这一方向。我们今天讨论的是策略类的人工智能。策略类人工智能可以说是AI中比较复杂的一种,最常见的策略类AI游戏就是棋盘式游戏。在这类游戏中,通常的策略类AI程序都是使计算机判断目前状况下所有可走的棋与可能的获胜状况,并计算当前计算机可走棋步的获胜分数或者玩家可走棋步的获胜分数,然后再决定出一个最佳走法。下面我们先介绍一下五子棋的AI构想。1.1五子棋简介下面就五子棋的背景和规则做一些简单的介绍。五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“连珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(FiveinaRow的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。五子棋的规则如下:棋盘:采用同围棋盘一样的15路或19路线的棋盘,为了减小问题的规模,本系统将采用15路线的棋盘。下法:两人分别执黑白两色棋子,轮流在棋盘上选择一个无子的交叉点落子。无子的交叉点又被称为空点。输赢判断:黑、白双方有一方的5个棋子在横、竖或斜方向上连接成一线即为该方赢。51.2五子棋的AI构想在由AI所控制的计算机玩家上是不成立的,因为计算机必须知道有那些获胜方式,并计算出每下一步棋到棋盘上任一格子的获胜几率。一个完整的五子棋的AI构想必须:1、能够知道所有的获胜组合2、建立和使用获胜表3、设定获胜的分数4、使电脑具有攻击和防守的能力一,求五子棋的获胜组合在一场五子棋的游戏中,计算机必须要知道有那些的获胜组合,因此我们必须求得获胜组合的总数。我们假定当前的棋盘为10*10:1、计算水平方向的获胜组合数,每一列的获胜组合是:6,共10列,所以水平方向的获胜组合数为: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的五子棋盘会有192种获胜方式,这样我们可以利用数组建立获胜表,获胜表的主要作用是:1、判断当前的获胜方式是否有效;2、判断当前的获胜方式中到底有多少子落入该获胜组合中。详细的使用您将在后面的程序中可以看出。三、分数的设定6在游戏中为了让计算机能够决定下一步最佳的走法,必须先计算出计算机下到棋盘上任一空格的分数,而其中最高分数便是计算机下一步的最佳走法。原理:我们判定当前讨论的空格与当前讨论的点有几种获胜的方式,有几种该空格就加几分。这种原理初听起来似乎是无法入手,没关系,当您了解我们后面的程序后您就会明白这种决策原理了。这种决策有一些缺陷,因为如果只根据这个模型设计,就有可能出现电脑或玩家有三个子连成一线的时候,计算机却判断不出,它认为其他某些空格是当前的获胜的最佳位置而不去攻击或防守。没关系我们完全可以通过一个加强算法来改变当前的分值情况,也就是说当电脑或玩家有三个子或四个子连成一线时,我们通过加强算法将当前与三个子或四个子有关的空格的分值提高,从而可以弥补这一缺憾。四、攻击与防守以上的方式,事实上计算机只是计算出了最佳的攻击位置,为了防守我们还应计算当前玩家的最佳的攻击位置。这样有什么用呢?道理很简单,如果玩家最佳攻击位置的分数大于计算机最佳攻击位置上的分数,那么计算机就将下一步的棋子摆在玩家的最佳攻击位上以阻止玩家的进攻,否则计算机便将棋子下在自己的最佳攻击位置上进行攻击。事实上,这个AI构想是很强大的如果你不是很厉害的五子棋高手的话,可能很快会被计算机打败。我在联众上可是中级棋手啊,跟这种构想打的时候胜率也不是很高。7第二章详细设计过程2.1概要介绍2.1.1程序设计游戏中提供两种选择模式:人机对战和人人对战。在人机对战中玩家通过选择不同的等级和电脑一决高下,可以向后悔棋。在人人对战中双方通过选择一方作为服务器,通过弹出对话框设置本地应用程序监听端口,而另外一方则作为客户端,通过连接服务器选项,在弹出的对话框中设置要连接的服务器的IP地址和端口号。当双方都提示连接成功后,两方才可以