您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > vb6.0人工只能五子棋算法
文档从互联网中收集,已重新修正排版,word格式支持编辑,如有帮助欢迎下载支持。目录目录...........................................................................................................................错误!未定义书签。引言...........................................................................................................................错误!未定义书签。第一部分五子棋的AI构想...................................................................................错误!未定义书签。1.1求五子棋的获胜组合.....................................................................................错误!未定义书签。1.2建立和使用获胜表........................................................................................错误!未定义书签。1.3分数的设定....................................................................................................错误!未定义书签。1.4攻击与防守....................................................................................................错误!未定义书签。第二部分使用VB6.0编写五子棋.......................................................................错误!未定义书签。2.1编写前的准备................................................................................................错误!未定义书签。..........................................................................................................................错误!未定义书签。..........................................................................................................................错误!未定义书签。..........................................................................................................................错误!未定义书签。2.2声明全局数组和变量.....................................................................................错误!未定义书签。2.3初始化游戏.....................................................................................................错误!未定义书签。2.4处理鼠标事件.................................................................................................错误!未定义书签。2.5获胜检查算法.................................................................................................错误!未定义书签。2.6电脑算法.........................................................................................................错误!未定义书签。2.7绘制棋子.........................................................................................................错误!未定义书签。iword格式支持编辑,如有帮助欢迎下载支持。引言五子棋游戏以其优秀的人工智能深受广大玩家的喜爱,而对于初步探究人工智能的编程爱好者来说,编制五子棋程序因其规则简单而大受欢迎,然而它却要求程序员对五子棋规则有相当深入的了解。程序员考虑得越周到,其五子棋程序就越智能。五子棋游戏软件设计的主要内容是:根据五子棋的基本规则,要让电脑知道该在哪一点下子,就要根据盘面的形势,为每一个可能落子的点分别计算其重要程度,也就是该点的分值,然后通览全盘随机选出数值最大的一点,因为有时候分值最大的一点可能不止一个,计算机随机选择分值最大的一点,可以保证它在每盘棋中选择的落子点的位置有所不同,因此玩家不会用同一种棋局反复赢计算机。人工智能也就是所谓的AI(ArtificialIntelligence),它是一门很抽象的技术,AI程序的编写不需要依据任何既定的思考模式或者规则。尤其是游戏中的AI可以完全依程序设计者本身的思考逻辑制作。我个人认为人工智能的核心应该是使计算机具有自动的处理事件的能力,而我们的所有的研究也应该围绕着这一方向。我们今天讨论的是策略类的人工智能。策略类人工智能可以说是AI中比较复杂的一种,最常见的策略类AI游戏就是棋盘式游戏。在这类游戏中,通常的策略类AI程序都是使计算机判断目前状况下所有可走的棋与可能的获胜状况,并计算当前计算机可走棋步的获胜分数或者玩家可走棋步的获胜分数,然后再决定出一个最佳走法。下面我们先介绍一下五子棋的AI构想第一部分五子棋的AI构想有句话叫“当局者迷,旁观者清。”,但这句话在由AI所控制的计算机玩家上是不成立的,因为计算机必须知道有那些获胜方式,并计算出每下一步棋到棋盘上任一格子的获胜几率,也就是说,一个完整的五子棋的AI构想必须:1,能够知道所有的获胜组合,2,建立和使用获胜表,3,设定获胜的分数,4,使电脑具有攻击和防守的能力。1.1求五子棋的获胜组合在一场五子棋的游戏中,计算机必须要知道有那些的获胜组合,因此我们必须求得获胜组合的总数。我们假定当前的棋盘为10*10。(1),计算水平方向的获胜组合数,每一列的获胜组合是:6,共10列,所以水平方向的获胜组合数为:6*10=60。(2),计算垂直方向的获胜组合总数,每一行的获胜组合是:6,共10行,则垂直方向的获胜组合数为:6*10=60。(3),计算正对角线方向的获胜组合总数,正对角线上的获胜组合总数为6+(5+4+3+2+1)*2=36。(4),计算反对角线方向的获胜组合总数,反对角线上的获胜组合总数为6+(5+4+3+2+1)*2=36。这样所有的获胜组合数为:60+60+36+36=192。1.2建立和使用获胜表我们已经计算出了一个10*10的五子棋盘会有192种获胜方式,这样我们可以利用数组建立获胜表,获胜表的主要作用是:1,判断当前的获胜方式是否有效;2,判断当前的获胜方式中到底有多少子落入该获胜组合中。详细的使用您将在后面的程序中可以看出。1.3分数的设定在游戏中为了让计算机能够决定下一步最佳的走法,必须先计算出计算机下到棋盘上任一空格的分数,而其中最高分数便是计算机下一步的最佳走法。原理:我们判定当前讨论的空格与当前讨论的点有几种获胜的方式,有几种该空格就加几分。这种原理初听起来似乎是无法入手,没关系,当您了解我们后面的程序后您就会明白这种决策原理了。这种决策有一些缺陷,因为如果只根据这个模型设计,就有可能出现电脑或玩家有三个子连成一线的时候,计算机却判断不出,它认为其他某些空格是当前的获胜的最佳位置而不去攻击或防守。没关系我们完全可以通过一个加强算法来改变当前的分值情况,也就是说当电脑或玩家有三个子或四个子连成一线时,我们通过加强算法将当前与三个子或四个子有关的空格的分值提高,从而可以弥补这一缺憾。1.4攻击与防守以上的方式,事实上计算机只是计算出了最佳的攻击位置,为了防守我们还应计算当前玩家的最佳的攻击位置。这样有什么用呢?道理很简单,如果玩家最佳攻击位置的分数大于计算机最佳攻击位置上的分数,那么计算机就将下一步的棋子摆在玩家的最佳攻击位上以阻止玩家的进攻,否则计算机便将棋子下在自己的最佳攻击位置上进行攻击。事实上,这个AI构想是很强大的如果你不是很厉害的五子棋高手的话,可能很快会被计算机打败。我在联众上可是中级棋手啊,跟这种构想打的时候胜率也不是很高。第二部分使用vb6.0编写五子棋2.1编写前的准备考虑步骤:(1)为了简便我们可以先让电脑先走第一步棋,电脑每走一步就会封掉许多玩家的获胜可能情况。(2)当玩家走棋的时候我们首先应该考虑玩家走棋的合法性。(3)如果合法,那么玩家也会封掉许多电脑的获胜的可能情况。(4)电脑的思考路径:首先判断当前玩家和电脑的所有获胜组合是否需要进行加强赋值,是进行加强赋值,否则进行普通的赋值。(5)比较当前玩家和电脑谁的分值最大。将分值最大的点作为电脑的下一步走法。(1)添加一个picturebox控件。作用:使用picturebox控件绘制棋子和棋盘(2)添加一个label控件。作用:显示当前的获胜标志,也就是当某一方获胜或和棋时显示此标签。(3)添加一个mainmenu控件。作用:控制游戏的开始或结束。(4)添加一个播放音乐组件。作用:使程序可以播放音乐。我们采取10*10的棋盘,为主要的平台。利用数组定义整个棋盘桌面,利用数组定义获胜组合以及获胜标志等。2.2声明全局数组和变量定义虚拟桌面:Dimtable(9,9)AsInteger定义当前玩家桌面空格的分数:Dimpscore(9,9)AsInteger定义当前电脑桌面空格的分数:Dimcscore(9,9)AsInteger定义玩家的获胜组合:Dimpwin(9,9,191)AsBoolean定义电脑的获胜组合:Dimcwin(9,9,191)AsBoolean定义玩家的获胜组合标志:Dimpflag(191)AsBoolean定义电脑的获胜组合标志:Dimcflag(191)AsBoolean定义游戏有效标志:DimtheplayflagAsBoolean2.3初始化游戏'*****************************************************************************'**模块名称:initplayenvironment'**'**描述:此函数主要功能如下:'**1.设置背景音乐。'**2.设置游戏状态有效。'**3.初始化游戏状态标签。'**4.直接指定电脑的第一步走法。'**5.初始化基本得分桌面。'**6.电脑和玩家获胜标志初始化。'**7.初始化所有获胜组合。'**8.重新设定玩家的获胜标志。'**'**********************************************************
本文标题:vb6.0人工只能五子棋算法
链接地址:https://www.777doc.com/doc-8761636 .html