五子棋中的人工智能(一):局面估计

1.局面情况
眠二,眠三,冲四,活二,活三,活四,五连,双四,四三,三三。
其中眠二表示有两个相连的棋子,有一边被堵,眠三跟冲四也是如此。活三表示三个相连的棋子(或两个相连空一格后再连一棋子)没被堵。双四表示两个四子相连,三三表示两个活三。因为先手必胜,一般比赛时黑子有禁手,包括双四禁;三三禁;四三三禁手,即黑方一步使一个四,两个活三同时形成 ;四四三禁手,即黑方一步使两个四,一个活三同时形成 ;长连禁手 黑方超过5个子连在一起 。禁手图例如下:
这里写图片描述

2.局面分数估计
一般五子棋采用15*15的棋盘,越中心的位置价值越大,我们用数组 PosValue[15][15] 记录棋盘位置的价值。

int PosValue[GRID_NUM][GRID_NUM]=
{
    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {0,1,2,2,2,2,2,2,2,2,2,2,2,1,0},
    {0,1,2,3,3,3,3,3,3,3,3,3,2,1,0},
    {0,1,2,3,4,4,4,4,4,4,4,3,2,1,0},
    {0,1,2,3,4,5,5,5,5,5,4,3,2,1,0},
    {0,1,2,3,4,5,6,6,6,5,4,3,2,1,0},
    {0,1,2,3,4,5,6,7,6,5,4,3,2,1,0},
    {0,1,2,3,4,5,6,6,6,5,4,3,2,1,0},
    {0,1,2,3,4,5,5,5,5,5,4,3,2,1,0},
    {0,1,2,3,4,4,4,4,4,4,4,3,2,1,0},
    {0,1,2,3,3,3,3,3,3,3,3,3,2,1,0},
    {0,1,2,2,2,2,2,2,2,2,2,2,2,1,0},
    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};

用数组 TypeCount[2][20] 记录黑白子的局面情况,用数组 TypeRecord[15][15][4] 记录棋盘上每个位置在左斜,右斜及垂直和水平四个方向的连接情况。
胜负判定(不采用禁手):当黑方连有五子时,返回一个大的负值,黑胜;当白方连有五子时,返回一个大的正值,白胜。如果轮到白方走棋:如果白棋有冲四或活四或者有活三而且黑棋没有冲四,则白胜;如果黑棋有活四或四三或两个活三而且白棋没有三(活三或眠三),则黑胜;当没有胜负时,分别用变量 WValue BValue 来表示白方和黑方的局面分数,针对不同的局面给 WValue BValue 加上不同大小的值,最后返回 WValueBValue .如果轮到黑方走棋,与上述情况相似。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值