Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 为类似麻将的益智游戏提供路径和可能的解决方案_Algorithm_Actionscript 3_Match_Puzzle - Fatal编程技术网

Algorithm 为类似麻将的益智游戏提供路径和可能的解决方案

Algorithm 为类似麻将的益智游戏提供路径和可能的解决方案,algorithm,actionscript-3,match,puzzle,Algorithm,Actionscript 3,Match,Puzzle,我想问一下,是否有更容易的一步一步,使路径和可能的解决方案,如游戏 我已经搜索过像A*和Djikstra这样的寻路算法。 我读过这篇文章。 但是,我真的不明白如何在上面链接中这样的游戏中实现。 如果你对此有所了解,请帮忙。谢谢 我使用的语言是AS3 actionscript-3。 我会这样做: 1Let’s use backtracking with some heuristics我不知道它的实际运行速度有多快 2Let假设当前状态为Sstate,由剩余的磁贴定义。 如果没有留下瓷砖,则找到解决

我想问一下,是否有更容易的一步一步,使路径和可能的解决方案,如游戏

我已经搜索过像A*和Djikstra这样的寻路算法。 我读过这篇文章。 但是,我真的不明白如何在上面链接中这样的游戏中实现。 如果你对此有所了解,请帮忙。谢谢 我使用的语言是AS3 actionscript-3。 我会这样做: 1Let’s use backtracking with some heuristics我不知道它的实际运行速度有多快

2Let假设当前状态为Sstate,由剩余的磁贴定义。 如果没有留下瓷砖,则找到解决方案

否则,您可以使用深度优先搜索来查找匹配的瓷砖对。 一个简单的解决方案是尝试匹配每一对,删除它并继续搜索,如果分支失败,则进行回溯。 但是,有一些启发式方法可以加快搜索速度: 如果只有两块同一类型的瓷砖可以移除,请移除它们。请勿尝试删除此状态下的任何其他对。我声称,若解存在,那个么可以先去掉这一对。 B如果现在可以匹配一种类型的所有瓷砖,即使有两种以上,也要匹配。请勿尝试删除此状态下的任何其他对。 cIf既不适用a也不适用b,那么您必须尝试所有可能的方法,比如在一个简单的版本中

如您所见,如果a或b应用于当前状态,这些启发式方法允许您避免分支,因此它们可以加快搜索速度,尤其是在游戏结束时,当只剩下几个分片并且几乎所有分片都已连接时


另外,你也可以使用回忆录来避免两次访问同一个州。

游戏链接冻结了mine opera:很难说,但如果它像麻将一样,你想生成故事,所以有有效的解决方案,那么只需在随机的自由顶部位置添加随机对,直到金字塔形成。要解决这个游戏,你必须使用蛮力,这是非常缓慢的:可能一些启发式方法会有所帮助,但不会有多大帮助。只要像你想的那样解决它,当你碰到错误的一端时,就可以追溯到以前的状态。。。并重新启动,直到找到有效的解决方案,但运行时将horrible@Spektre谢谢你的回复。但路径是复杂的。因为如果小于或等于两个角,一个瓷砖可以移动到另一个瓷砖。一旦我匹配了一对,路径就会改变。对不起,如果你不能打开链接,但游戏名称是梦之恋链接2。在zibbo.com上试试,搜索梦之爱链接2。你能给我一些在as3中容易理解的代码或源代码吗。非常感谢。我没有时间下载和玩/分析游戏:2。AS3是未知的我,我主要代码在旧的C++,所以源代码是很难给你应该开始编码自己,当击中一些墙贴在这里的确切问题规范。顺便说一句,如果它像麻将,为什么你需要路径查找?你应该从游戏数据开始,整个游戏是如何表现的:棋盘的地图,瓷砖类型和计数枚举?等等麻将安全的招式是当你有4个牌都可以使用时,先把它们拿走。这个招式永远不会使结果无效,当你只有一个选择时。。。记住只有在你第一次不安全的移动之前才有状态。。。这将大大加快solvingah的速度,因此您需要瓷砖移动动画的路径,请看这里:只需加载贴图,使瓷砖的墙高于两个匹配的墙。我认为,除非存在一些状态压缩,否则记忆将不是一个好主意,因为它将需要大量内存,想象一下分支的数量现在想象它们的组合,并将其乘以状态大小,或者是移动序列,或者是平铺贴图,那么你的内存就会很快耗尽。基本思想很好,只是在分支移动中使用状态递增,通过所有有效的移动,允许有单一的状态实例。示例如下:@Spektre状态由剩余的分幅定义。它可以存储为一个64位的位掩码,对于具有较小整数块数的贴图,甚至可以存储为32位的位掩码。在这种编码中,这应该是可能的,但请注意,处理这种状态所需的处理量可能会导致解算运行时的极慢,例如解算器为~Om^n,其中n是早午餐数,m是平均移动可能性。就像上面的例子一样,立方体复杂状态的求解时间约为238小时,简化后仅为~11秒,n在麻将中不到20,这是很多的more@user2040251谢谢你的回复。你能给我举一些启发式回溯代码的例子吗。我如何生成电路板磁贴,使它们有自己的路径?因为每个瓷砖都有不同的路径。如果我问的问题太多,我很抱歉。