我需要知道如何在纸牌游戏中实现贪心算法 使用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);
答案 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
}
(或者只是使用库函数)