0

我目前正在使用 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

玩家必须打出与出示的牌的前一个或下一个值相匹配的牌。

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

我想知道的是,如何确定隐藏卡中至少有一场获胜的游戏,这样玩家就有获胜的可能性。

谢谢

4

1 回答 1

0

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

  1. 找一块清晰的板子。配对你的一组牌,得到一组对
  2. 从剩余的一对中取出一对。如果设置为空,则提供填充板作为算法结果。
  3. 将两张牌放入您的棋盘到下一个可用位置,以便在游戏阶段可以拾取这两个位置。如果没有可用的位置,这意味着您错误地放置了先前的对,因此您必须重新跟踪 - 从堆栈中弹出状态,尝试在该状态下进行另一个放置。
  4. 将状态推送到堆栈。
  5. 转到 2。

诀窍是,您从赢得一个棋盘开始,然后添加一个层(一对),以便通过状态序列构造删除这对将导致可获胜的条件。显然,您可以将随机对添加到金字塔中的随机可用位置,并且偶尔会出现随机数,例如,在实际游戏过程中,最后两个位置将无法同时拾取,这是一种撤回的情况以前的位置,也许不只是一个。您可以通过为网格空间赋予深度值来补救这种情况,如果自由空间的最大深度等于未放置对的数量,则最深的位置将被占用而不是随机的。

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

  1. 准备空网格,准备要放置的卡片组。
  2. 递归入口点。如果通过-1(第一次),则选择一整套可用卡片。如果不是第一次,则根据之前选择的一张牌选择一组有效的牌(例如,有一张 4,全选 3,全选 5,如果允许,全选 4)。洗牌。如果集合为空,并且所有可用的卡片集合也为空,则从递归返回 true,否则返回 false。
  3. 从集合中选择下一张牌。如果没有剩余,则以失败退出递归。
  4. 检查当前卡片的移除是否会中断剩余的未放置卡片集。如果是,请转到 3。
  5. 在网格中选择一个空的可用位置,将选定的卡片放在那里。
  6. 使用当前卡片的值、更新的网格和减少的未放置卡片集进入递归(保存状态,转到 2)。
  7. 如果递归结果为假,则撤回 5 中的动作,然后转到 3。如果为真,则保留递归为真。
于 2013-07-25T08:33:51.870 回答