パスの処理

実際に打つ時点に限れば、打つ場所が見つからない場合にはすぐパスを返す。これは打てる箇所が一箇所の場合と同じで、そこから先をどんなに探索しようと結果は同じなので余計な時間を使わない様にすること。

それで重要なのは探索中のパスの処理。ここではゲームの流れをシミュレートする必要があるから2連続パスなどに対応しなければならないわけだ。


if( 前がパスだった ) { /* 探索中のゲームは終わったらしい */
return 評価値(色);
} else { /* パスということを伝えて次のレベルを探索 */
return -αβ(相手の色, -β, -α, 残り深さ);
}
大体こんな感じになる。「パスということを伝えて」と書きつつ実装似非コードには含まれていない。自分が実際に実装している中では、1ビットで済む情報に1バイト以上の領域を与えたくなかったので、残り深さの変数の一部を間借りして伝えてるが、新たに引数なりグローバル変数を使うなりして伝えてもらって構わない。ご自由に。