まず、このコードは私が書いたものではありませんが、コメントは私が追加したものです。
第 2 に、このコードは現在アルファベータ プルーニングのみを使用していますが、これはまだ弱く、最適化の余地がたくさんあります。ただし、このコードは非常に明確に書かれているので、人間と機械のチェスの主題に興味があるがまだ始めていない友人がいる場合、このコードは例として最適です。
第三に、現在コンピューターは 3 つのレイヤーしか検索できませんが、反復深化アルゴリズムと履歴ヒューリスティック アルゴリズムを追加すれば、5 つのレイヤーを検索することは問題ないと思います。最新の JavaScript は優れたパフォーマンスを発揮します。
第 4 に、著者はコード内で多くのテクニックを実証しており、学ぶ価値があります。たとえ JavaScript を理解していなくても、コードを理解するのは簡単です (私も理解できません)。
5 番目に、この AI のチェス力を試してください: html">http://shaofei.name/OthelloAI/othello.html
以下はコードです:
view plaincopy to Clipboardprint?
var AI = {};
new function(){
AI.Pattern= pattern;
// 8 つのオフセットが定義されています
// 任意の点の周囲に 8 つの点を追加するだけで、次の座標を取得できます。
// -11 -10 -9
// -1 -9,-1,1,9,10,11];
function pattern()
{
// ボード全体を 0 で埋める
for(var i =0;i // 中央の 4 つのマス目に、最初に黒 2 個と白 2 個のチェスの駒を置きます
this[54]=this[45]=1;this[55] ]=this[44]=2;
// 黒ネット 評価に使用される、外側の勝ち駒 (黒から白を引いたもの) の数。
this.divergence=0;
// 現在の移動可能なプレーヤーは黒です
this.color=1;
// いくつかの動きが行われています
this.moves=0;
// 安定したプロトタイプ
//空白、1 は黒のチェス、2 は白のチェス、3 は境界線
// 8 * 8 のチェス盤を 10 * 10 に拡張するのはテクニックです
// 座標の妥当性の判断を簡略化できます
varsteadProto = [
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++)
合格できるかどうかを判断する
// 可能であれば、現在のプレーヤーは変更できます
this.pass=function()
{ for(var y=1;y { = 1;x{次のステートメントを実行すると、1の場合は2つになります;
this.clone = Function () {
Function Pattern () {}
Pattern.prototype = this;
var r=""; y=1;y<=8;y++)
{ for(var x=1;x<=8;x++)
{ [this[y*10+x]]+" ";