実際に打つ手の探索

上記のままのアルファベータの実装では評価値は返ってくるけど、どの手を指した結果なのかが全く分からない。かといって、実際指し手の情報が必要になるのは再帰呼び出しの一番上のレベル。ということで、面倒だけどそれだけのための関数を作った。ついでに探索深さをここにハードコーディングできる。


maxScore = -∞;
int 手探し(CELL 色) {
@打てる場所リスト = 打てる場所を列挙する(色);
if( 打てる場所の数 == 0 ) return パス;
if( 打てる場所の数 == 1 ) return 打てる場所;
foreach( @打てる場所リスト ) {
打って返す(打てる場所);
score = -αβ(相手の色, -∞, -maxScore, 探索の深さ);
打ったのを戻す(打った場所);
if( maxScore < score ) {
maxScore = score;
bestPlace = 打った場所;
}
}
return bestPlace;
}

ここで出てくるループの中では上記のαβ関数を呼び出してるので、あっちだけで再帰している。