五子棋评分表算法

评分表算法

一般情况下棋盘是15*15的。那么应该是572个五元组。而这五元组由黑棋白棋还有空格组成。也就是 3^5 * 572 = 138996; 看着很多吧,其实是可以分类的。每个五元组就是一种局势。

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

下面是我使用的是评分表

// 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] 代表其他情况(貌似没用?)

当然具体怎么来统计那?onezeros的博客没有给出来,对很多初学者来说实现还是有一定困难,这里就详细的讲一讲吧。

首先我们用一个棋盘大小的二维数组来储存每个点的得分。int scoreTabel[15][15];
每次,当People或者Computer下完棋后,以该点为中心统计周围5个点的分数(上下左右对角)。
这里写图片描述

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

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

举个例子
这里写图片描述

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

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

对图1中所有红点的得分统计完成后,我们就可以遍历整个得分表scoreTable[][],其中的分最高而且为空的位置就是计算机下子的位置。

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

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值