一个JavaScript写的黑白棋AI

本文介绍了一个使用JavaScript编写的黑白棋人工智能程序,该程序运用了alpha-beta剪枝算法,尽管棋力有限,但代码结构清晰,适合初学者了解人机对弈的实现。作者提供了在线体验链接,以及详细的代码解析,包括棋盘初始化、棋盘状态评估等功能。通过迭代深化和历史启发算法的加入,有望提高AI的搜索深度和棋力。
摘要由CSDN通过智能技术生成
               

赖勇浩(http://laiyonghao.com)

首先,这个代码不是我写的,但注释是我加上去的。作者是shaofei cheng,他的网站:http://shaofei.name

第二,目前这个代码只是使用了 alpha-beta 剪枝,棋力还弱,有很大的优化空间。但是代码写得非常清晰,如果有朋友对人机弈棋方面的课题有兴趣又还没有入门,这份代码作为一个例子是很棒的。

第三,目前计算机只能搜索 3 层,我觉得加上迭代深化和历史启发算法之后,搜索到 5 层是不成问题的。现代 JavaScript 的性能不错。

第四,作者在代码里展示了不少技巧,值得学习和借鉴,哪怕不懂 JavaScript 也很容易看懂代码(我也不懂)。

第五,试试这个 AI 的棋力:http://shaofei.name/OthelloAI/othello.html

以下是代码:

var AI = {};new function(){AI.Pattern= pattern;// 定义了 8 个偏移量// 可以简单通过加法得到任一点周围 8 个点的坐标// -11 -10 -9//  -1  x  1//  9   10 11// 如左上角的坐标为 x + (-11)var directions=[-11,-10,-9,-1,1,9,10,11];function pattern(){ // 把整个棋盘填满 0 for(var i=0;i<100;i++)this[i]=0; // 中间的 4 个格子,先放上两黑两白的棋子 this[54]=this[45]=1;this[55]=this[44]=2; // 黑净胜外围子数目(黑减去白),估值时用。  this.divergence=0; // 当前可走棋方为黑棋 this.color=1; // 已经走了几步棋 this.moves=0; // 稳定原型 // 0 是空白,1 是黑棋,2 是白棋,3 是边界 // 把 8 * 8 的棋盘扩展成 10 * 10,是一种技巧 // 可以简化坐标有效性的判断 var stableProto = [   3, 3, 3, 3, 3, 3, 3, 3, 3, 3,  3, 0, 0, 0, 0, 0, 0, 0, 0, 3,  3, 0, 0, 0, 0, 0, 0, 0, 0, 3,  3, 0, 0, 0, 0, 0, 0, 0, 0, 3,  3, 0, 0, 0, 0, 0, 0, 0, 0, 3,  3, 0, 0, 0, 0, 0, 0, 0, 0, 3,  3, 0, 0, 0, 0, 0, 0, 0, 0, 3,  3, 0, 0, 0, 0, 0, 0, 0, 0, 3,  3, 0, 0, 0, 0, 0, 0, 0, 0, 3,  3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ] // 从一个 8 * 8 的棋盘载入状态 this.load=function(arr) {  for(var y=1;y<=8;y++)  {   for(var x=1;x<=8;x++)   {    this[y*10+x]=arr[y-1][x-1];      }  } } // 判断能不能 pass // 如果能,则当前可走棋方变更 this.pass=function() {  for(var y=1;y<=8;y++)  {   for(var x=1;x<=8;x++)   {    if(this[y*10+x]==0)     {     // 有任何一步棋可走,都不可以 Pass     if(this.move(x,y,th

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值