五子棋评分表算法

最近学了一点QT的绘图,因而乎照着学长的代码绘制了五子棋的小游戏。算法

最基础的东西这里就不说了,本身的知识也仅仅比会用多那么一点,下面咱们来讲说这里貌似高大上的人机AI吧。编程


评分表算法数组

通常状况下棋盘是15*15的。那么应该是572个五元组。而这五元组由黑棋白棋还有空格组成。也就是 3^5 * 572 = 138996; 看着不少吧,实际上是能够分类的。每一个五元组就是一种局势。.net

咱们只用统计只有己方棋子的局势,以及只有敌方棋子的局势,针对这两种局势给予肯定的评分,而其余局势直接评分为0。code

下面是我使用的是评分表
blog

    // tuple is empty  
    Blank,  
    // tuple contains a black chess  
    B,  
    // tuple contains two black chesses  
    BB,  
    // tuple contains three black chesses  
    BBB,  
    // tuple contains four black chesses  
    BBBB,  
    // tuple contains a white chess  
    W,  
    // tuple contains two white chesses  
    WW,  
    // tuple contains three white chesses  
    WWW,  
    // tuple contains four white chesses  
    WWWW,  
    // tuple does not exist  
    Virtual,  
    // tuple contains at least one black and at least one white  
    Polluted  
      
      
    tupleScoreTable[0] = 7;  
    tupleScoreTable[1] = 35;  
    tupleScoreTable[2] = 800;  
    tupleScoreTable[3] = 15000;  
    tupleScoreTable[4] = 800000;  
    tupleScoreTable[5] = 15;  
    tupleScoreTable[6] = 400;  
    tupleScoreTable[7] = 1800;  
    tupleScoreTable[8] = 100000;  
    tupleScoreTable[9] = 0;  
    tupleScoreTable[10] = 0;  

不少人可能没看懂,其实就是当前五元组中黑白棋子个数以及对应的得分,tupleScoreTable[0] 对应 没有棋子的得分,tupleScoreTable[1 - 4] 表明 1个黑棋 到 4个黑棋的得分, tupleScoreTable[5 - 8]表明 1 个白棋到4个白棋的得分,tupleScoreTable[9] 表明黑白棋共存的状况,tupleScoreTable[10] 表明其余状况(貌似没用?)three


固然具体怎么来统计那?onezeros的博客没有给出来,对不少初学者来讲实现仍是有必定困难,这里就详细的讲一讲吧。游戏

首先咱们用一个棋盘大小的二维数组来储存每一个点的得分。int scoreTabel[15][15];
ip

每次,当People或者Computer下完棋后,以该点为中心统计周围5个点的分数(上下左右对角)。get

图1

即红点,统计每一个点的分数。

对于每一个红点,一样的,咱们向其周围8个方向找到全部包括其自身的五元组,并统计白棋和黑棋的个数,从而根据上面的评分表进行加分。

举个栗子

图2

对于1号位置,咱们先统计以它为底端的五元组,即第一个矩形,而后是第二个,第三个,一直到以1号位置为顶端的五元组,这样咱们就统计了y轴方向的分数。

同理,接着统计x轴方向,两种对角线方向的五元组的得分,这样1号点位置的得分就出来了,咱们将这个值赋值在对应的scoreTable[][]里面;


对图1中全部红点的得分统计完成后,咱们就能够遍历整个得分表scoreTable[][],其中的分最高并且为空的位置就是计算机下子的位置。


固然,这种方法思路和编程都很简单,天然效果比不上正规军中极大极小值搜索中应用alpha-beta剪枝这种方法。

相关文章
相关标签/搜索