游戏由3X3至7X7字母的方板组成。玩家必须在棋盘上找到最多10个给定的单词(最难的情况)。字母必须相互接触(在8个周围的方格内)。当找到一个单词时,它被移除并且重力导致上部块填充间隙(字母将永远不会水平移动)。如果你熟悉手机游戏WordBrain,这个机制是完全相同的。不同之处在于所有单词都是为您提供的,因此算法不需要字典来查找真实单词。这些单词可以按任何顺序找到,当棋盘空了时游戏结束。
示例(7个字,含8个字):
开始状态:
C E F S C R E
R A U C G C E
T R N A R R C
E C A R C E E
A E E A E A H
R R C A M E L
I E R A R E R
Find: ARCHER CAMERA CARRIER CEREAL
CREATE FURNACE GREECE SCARE
现在玩家决定删除单词CARRIER(粗体字母):
结果董事会成员:
S C R E
F C G C E
U A R R C
C E N R C E E
R A A A E A H
T R E A M E L
E E C A R E R
Find: ARCHER CAMERA CEREAL
CREATE FURNACE GREECE SCARE
我保证起始状态是可以解决的。现在CARRIER被删除了,我不再对可解性有任何保证。
这就是游戏的玩法。从算法的角度来看,解决这个问题的正确,最有效的方法是什么?
编辑:在这个伟大的SO社区的要求下,使问题更加简洁。
答案 0 :(得分:2)
我已经制作了许多文字游戏,所以我将在这里评论一个整体方法,我相信它是NP,所以只适用于小板尺寸。由于问题更多的是找到董事会清算解决方案而不是找到可能的单词,我不会覆盖如何解决给定长度n的所有可查找单词的主题,如前所述并可通过使用来解决前缀尝试,并在谷歌非常可搜索。此外,当列清除时,我假设列一起移动,就像标准match3一样。
几乎所有游戏解算器都具有与其算法设计类似的模式。对于match3游戏:
https://gamedev.stackexchange.com/questions/15063/ai-for-solving-a-match-3-game https://www.gamedev.net/forums/topic/575282-solving-bejeweled-type-game/
因此讨论了你的规则。
在这个游戏中,最佳目标是删除一个单词,使得生成的网格尽可能保持正方形。这最大化了每个字母的潜力。孤立的字母,只有一个邻居大大减少了可能的单词列表。因此,一个好的成本,可能是“方形”'董事会。
根据评估对可能的移动进行排序。
此处的起点可能只是长度搜索。尝试先制作最长的单词。
早期测试的艺术
如果拼图是用相同长度的N个单词构建的,那么如果可能的单词列表不包含这个长度的单词,那么很容易提前出现。从最左边和最右边开始,如果其中一列的字母只有一个字母,那么某些字母几乎可以立即返回。
想想这个案例:
B I
A G
Z X C T Y Y
这应该被视为坏板,因为没有单词以Z X开头或以XZ结尾