Javascript 六边形地图上的运动算法

Javascript 六边形地图上的运动算法,javascript,jquery,algorithm,hex,Javascript,Jquery,Algorithm,Hex,我在这个网站上有一个问题:(点击该单元)。在我的Javascript源代码中(最后一个$('div.unitImg')。单击(function()function),我想标记该单元无法到达的所有六边形 我有一个非常复杂的算法,当移动值为1时可以正常工作,但是如果移动值更高,则无法正常工作(尝试移动2) 你对找到正确的十六进制数的算法有什么想法吗 以下是坐标编号的示例: 感谢您的回复。首先,我建议您重新设计坐标。中提供了一个很好的示例 但是不管坐标系是什么,我想你将来在球场上都会遇到一些障碍(一些

我在这个网站上有一个问题:(点击该单元)。在我的Javascript源代码中(最后一个
$('div.unitImg')。单击(function()
function),我想标记该单元无法到达的所有六边形

我有一个非常复杂的算法,当移动值为1时可以正常工作,但是如果移动值更高,则无法正常工作(尝试移动2)

你对找到正确的十六进制数的算法有什么想法吗

以下是坐标编号的示例:


感谢您的回复。

首先,我建议您重新设计坐标。中提供了一个很好的示例


但是不管坐标系是什么,我想你将来在球场上都会遇到一些障碍(一些石头、龙等),所以你应该设计一个通用的算法来做准备。我建议你研究一下,但你不需要显式地构建图,当你需要边的时候,你就知道你的场上有什么相邻的六边形(深度1,这是有效的)然后遍历。这是一般的方法。也有DFS,但当相邻边的数量相当有限时,BFS通常被认为对可达性问题更有效。

首先,我建议您重新设计坐标。中提供了一个很好的示例


但是不管坐标系是什么,我想你将来在球场上都会遇到一些障碍(一些石头、龙等),所以你应该设计一个通用的算法来做准备。我建议你研究一下,但你不需要显式地构建图,当你需要边的时候,你就知道你的场上有什么相邻的六边形(深度1,这是有效的)然后遍历。这是一般的方法。也有DFS,但当相邻边的数量相当有限时,BFS通常被认为在可达性问题上更有效。

谢谢你的回答。我从来没有处理过如此复杂的事情和算法。直到现在,我只是用PHP编写一些应用程序(比如电子商店,一些俱乐部使用的面向对象的复杂的通信网络)在javascript中也只有一些更简单的事情。所以我没有BFS之类的algorytms以及它们在javascript中实现的经验。你知道js中的algorytms及其在这个问题上的应用或类似的教程吗?不幸的是,我不知道链接,因为我在学校里用俄语学习过,所以我不能支持提供一个指向英语资源的可信链接。你可以用谷歌搜索。我建议你尝试查找非通用图算法(作为链接的wiki页面),但也有一些使用BFS从迷宫中找到出口的例子。我相信这会给你一些见解。如果你不想太多图形,而是想骑士、龙和/或迷宫,这很容易:)BFS在这里是非常自然的,因为它确保节点按距离增加的顺序遍历,因此可以很容易地修改它,以便只查找距离固定的节点。谢谢。直到现在,我一直在寻找一些在JavaScript中使用BFS的示例,或者至少在JavaScript中使用BFS实现的示例,但我找不到任何东西。实际上我不知道我不知道我在找什么:-)。它将是一些javascript函数或库,我将像其他函数一样使用它,并给它一些参数?:-)@Kryštof,不,BFS很容易自己编写,所以你应该寻找一个例子,然后理解它并应用到你的任务中。谢谢你的回答。我从未处理过如此复杂的事情和算法。到目前为止,我只是用PHP编写了一些应用程序(比如电子商店,一些俱乐部使用的OOP的复杂的网络通信),也只是用javascript编写了一些简单的程序。因此,我对BFS等算法及其在JavaScript中的实现没有经验。你知道关于js中的这个算法及其在这个问题上的应用的任何教程吗?不幸的是,我不知道链接,因为我在学校用俄语学习,所以我不能提供一个到英语资源的可信链接。你可以用谷歌搜索。我可以建议您不要尝试寻找一般的图形算法(如链接的wiki页面),而是使用BFS查找迷宫出口的一些示例。我相信这会给你一些启示。如果你不想太多的图形,而是想骑士、龙和/或迷宫,这是很容易的:)BFS在这里非常自然,因为它确保节点按增加距离的顺序进行遍历,因此可以很容易地修改,只找到距离固定的节点。谢谢。直到现在,我一直在寻找一些在JavaScript中使用BFS的例子,或者至少是在JavaScript中使用BFS实现的例子,但我找不到任何东西。实际上我不知道我在找什么:-)。它将是一些javascript函数或库,我将像其他函数一样使用它,并给它一些参数?:-)@Kryštof,不,BFS很容易自己编写,所以你应该寻找一个例子,然后理解它并应用到你的任务中。