-6

私は4行ゲームを開発しています。これで私はAIを作成しています。Four in a row logicと同じロジックを使用しました。

私のゲームでは、0 は空のスロットを表します。1 はユーザー スロットを表し、2 はコンピューター スロットを表します。

今私は AI を開発して、ユーザーが '1' を 3 つ続けて 2 を 4 行目に入れることを意味するようにしたいと考えています。

[0, 0, 0, 0, 0, 0, 0],

[0, 0, 0, 0, 0, 0, 0],

[0, 0, 0, 0, 0, 0, 0],

[0, 0, 0, 0, 0, 0, 0],

[0, 0, 2, 2, 0, 0, 0],

[0, 1, 1, 1, 0, 0, 0]

[0, 1, 1, 1, 2, 0, 0] のように、最終行の 4 列目に 1 の後に 2 を配置したいのですが、AI を作成して、どうすればよいですか?

4

3 に答える 3

2

AI は、Wikipedia の次のリンクにある Minimax アルゴリズムを使用して実装できます。

http://en.wikipedia.org/wiki/Minimax

基本的に、プレイヤー 1 が勝ったか (値 1)、プレイヤー 2 が勝ったか (値 -1)、またはゲームがまだ終了していないかを決定する関数 f が必要です。ゲームが終了していない場合、現在のプレーヤーのすべての動きは、ボード上でそれらをシミュレートし、それぞれの他のプレーヤーがアクティブな場合に F を再帰的に呼び出すことによって評価する必要があります。可能な手の値は、F の戻り値の最大値 (プレーヤー 1 が現在のプレーヤーの場合) または F の戻り値の最小値 (プレーヤー 2 が現在のプレーヤーの場合) になります。

少なくともこれは大まかなアイデアです。実装に使用されるプログラミング言語に応じて、特定のゲームとは独立して評価ロジックを実装できるため、同じコードで 4 列または三目並べをプレイできます。さらに、値 1 (プレーヤー 1 の場合) または -1 (プレーヤー 2 の場合) の移動が見つかった場合、評価を停止することができます。これは、「探索木の枝刈り」とも呼ばれます。

于 2013-10-16T09:51:10.883 に答える
0

コードのこの部分を使用して、ユーザーがすべての行で 0,1,1,1,0 のような状況を作成しないようにします。コンピューターがそれを使用する必要がある列の数を返します。

for(byte i=0;i<6;i++)
{
    byte min = (byte) ((i * 7) + 1);
    for(int j = 0;j<=2;j++) {
        if (boardValues[min+j] == 1 && boardValues[min + j + 1] == 1 && boardValues[min - 1 + j] == 0 && boardValues[min +j + 2] == 0) {
            if (i == 5) return (byte) ((min + j - 1)%7);
            else  if(boardValues[min - 1 + j + 7] != 0 && boardValues[min +j + 2 + 7] != 0)
                   return (byte) ((min + j - 1)%7);
        }
    }
}

私のコードでは、boardValues は次のように定義されています。

public static byte[] boardValues = new byte[42];
于 2016-04-17T05:13:09.857 に答える