这是我长期以来一直在努力解决的问题之一。这是PentaHexes的游戏。玩家可以根据他/她的需要选择22个五角星中的一个并翻转/旋转五角星,然后将五角星放入网格中。在游戏的2人版本中,我必须检查游戏结束场景。当其中一个玩家未能在网格上保留pentaHex时,游戏结束。 作为参考,如果您选中this link,则会在第40页中显示游戏网格和五角星。
我正在寻找一种算法来做到这一点。我可以处理编码! 我可以用蛮力方法做到这一点,例如:
每次放置五角形
找到网格中所有未使用的六边形
检查未使用的PentaHexes,
得到PentaHex的模式,
检查是否可以在网格上放置任何pentaHex,
如果是,则
游戏还没结束
如果没有
游戏结束。
答案 0 :(得分:2)
你的问题显然不是不知道如何解决问题的问题,而是“我怎么做比蛮力更好”的问题。
虽然我没有特别研究过这个游戏,但是“拼图拼凑”这类游戏中的许多类似游戏都变成了组合问题,这些问题总会遭遇一些令人讨厌的最坏情况。
如果你是这个话题的新手,那就有很多关于它的阅读。即使是非常简单的游戏,如扫雷或俄罗斯方块 - 当以正式方式查看时 - 没有(known!)完全普遍的解决方案明显优于蛮力:
https://math.stackexchange.com/questions/39578/simple-real-life-np-hard-problems
你的武器库中有一个工具就是某种“侧面结构”的想法。只是抛出一个随机的例子(这可能不是一个好主意)你可以在每个单元格上存储一个数字,说明它可以达到多少个连接的单元格。每次将一块添加到电路板上时,您可以从这些数字中减去以反映电路板的新现实。然后用每个连接单元的数量标记每个单元的每个单元格。这会突然使您能够“快速”搜索。 (例如,您不必测试任何无法到达至少4个其他细胞的细胞,因为没有可能适合它的pentahex!)
虽然权衡总是存在于这些边结构消耗的内存中,以及保持最新状态所需的时间。我的袖手旁观的例子可能比普通的pentahex游戏节省的成本更高。所以它是否值得,取决于你的具体情况。
对这些问题保持敏感和了解是很好的,但不要让它阻止你先编写低效但“正确”的版本......然后看看你在何处以及如何使用优化提升。
答案 1 :(得分:1)
您正在尝试优化尚不存在的内容。
首先实施它,使用您的蛮力理念,然后当您拥有适合时尚的东西时,您将更好地了解需要发生的事情。这是您开始优化和改进代码的时候。
非常,非常,很少有人编写一段在第一次迭代中完美的代码。
在编码之前,不要陷入尝试完成/最终设计的陷阱。很难预见到所有意外事件/问题。使用您的设计作为指南和范围分隔符;写下你的第一个'草案'计划;现在你可以调试和优化。
您可以编码,因此您知道这是一个迭代过程。