鉴于所有的卡都是预先放置,你可以做到以下几点:
- 获得清晰的板。配对你的卡片组,获得一组配对
- 从剩余的配对中取出一对。如果设置为空,则提供填充板作为算法结果。
- 将两张牌放置到您的棋盘上到下一个可用位置,以便两个地方都可以在游戏阶段进行拾取。如果没有可用的地方,这意味着你已经错误地放置了前一对,所以你必须重新拉伸 - 从堆栈弹出状态,尝试另一个位置在该状态。
- 将状态推入堆栈。
- 转到2.
诀窍是,开始时使用板被拿下,并添加层(一对),从而除去这一对将导致一个取胜的条件下,由状态序列结构。显然,你可以在随机可用的金字塔位置添加随机配对,偶尔随机配对会使得例如最后2个位置在实际游戏过程中不能同时提取,这是一种缩回的情况以前的安置,可能不只是一个。您可以通过给网格空间赋予深度值来弥补这种情况,并且如果空闲空间的最大深度等于未放置对的数量,则最深处将被占用而不是随机。
如果您的游戏涉及一次玩一张卡片,则应该在挑选下一张卡片时执行额外的检查 - 如果剩余的一组卡片未连接,例如,你已经选择了所有4个,并且在未选中的组中剩下3个和5个。这意味着您必须收回以在前一阶段选择其他卡。算法可以是这样的:
- 准备空网格,准备一组卡。
- 递归入口点。如果通过-1(第一次),选择一整套可用的卡。如果不是第一次,则根据先前选择的一张卡片选择一组有效卡片(例如,有4个,选择全部3个,选择全部5个,如果允许则选择全部4个)。随机播放。 如果这个集合是空的,并且所有可用的卡片组也是空的,用递归返回true,否则返回false。
- 从集合中选择下一张卡片。如果没有剩余,则退出失败递归。
- 检查当前卡的移除是否停止剩余的未放置卡。如果是,请转到3.
- 在网格中选择一个空的可用位置,将选定的卡放置在那里。
- 使用当前卡的值,更新的网格和减少的未放置的卡组输入递归(保存状态,转到2)。
- 如果递归结果为false,则返回5中的动作,并转至3.如果为true,则使用true保留递归。
这很大程度上取决于你的游戏的规则和过程,根据你的描述你可以建立一个图表给出2张牌是邻居,这意味着2张牌之间存在边缘,如果其中之一是前一张或下一张的另一张牌 –