首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于回合博弈的贪心算法

基于回合博弈的贪心算法
EN

Stack Overflow用户
提问于 2011-05-03 19:15:46
回答 2查看 1.9K关注 0票数 3

我需要知道如何使用C#在纸牌游戏中实现贪婪算法。这个游戏是一个基于回合的游戏。当AI应该发行一些卡时,它必须基于已经在桌面上的其他卡的最新状态。有没有人对此有解决方案,或者是我开始的参考资料?提前感谢!

现在,我只完成了洗牌的代码:

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-03 19:19:14

This这本书就像一本关于AI的圣经。你可以从阅读这本书的前三部分开始。

票数 4
EN

Stack Overflow用户

发布于 2011-05-03 22:18:43

我不明白你说的贪婪算法是什么意思。你不是在试图让经销商最大化一些目标,或者为一些东西找到一个好的策略,是吗?

这看起来更像是一个模拟纸牌游戏的问题。我们需要知道你之后到底想做什么。

伪码:

代码语言:javascript
复制
//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方法很奇怪。为什么你要洗两次?一种更正常的方法是

代码语言:javascript
复制
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
}

(或者只使用库函数)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5868626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档