基于回合制游戏的贪心算法

时间:2011-05-03 11:15:46

标签: algorithm greedy

我需要知道如何在纸牌游戏中实现贪心算法 使用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);

2 个答案:

答案 0 :(得分:4)

This书就像是关于人工智能的圣经。您可以从阅读本书的前三部分开始。

答案 1 :(得分: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++];
}

当然,这只是一个简单的例子,因为它假设经销商在重新洗牌时已经将所有牌都归还了。也许您可能需要添加丢弃堆或类似物以适合您的游戏规则。


顺便说一下,你的shuffle方法很奇怪。为什么要洗牌两次? 更正常的方法是

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
}

(或者只是使用库函数)