五子棋简易AI算法

由于工作需要接触到了五子棋,所以就想自己写写五子棋的算法,于是在查了很多资料,

找到了一种比较简单的思路,用评分表给当前所有还没有落子的地方评分,然后找出评分最高的点。

 

那么如何给某点评分呢?五子棋最终是要五个子练成一条线,那么我们姑且把五个点的集合称作一个单元。

首先就是要找出所有包含某个点的所有单元(包括水平方向,竖直方向,斜方向)

然后给每个单元打分,最终加起来的总分就是最后结果。

 

如何打分?参考了网上的资料,找到了一套评分标准

const int g_emptyTupleScore = 7;


const int g_mixtureTupleScore =0;


const int g_ownTupleScore[5] = {0, 35, 800, 15000, 800000};


const int g_rivalTupleScore[5] = {0, 15, 400, 1800, 100000};

 

如果单元的五个点上没有棋子,也就是空单元,那么这个单元给g_emptyTupleScore 分

如果某个单元又有白字又有黑子,那么这个单元给g_mixtureTupleScore 分

如果某个单元只有己方的棋子,棋子数量1、2、3、4分别对应的分数就是35、800、15000、800000

如果某个单元只有对方的棋子,棋子数量1、2、3、4分别对应的分数就是15, 400, 1800, 100000

 

以这样一套评分标准就给某个点打分,得分最高的点就是最佳点。

 

 

定义一个棋盘二维数组board[15][15];设定0、1、2分别表示该位置无棋子、有白子、有黑子

 

遍历棋盘数组,发现某点(x,y)的值为0,说明这个点没有棋子,那么我们第一步要做的就是寻找出所有包含这个点的单元

定义一个单元结构体,储存每个单元的5个点信息

这里我把寻找水平方向上的所有单元的代码贴出来了。g_findAllTupleResults是一个容器,保存所有的单元。

还要寻找竖直方向和斜方向的单元。

最终就是遍历整个容器,按照每个单元的棋子种类和数量给每个单元打分,最后得到总分。

这样就完成了一个点的评分,以此类推,得到棋盘上所有没有落子点的分数,最后选择得分最高的点。

 

这里是自己写的一份完整的五子棋AI代码

http://download.csdn.net/detail/u012987441/9635540点击打开链接

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值