0

C++のゲームtictactoe3Dにミニマックスアルゴリズムを適用しようとしています。良い評価関数を見つけるのに苦労しています。

評価関数を見つけるための良いリソースがどこにあるか誰かが知っていますか?

ありがとうございました。

4

3 に答える 3

0

これが私が使うものです:

すべての行を(すべての方向に)移動します。各行について、プレーヤーのマークが1つしかない場合は、マークの数に基づいてそのプレーヤーのポイントを獲得します。スコアするマークの数をマッピングするルックアップテーブルを作成できます。これを調整して、最良の結果を得ることができます。最終的な結果は、2人のプレーヤーのスコアの差になります。

例(擬似コード):

const int markScore[4+1] = {0, 1, 3, 5, 99999}; //assuming 4x4x4 board
//The above values are arbitrary - adjust to what you think makes sense.

score = 0;
for all rows in all directions:
    count Xs and Os
    if (xs>0 && os==0)
        score += markScore[xs];
    else if (os>0 && xs==0)
        score -= markScore[os];
return score;

これはうまくいくはずです。なぜなら、1人のプレーヤーのマークしかない行は、そのプレーヤーに勝つチャンスを与えるからです。

于 2010-04-14T16:30:25.423 に答える
0

ヒューリスティックは不要です。状態は3^27しかないので、それらすべてを列挙して最適なプレイを計算できます。

于 2010-04-14T18:56:23.943 に答える
0

このゲームの評価関数は、勝ちポジションをテストするだけで済みます。ボードにある空のフィールドが多いほどスコアが高くなるため、評価関数はボード内の空のフィールドをカウントする必要があります。評価関数がチェックしなければならない線、行、対角線の数を減らすために、ボードをミラーリングして回転させることができます。

于 2010-04-14T19:36:18.993 に答える