五子棋AI算法自动测试方法

先前发了几篇五子棋游戏程序设计的博文,设计了游戏程序,也设计了AI智能奕棋的算法,运行程序检测算法的可行性,完成人机模式游戏功能的设置。

本文主要介绍自动测试算法的方法。

AI智能奕棋的算法testAIq( ),主要是检测算法,测试算法的可行性。程序设置的对战演示就是为了测试算法,此为研究五子棋算法提供一些参考。

在检测算法的可行性时感到很烦,老是要一步步试走黑棋和白棋。就设计了自动测试的方法。

autoplay ( ) { //自动演示,检测算法

//*用于检测AI智能下子算法 testAIq ()

s7="游戏模式:自动演示 ";

if (mode==1) return ; //双人模式可演示

if (isDo==0) return ; //isDo 游戏可行控制

if (dn==0) { //设定首子黑先天元位, dn下子序,0为首子

n=113; wn=0 ; black_do () ; } //棋盘位数组 0-225

for (ti=1; ti<=6; ti++) { //每次3个回合

if(isDo==0) return ; //若取胜则跳出

wn=wn+1 ;

testAIq (); //AI 算法测试 *return sn

if (wn>1) wn=0 ; //轮流下子

n=sn ; //n为绘出棋子位号

if (wn==0) pn[n]=1 ; //黑棋下子

if (wn==1) pn[n]=2; //白棋下子

row=15-(n/15) ; //n转换成行列,显示下子位H8 G9 ...

col=(n-(n/15*15)) ;

if (col==0) { col=15 ; row=row+1 ; }

swapabc () ; //return ss

if(ss=="I") ss=ss+" " ;

//print 走子记录

if (wn==0) cordp=" B "+intToString (n);

if (wn==1) cordp=" W "+intToString (n);

if (cordp != ss2) {

dn=dn+1;

print dn," ",cordp," " , ss,row ; //打印记录

ss2=cordp;

dwn[dn]=n ; //print play number

fudat[dn]=n; fusum=dn; //复盘数据

board () ; //重绘棋盘,显示棋子

}

detect (); //检测胜负

} //next ti

}//autoplay ( )

对于人机对战的电脑智能应子算法,参阅很多五子棋书籍棋谱和五子棋竞赛的对抗棋谱。我感到白棋的后手防御算法很难取胜,棋界有黑棋高手先手必胜一说。算法么想了很多,既然是人工智能下棋就得按人的思路来算计。棋书阐述有许多思路和棋局解说。如活四冲四,嵌五,活三嵌四,活二嵌二。这些是高级棋手的总结。我就按此思路用加权计权方法来表现此类各种情况。

我对算法的思路是:黑棋的进攻点就是白棋的防守点,反之,白棋的进攻点就是黑棋的防守点。我采用一次遍历棋盘各点位的方法,凡有黑子和白子就判断其四周的空白点,即可下子位,评估棋势加权计分。棋势就是单子、活二嵌二、活三嵌三嵌四、活四冲四嵌五。各个棋势的交点就叠加计分,高分点就是双方博弈的必争点。算法的要点是:独子成二是起点,连二到连三是重点,关键的要点是三连子到四连五连。这这三点就分出权重的棋势。活三02220两边的点位是,先手是绝杀点,后手是防守逢三必堵。眠三122200棋势,空位下子成冲四,这是抢先手来改势扩势来进攻。若抓到冲四加活三叠加进攻点,权分叠加计权,就能绝杀对方。我的算法思路就这样。算法想白棋后手取胜,就在白棋的棋势上加小分,这样利于白棋在同等情况下能争得先手,反战进攻取胜。想法很简单,写算法也不难,而对于棋势的加权分的估量较难。

五子棋游戏程序的源码可参阅我本站的几篇博文。

相关推荐
小奥超人几秒前
PPT技巧:如何合并PPT文件?
windows·经验分享·microsoft·powerpoint·办公技巧
lb363636363633 分钟前
整数储存形式(c基础)
c语言·开发语言
浪里个浪的10241 小时前
【C语言】从3x5矩阵计算前三行平均值并扩展到4x5矩阵
c语言·开发语言·矩阵
努力的小雨1 小时前
工作常备:自定义注解实现数据脱敏
经验分享
<但凡.1 小时前
编程之路,从0开始:知识补充篇
c语言·数据结构·算法
f狐0狸x1 小时前
【数据结构副本篇】顺序表 链表OJ
c语言·数据结构·算法·链表
CoderBob2 小时前
【EmbeddedGUI】脏矩阵设计说明
c语言·单片机
浪里个浪的10242 小时前
【C语言】计算3x3矩阵每行的最大值并存入第四列
c语言·开发语言·矩阵
电报号dapp1192 小时前
链游系统定制化开发:引领游戏产业的新时代
游戏·机器人·去中心化·区块链
敲敲敲-敲代码2 小时前
游戏设计:推箱子【easyx图形界面/c语言】
c语言·开发语言·游戏