宿題の一環として、Java で簡単なチェス ゲームをプログラミングする必要があります。私は機会を利用して再帰を実験することを考えていました.再帰コードの明らかな候補がチェスにあるかどうか疑問に思っていました.
6 に答える
私にとって最も明白な候補は、最良の動きを検索するための再帰的なミニマックス ルーチンです。これはまた、検索アルゴリズムの背後にある多くの理論に関係しており、実装するのは非常にクールです。
例:
http://www.devshed.com/c/a/Practices/Solving-Problems-with-Recursion/6/
はいあります。たとえば、白いプレーヤーのポジションの「力」を評価する関数があるとします。駒を動かし、それを再帰的に呼び出して、動きの値を評価し、最適な動きを選択できます。
黒と白の役割を交換して、黒のプレイヤーに対して同じ関数を呼び出し、対戦相手の動きの「危険」を評価する必要があります。
それから再び白人などのために。
再帰レベルを深くしすぎないように注意してください。そうしないと、永遠に時間がかかります。
同じボードにつながる複数の組み合わせがあるため、動的プログラミングに注意してください。計算の繰り返しを避けるために、移動をキャッシュすることを忘れないでください。
再帰が検出された場合は、以前の場所に移動するだけで、その呼び出しを中断してください。これはバックトラッキングと呼ばれます
深さ優先検索は、再帰の最有力候補です。したがって、宿題のために AI をプログラミングしている場合は、AI のルックヘッド アルゴリズムが最適な次の動きを見つけようとするのが適切な候補になります。
ただし、注意してください。メモリがすぐに不足する可能性があります。おそらく、AI が見ることができる深さの動きの数を制限したいと思うでしょう。
チェスではありませんが、チェスのフィギュアを使った古典的なパズル: http://en.wikipedia.org/wiki/Eight_queens_puzzle
あなたは後戻りを考えています