AI象棋-象棋ai网站-象棋ai网站
参考文献:前言:
大神以 html5+js 撰写了关于象棋 AI 的博客,此博客重点阐述了棋子的着法,以及自己设计的评估函数和简单的理论,并未具体讲解搜索算法,本文是对该原文的学习与分析补充。
一,棋子的着法
创建一个数组,用于存储该棋子处于某一点时所能走到的着点,即 com.bylaw ={}
(1)车:
<p><pre> <code class="language-javascript">com.bylaw.c 是一个函数,它接受 x、y、map 和 my 作为参数。
var d=[];
左侧检索时,如果存在棋子并且颜色不同,就将其 push 过去并结束循环;如果不存在棋子或者颜色相同,就一步步 push 。<span style="color:#ff0000;"> </span>
for (var i=x-1; i>= 0; i--){
if (map) {
如果 com.mans].my 不等于 my ,那么就将 推入 d 中 。
break
}else{
d.push()
}
}
//右侧检索
for (var i=x+1; i <= 8; i++){
if (map) {
if (com.mans].my!=my) d.push();
break
}else{
d.push()
}
}
//上检索
for (var i = y-1 ; i >= 0; i--){
if (map) {
如果 com.mans].my 不等于 my ,那么 d 就会被 push 一个包含 的元素。
break
}else{
d.push()
}
}
//下检索
for (var i = y+1 ; i<= 9; i++){
if (map) {
if (com.mans].my!=my) d.push();
break
}else{
d.push()
}
}
return d;
}</code></pre></p>
算法分析:
向上、向下、向左、向右四个方向分别进行搜索。若找到一个点,且该点颜色与车这个棋子不同(即敌对棋子),那么就把该点的坐标记录在 d 数组中。若某一方向上没有其他棋子,就把这一方向上的所有坐标都记录在 d 数组中。简单来说,就是把以车这个棋子为中心的十字上的坐标都记录在 d 数组中。
前提补充:
1,代码中的map:
<p><pre> <code class="language-javascript">com.initMap = [
["C0", "M0", "X0", "S0", "J0", "S1", "X1", "M1", "C1"] 包含了多个不同的元素,分别有 C0、M0、X0、S0、J0、S1、X1、M1 和 C1 。
[具体内容 1, 具体内容 2, 具体内容 3, 具体内容 4, 具体内容 5, 具体内容 6, 具体内容 7, 具体内容 8, 具体内容 9]
[某个内容, 'P0', 某个内容, 某个内容, 某个内容, 某个内容, 某个内容, 'P1', 某个内容]
[ , , , , , , , , ],
[ , , , , , , , , ],
[某个内容, 'p0', 某个内容, 某个内容, 某个内容, 某个内容, 某个内容, 'p1', 某个内容]
[ , , , , , , , , ],
['c0', 'm0', 'x0', 's0', 'j0', 's1', 'x1', 'm1', 'c1'] 分别是一些不同的元素或标识,它们各自具有特定的含义和用途。其中 'c0' 有其独特性,'m0' 也有其自身的特点,'x0' 同样有其特定的意义,'s0' 、'j0' 也不例外,'s1' 、'x1' 、'm1' 、'c1' 也都在相应的情境中发挥着作用。
];</code></pre></p>
这里的字符串代表每个棋子的key值:
<p><pre> <code class="language-javascript">设定每类棋子的 key 值。
"c0":"c","c1":"c",
"m0":"m","m1":"m",
"x0":"x","x1":"x",
"s0":"s","s1":"s",
"j0":"j",
"p0":"p","p1":"p",
"z0"为"z","z1"为"z","z2"为"z","z3"为"z","z4"为"z","z5"为"z"
"C0":"C","C1":"C",
"M0":"M","M1":"M",
"X0":"X","X1":"X",
"S0":"S","S1":"S",
"J0":"J",
"P0":"P","P1":"P",
Z0 为 Z,Z1 为 Z,Z2 为 Z,Z3 为 Z,Z4 为 Z,Z5 为 Z。
}</code></pre></p>
2,my:
标记值:红色方由人操纵,标记值为 1 ;AI 的标记值为 -1 。
3,map与d.push()
向左方向进行搜索,y 坐标保持不变,x 坐标依次遍历,这些体现在地图(map)当中。
页:
[1]