如果给你:
WINNABLE(D)
,如果牌D
可以通过某些游戏序列获胜,则返回True并返回True;如果不可避免地导致失败位置,则返回False。这个问题是(2)很难(可能是NP-hard取决于游戏),甚至它的近似值在计算上也很昂贵(如果你在iPad上,比如说)。然而,更便宜的算法,例如从获胜位置开始并随机“不动”以将游戏反转回起点可能会对特定的牌组改组产生偏差,而这些改组很难量化或避免。
在生成这样的可赢游戏领域是否有任何有趣的算法或研究?
答案 0 :(得分:0)
由于纸牌游戏的差异很大,因此很难在这种普遍性水平上进行推理。为了集中我们的想法,让我们举一个具体的例子:四十个盗贼。这是一个双重包装游戏,从空基础开始,要向上制造。空的废料堆;以及十张正面朝上的筹码堆,每张四张牌。废物堆和布局堆的顶部卡片被暴露。每一步,您都可以:
初学者按照规定的顺序播放这些选项。 (我所玩的实现实际上有一个提示按钮,提示相应地采取了相应的行动。)我估计该策略可赢得的交易少于十分之一,而可赢得交易的实际比例约为三分之一。
现在,如果您通过随机不动产生可赢的交易,则存在难以量化的偏差;我不同意这一点。不过,我认为,在碰巧可以赢得交易的交易中,交易往往会比平均水平更难,而初学者的策略几乎不会赢得任何交易。
但是,您可以故意将不动产设为非随机。如果您以与初学者的策略相反的顺序选择不动产,则会获得一笔交易,该交易适用于初学者的策略:例如如果仅是万不得已,那么您就从地基转移到浪费,那么只要有可能,从废物转移到地基永远是正确的。
答案 1 :(得分:-2)
//假设您已经创建了一个“卡片”对象。
Generate a List<Cards> deck;// A list populated with every card in deck that you can use in Solitaire with the number of each card you can use in Solitaire.
Generate a List<Cards> table;
while(deck.size()>0){//This is the real code.
table.add(deck.remove((int)(Math.random()*deck.size())));
}
//And done. You know have a perfectly shuffled list of Cards in table.
//Now divide the list up however you want.
我不知道第2部分。