我需要知道如何使用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);发布于 2011-05-03 19:19:14
This这本书就像一本关于AI的圣经。你可以从阅读这本书的前三部分开始。
发布于 2011-05-03 22:18:43
我不明白你说的贪婪算法是什么意思。你不是在试图让经销商最大化一些目标,或者为一些东西找到一个好的策略,是吗?
这看起来更像是一个模拟纸牌游戏的问题。我们需要知道你之后到底想做什么。
伪码:
//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
}(或者只使用库函数)
https://stackoverflow.com/questions/5868626
复制相似问题