3

C# を使用してカード ゲームに貪欲なアルゴリズムを実装する方法を知る必要があります。ゲームはターンベースのゲームです。AI がいくつかのカードを発行する必要がある場合は、既にテーブルにある他のカードの最新の状態に基づいている必要があります。誰かがこれに対する解決策を持っていますか、それとも私が始めるためのリファレンスですか? 前もって感謝します!

今のところ、カードをシャッフルするコードのみを完成させました。

List<int> cards = new List<int>();

for (int j = 1; j <= 2; j++)
{
    for (int i = 1; i <= 54; i++)
    {
        cards.Add(i);
    }
}

List<int> ShuffledCards = new List<int>();
Random random = new Random();

int iterations = cards.Count;
int index = 0;
for (int j = 1; j <= 2; j++)
{
    for (int i = 0; i < iterations; i++)
    {
        index = random.Next(0, iterations - i);
        ShuffledCards.Add(cards[index]);
        cards.RemoveAt(index);
    }
    iterations = cards.Count;
    index = 0;
}

ShuffledCards.Reverse(0, ShuffledCards.Count);
ShuffledCards.RemoveRange(0, 8);
ShuffledCards.Reverse(0, ShuffledCards.Count);
4

2 に答える 2

4

AIのバイブルのような本ですこの本の最初の 3 つの部分を読むことから始めることができます。

于 2011-05-03T11:19:13.630 に答える
0

貪欲なアルゴリズムの意味がわかりません。あなたは、ディーラーに目標を最大化させようとしたり、何かのための良い戦略を見つけさせようとしているのではありませんか?

これは、カードゲームをシミュレートする問題のように見えます。後で実際に何をしたいのかを知る必要があります。

擬似コード:

//Your deck state:
deck   //list of cards in the deck (in top->bottom order) (initially shuffled)
i;     //index of the card at the top of the deck

void dreshuffle(){
    shuffle(cards);
    i = 0;
}

int get_card(){
    if(i >= cards.length){
        //no cards left in pile
        reshuffle()    
    }
    return cards[i++];
}

もちろん、これは単純な例にすぎません。ディーラーが再シャッフルするときにすべてのカードが戻ってくると仮定しているためです。おそらく、ゲームのルールに合わせて捨て札パイルなどを追加する必要があるかもしれません。


ところで、あなたのシャッフル方法は奇妙です。なぜ2回シャッフルするのですか?より通常のアプローチは

list;
n = list.count - 1 //last index in list
while(n >= 0){
    i = random integer in range [0,n] (inclusive)
    swap(list[i], list[n])
    n -= 1
}

(または、ライブラリ関数を使用するだけです)

于 2011-05-03T14:18:42.533 に答える