我制作的游戏与Greedy Spiders类似。简单地说,这是一个回合制游戏,其中有一个或多个蜘蛛试图去苍蝇吃它们。用户的任务是通过从网上切下一小部分来防止这种情况,以便释放苍蝇或捕获蜘蛛。有一个提示功能,显示如何完成关卡并释放苍蝇或以最少的切割(移动)捕捉蜘蛛。
我正在使用A *算法找到其中一只苍蝇的最短路径。该算法仍然不是很智能,因为它只找到最短路径并且没有考虑用户的剪切。
我想知道的是如何实现提示功能。我现在想的是使用游戏树并重视每个结果并选择最好的结果,但我不确定这是否是最好的方法。
您建议实施此类功能?
PS。我不是要复制应用程序。我想做一些类似于我自己努力的事情,这样我可以更好地解决问题。我想要一个想法,而不是解决方案......
答案 0 :(得分:2)
这是我的猜测。
在每个回合中,使用A *与所有蜘蛛一起找到所有蜘蛛最近的飞行的最短路径。以某种方式为每个蜘蛛的每个最短路径存储一些有序数据结构中的所有边。如果蜘蛛有多条可用路径共享最短路径长度,则存储所有路径。例如如果一只蜘蛛有3条路径可供3条不同的苍蝇使用,而且所有这些路径的长度都是2,则存储所有这些路径。
按路径长度“排序”步骤1中找到的路径。找出它们中最短的(具有最小长度的那些)。我们将这些称为最短的最短路径。
在所有这些最短的最短路径中,尝试在所有路径中找到最多共同(最高频率)的边缘。告诉玩家切割特定边缘(如果存在)。如果不存在这样的“共同”边缘,告诉玩家切断其中一条最短路径的最后一条边,因为这样可以最大限度地一次释放一只或多只苍蝇。
我没有严格证明这是有效的。作为一名球员,这似乎是最佳选择。
想到在多个最短路径之间找到“共同边缘”的想法,作为在一个回合中完成几个重要目标的方法,比如一次阻挡几个蜘蛛(或同时阻挡一个蜘蛛的多个路径)。可能有更高级的算法来完成这个特定的事情。否则,如果不存在“共同边缘”(即所有边缘都具有频率== 1),则最佳策略似乎是逐一切断最紧迫危险中苍蝇周围的边缘。