有什么好的算法可以将猫困在“圈猫”游戏中?

时间:2018-10-24 20:50:54

标签: algorithm

我做了基于广度优先搜索-BFS的cat算法(因为我在这里的另一个主题中了解了它)。但是现在我想知道是否有很好的策略来抓猫。

对于不认识的人,游戏是这样的:https://www.gamedesign.jp/flash/chatnoir/chatnoir.html

1 个答案:

答案 0 :(得分:0)

好游戏。我今天没看过。我玩了一段时间,如果要编写代码,我已经尝试记录算法...免责声明:这些只是我的想法,虽然我不在电脑旁,但没有数学证明可以工作诸如此类的东西。

我想首先给每个正方形赋值(我知道它们不是正方形的,我使用“正方形”来表示董事会中的每个位置)。这些值将有助于指示哪种猫可能是最佳选择。对于以下每个步骤,请忽略已填充的正方形。

首先,为每个正方形分配一个 DistanceToWin 值,以显示距木板边缘的距离,如下所示...

  1. 为靠近棋盘边缘的每个方块赋予 DistanceToWin 值为1。
  2. 与1相邻的每个正方形的值均为2;在2旁边得到3;等。继续操作,直到未设置新值为止。请注意,有些正方形可能没有设置值:它们没有到边缘的路线,因此,如果猫在这些正方形之一上,就会被困住,迟早您会赢。

现在,我们需要说明每个正方形的 HowManyRoutes 可能,如下所示(这可以在分配 DistanceToWin 的同时完成>)

  1. 每个具有 DistanceToWin = 1的正方形的 HowManyRoutes 值为2。(我的想法是,这表示逃脱不能被阻止:再走一步,然后您不能一口气封锁两条路线。)
  2. 每个具有 DistanceToWin 值的正方形都将 HowManyRoutes 设置为具有 DistanceToWin <的邻居的 HowManyRoutes 的总和。 / em>值。

最适合猫的正方形是与猫的正方形相邻的正方形,该正方形具有 HowManyRoutes 的最高值除以 DistanceToWin (我称之为< em>得分)。如果得分为> = 2,则猫可以/应该逃脱。每次填充一个正方形时,这些值都需要在整个面板上重新计算,除非您想弄清楚哪些正方形受到了影响。

诱捕猫的算法似乎分为三类:

  1. 猫被包围了( DistanceToWin 未设置为猫的正方形),只需要最终被困住即可。
  2. 此举需要阻止猫的最佳逃生路线(猫邻居的最佳得分 = 1,该路线上任何下一步的最差得分是> 1)
  3. 猫有很多逃生路线,您需要限制其选择范围。

对于类别1,我建议填充猫旁边的任何正方形。

类别2,填充需要填充的正方形。

类别3:填入一个正方形,以最大程度减少整个木板的得分