文字游戏求解算法

时间:2017-08-28 06:26:58

标签: java algorithm recursion artificial-intelligence solver

游戏由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(粗体字母):

Finding 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社区的要求下,使问题更加简洁。

1 个答案:

答案 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/

  1. 产生可能的动作
  2. 按评估启发式排序可能的移动
  3. 进行每次移动并重新评估, 注意:进行移动意味着向树中添加节点。
  4. 潜入树中
  5. 如果得到的板启发式<以前,爬树和修剪。
  6. 访问下一个兄弟姐妹
  7. 因此讨论了你的规则。

    1. 什么是一个好的成本函数?
    2. 在这个游戏中,最佳目标是删除一个单词,使得生成的网格尽可能保持正方形。这最大化了每个字母的潜力。孤立的字母,只有一个邻居大大减少了可能的单词列表。因此,一个好的成本,可能是“方形”'董事会。

      1. 根据评估对可能的移动进行排序。

        此处的起点可能只是长度搜索。尝试先制作最长的单词。

      2. 早期测试的艺术

      3. 如果拼图是用相同长度的N个单词构建的,那么如果可能的单词列表不包含这个长度的单词,那么很容易提前出现。从最左边和最右边开始,如果其中一列的字母只有一个字母,那么某些字母几乎可以立即返回。

        想想这个案例:

            B I
            A G 
        Z X C T Y Y
        

        这应该被视为坏板,因为没有单词以Z X开头或以XZ结尾