1 / 8
文档名称:

五子棋几种算法详解.doc

格式:doc   大小:221KB   页数:8页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

五子棋几种算法详解.doc

上传人:xxq93485240 2019/4/21 文件大小:221 KB

下载得到文件列表

五子棋几种算法详解.doc

文档介绍

文档介绍:算法一:这里讲述棋盘大小为10×10的人机对战五子棋实现方法,要看完整代码请看Java做的五子棋1.  概述玩家每走一步,对于玩家和计算机,都根据获胜表对棋盘各个空棋位进行评分,每个位置的分数与下面这句话有关:该位置所在的每一种获胜组合中已经拥有的棋子数,然后对玩家和计算机产生的分数均衡,以判断计算机是进攻还是防守。2. 数据结构10×10的数据,用来记录棋盘状态;两个获胜表([10][10][192]),也就是获胜组合,因为五个子一线则胜,不在一线上的五个子就不在一个组合中,对于10×10的棋盘获胜的组合有192种,下面将会详细说明,获胜表用来表示棋盘上的每个位置是否在玩家或计算机的获胜组合中;一个二维数组([2][192]),记录玩家与计算机在各种获胜组合中填入了多少棋子;两个10×10的数组,用来记录玩家与计算机在各个棋盘位置上的分数,分数高的将是计算机下一步的着法。 3.  计算获胜组合●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●上图是一个10×10的五子棋棋盘,我们可以得出垂直方向上的获胜组合是10×6=60,同理,水平方向的获胜组合也是60,而两个倾斜方向上的获胜组合是(1+2+3+4+5)×2+6=36,即:60*2+36*2=192。4.  评分用两个数组存储每个棋位的分数,一个是计算机的,另一个是玩家的,表示该位置对于各方是最佳着法的肯定程度,对一个位置的评分就是:遍历该位置所在的每一种获胜组合,根据这个组合中已经拥有的己方棋子数1到4分别加不同分数,最后将这些所有的获胜组合所得出的分数相加就是该位置的分数,下图是对于黑方各棋位的评分(其中的1,2,3,4这几个值要根据实际需要来确定)。010001000100200100200003010300000041400001234●432100004●400000030003000020000020010000000100000000005. 思路算法二:1.  关键词棋位:棋盘的任意一个能放置棋子的位置。空棋位:没有放置棋子的棋位。成五:同一色的五子连成一线,胜利。活四:同一色的四子连成一线,且四子的两端是空棋位。双三:出现两次下面这种情况:同一色的三子连成一线,一端为空棋位或同一色的子,另一端为空棋位。我们关心的是当在一空棋位上放上一棋子是否构成“成五”、“活四”、“双三”。下面三个图分别是成五、活四、双三:●●●●●●●●●●●●●●●●2. 基本思想电脑下子前对当前棋盘格局进行评分,当前棋盘格局的分数等于“当前棋盘中空棋位分数的最大值”。当前棋盘中空棋位分数等于“在该空棋位放上棋子后所构成棋子排列局面的分数,分数取值的大小顺序分别是成五、活四、双三和不构成以上三种情况的最佳走法”) 各分数常量staticvarwinningMove=9999999;//成五staticvaropenFour=8888888;//活四staticvartwoThrees=7777777;//双三staticvarlineN:Array=newArray(0,20,17,,14,10);//相隔0、1、2、3、