我正在开发一款基于JavaScript的实验游戏。玩家必须前往二维平铺地图上退出。
Feel free to check this fiddle and play
我只是随意设置障碍物,但有时候障碍阻挡了玩家和退出之间的距离,等级变得无法击败。
下面的代码展示了如何将障碍放置在地图中不是实际代码的一部分,我只是将这部分简化并翻译成英文以提高可懂度:
var arrayCoordinates;
var targetSquare;
var obstacleAmount = 30;
for (var i = 1; i <= obstacleAmount; i++) {
arrayCoordinates= randomCoordinates();
targetSquare = document.getElementById(arrayCoordinates[0] + '-' + arrayCoordinates[1]);
targetSquare.className = 'obstacle';
}
我只是在寻找路径寻找算法,或者让我写一个想法。
答案 0 :(得分:1)
前几天的采访中有这样的问题。
你的问题归结为找到从A点到B点的最短路径,因为它们之间的所有步骤都是有效的(根据你的规则集)。
所以我们假设我们有一个X乘Y空间的网格。如果我们从太空(x,y)开始,那么我们需要在板上找到下一步的位置。这涉及计算我们可以从当前位置移动的所有潜在方格。
首先想象一下,这个问题是一个蜘蛛网,我们的起始广场在它的震中。如果我们从蜘蛛网的中间开始,我们不希望选择随机方向并开始行走,直到我们到达边缘 - 我们可能完全朝错误的方向行走。这是计算路径的天真方法,花费的时间远远超过它的替代方案。最好的是在网上横向行走,只有在我们达到目标时才停止探索。
即将使用代码进行更新。
编辑:使用javascript代码,只需查找-1即可检测不可能的游戏。 LINK
答案 1 :(得分:1)
你在这里所拥有的实际上是一张图。图形顶点是自由正方形,并且当两个单元格之间存在边缘时,并且仅当它们都不是黑色并且它们共享公共边时。既然您已将任务转换为图形问题,那么您需要做的就是从绿色方块执行任何BFS的搜索。当且仅当搜索完成时访问目的地时,该级别才是可解决的。
答案 2 :(得分:1)
DBS在对你的问题的评论中有正确的想法。
您可以使用BFS或DFS在放置障碍物之前生成路径。 (BFS会给你一条你可能不想要的最短路径,而DFS会给你一条路径,这可能会更有趣。)然后当你放置障碍物时,确保它不会落在路径上。如果是,请更换障碍物,直到障碍物不在路径上。
或者,如果您愿意,可以在使用Dijkstra's algorithm放置障碍物之后生成路径,它会告诉您从您到达目的地的最短路径。具有障碍物的正方形的边缘将具有非常高的重量,并且没有障碍物的正方形边缘将具有非常低的非负重量(可能是1或0)。这将使迷宫中有更多有趣的路径,但如果Dijkstra无法成功完成,你可能需要更频繁地更换障碍物。
答案 3 :(得分:0)
制作此类地图的最佳方法不是在地图中添加障碍物,而是从中移除障碍物。首先你的地图将包含所有障碍物,只有起点和目的地没有障碍。然后你开始从网格中随机逐个移除障碍物。使用union和查找数据结构来检查源和目标是否在任何点连接。你可以继续,直到他们连接或进一步你可以继续消除障碍,这样你也可以定义地图的复杂性。