2013-07-25 127 views
0

我目前正在开发一款使用Actionscript 3的纸牌游戏,并且我在想如何确保至少有一个赢的可能性。纸牌游戏:win play

游戏中有类似的游戏本之一:

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

播放器具有播放配衬以前或所呈现的卡的下一个值的卡片。

我试过不同的方法,但还是不满意。

我想知道的是,如何确保在隐藏卡片中,至少有一个获胜的游戏,所以玩家将有可能获胜。

感谢

+0

这很大程度上取决于你的游戏的规则和过程,根据你的描述你可以建立一个图表给出2张牌是邻居,这意味着2张牌之间存在边缘,如果其中之一是前一张或下一张的另一张牌 –

回答

0

鉴于所有的卡都是预先放置,你可以做到以下几点:

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

诀窍是,开始时使用板被拿下,并添加层(一对),从而除去这一对将导致一个取胜的条件下,由状态序列结构。显然,你可以在随机可用的金字塔位置添加随机配对,偶尔随机配对会使得例如最后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保留递归。