改进基于Angular的国际象棋游戏的基本AI
Improving rudimentary AI of Angular based chess game
我用Angular和国际象棋创建了一个国际象棋游戏.js并试图改进其基本的AI。 未改进的代码目前位于:https://gist.github.com/dexygen/8a19eba3c58fa6a9d0ff(或 https://gist.githubusercontent.com/dexygen/8a19eba3c58fa6a9d0ff/raw/d8ee960cde7d30850c0f00f511619651396f5215/ng-chess(
人工智能目前包括检查计算机(黑色(是否有将死的动作(使用国际象棋.js的in_checkmate((方法(,如果是,则与人类(白色(交配,否则进行随机移动。 为了改善这一点,我认为我不应该只是随机移动,而是让人工智能检查白人对黑人反应的计数器。 然后,如果白色有将死,则不包括这些黑色响应以随机选择的移动中。
我想改进makeMove(((目前仅委托给makeRandomMove(((中的AI,但我发现这比预期的要难。 我期望能够做的是,与mateNextMove(((参考要点的第155-168行(不同,检查循环中的in_checkmate((,除了循环将被嵌套以考虑这些响应的黑色响应和白色计数器。
这是我第一次尝试我期望会起作用的方法,但它不会在可能的情况下避免将死。
function makeMove(responses) {
var evaluator = new Chess();
var response;
var allowsMate;
var counters = [];
var candidates = [];
for (var i=0, n=responses.length; i<n; i++) {
response = responses[i];
allowsMate = false;
evaluator.load(chess.fen());
evaluator.move(response);
counters = evaluator.moves();
//console.log(evaluator.ascii());
//console.log(counters);
for (var j=0, k=counters.length; j<k; j++) {
evaluator.move(counters[j]);
if (evaluator.in_checkmate()) {
//console.log('in_checkmate');
allowsMate = true;
break;
}
}
if (!allowsMate) {
candidates.push(response);
}
}
return makeRandomMove(candidates);
}
为了调试/测试利用一点知识帮助,特别是尝试早期的"学者伴侣",请参阅:http://en.wikipedia.org/wiki/Scholar%27s_mate。 如果布莱克的随机举动使这种不切实际的重新开始,那么机会就会经常出现。 Qxf7#是维基百科条目中学者交配移动的符号,也是Chess.moves((返回的符号。 所以我尝试修改内部 for 循环,如下所示:
for (var j=0, k=counters.length; j<k; j++) {
evaluator.move(counters[j]);
if (counters[j] == 'Qxf7#') {
console.log(evaluator.in_checkmate());
}
}
但是我的回报是错误的,请允许我交付伴侣。 我做错了什么(谁可能想在这个项目上帮助我(?
在我看来,从您发布的代码来看,您并没有撤消所做的动作。当您循环浏览所有可能的移动时,您就会进行该移动,然后检查威胁。然后,您应该撤消移动。这可能就是你上次测试效果不佳的原因。
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 如何有效地将游戏数据存储在URL查询字符串中
- Javascript游戏输入失去焦点
- 如何在p5.js中管理多智力竞赛游戏的多个屏幕
- setInterval游戏循环的范围问题
- 为网络游戏制作动画
- 重置游戏和获胜者问题
- 帆布游戏的滞后运动
- Javascript单独的游戏窗口
- Javascript猜测游戏-计数器不工作
- JavaScript纸牌游戏
- 简单游戏的画布与SVG
- 我的HTML5游戏不时暂停,我如何才能知道它是否's是由垃圾收集引起的
- 多人游戏完全在浏览器中运行,服务器仅用于数据库
- 改进基于Angular的国际象棋游戏的基本AI
- 为瓷砖游戏制作AI
- 为什么我的AI在井字游戏中表现得很奇怪?
- 2D格斗游戏AI,训练模仿玩家's的游戏风格
- Javascript/HTML5-试图制作一个简单的游戏AI
- 人工智能-需要关于创造游戏AI的建议->javascript