纸牌游戏:赢得比赛

时间:2013-07-25 08:11:18

标签: algorithm actionscript-3

我目前正在开发使用Actionscript 3的纸牌游戏,我想知道如何确保至少有一个获胜的可能性。

游戏与此游戏类似:

https://play.google.com/store/apps/details?id=com.gameduell.cleopatraspyramidnew&hl=en https://itunes.apple.com/us/app/cleopatras-pyramid/id401141292?mt=8

播放器必须播放与所呈现卡片的上一个或下一个值匹配的卡片。

我尝试了不同的方法,但仍然不满意。

我想知道的是,如何确保在隐藏牌中至少有一场胜利游戏,因此玩家将有可能获胜。

感谢

1 个答案:

答案 0 :(得分:0)

鉴于所有卡片都已预先放置,您可以执行以下操作:

  1. 明确董事会。配对你的一套牌,以获得一组对
  2. 从剩余的一对中获得一对。如果set为空,请提供填充板作为算法结果。
  3. 将两张牌放入你的棋盘到下一个可用位置,这样两个位置都可以在游戏阶段进行拾取。如果没有可用的地方,这意味着你错误地放置了前一对,所以你必须回溯 - 从堆栈中弹出状态,在该状态下尝试另一个位置。
  4. 将状态推送到堆栈。
  5. 转到2.
  6. 诀窍是,你从赢得一块板开始,并添加一层(一对),以便通过状态序列构造移除这一对将导致可赢的条件​​。显然,您可以将随机对添加到金字塔中的随机可用位置,偶尔也会随机,例如,最后2个位置在实际游戏过程中不能同时拾取,这是一种撤消的情况以前的位置,也许不只是一个。您可以通过为网格空间提供深度值来解决这种情况,如果自由空间的最大深度等于未放置的对的数量,则最深的位置将被占用而不是随机的。

    如果您的游戏涉及一次播放一张卡片,那么在选择下一张卡片时应进行额外检查 - 如果剩余的一组卡片未连接,例如你已经选中了所有的4个,并且在未选择的组中还有3个和5个。这意味着您必须撤回以在前一阶段选择另一张卡。算法可以是这样的:

    1. 准备空格,准备好一套牌。
    2. 递归入口点。如果传递-1(第一次),请选择一整套可用的卡。如果不是第一次,请根据之前选择的卡片选择一组有效卡片(例如,有一张4,选择全部3张,选择全部5张,如果允许则选择全部4张)。随机播放。 如果集合为空,并且所有可用的卡集也为空,则从递归返回true,否则返回false。
    3. 从套装中选择下一张卡片。如果没有剩下的话,请在失败的情况下退出递归。
    4. 检查当前卡的移除是否会中断剩余的未放置卡片组。如果是,请转到3.
    5. 在网格中选择一个空的可用位置,将选定的卡放在那里。
    6. 使用当前卡的值,更新的网格和减少的未放置的卡片组输入递归(保存状态,转到2)。
    7. 如果递归结果为false,则撤消5中的操作,然后转到3.如果为true,则将递归保留为true。