Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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
Javascript A*Snake在距离x处跟随尾巴的实现_Javascript_Algorithm_A Star - Fatal编程技术网

Javascript A*Snake在距离x处跟随尾巴的实现

Javascript A*Snake在距离x处跟随尾巴的实现,javascript,algorithm,a-star,Javascript,Algorithm,A Star,我正在尝试用javascript编写一个snake AI,它被证明是一种挑战。 a*算法让蛇找到食物,然后回到它的尾巴很容易,但现在我想在蛇头和尾巴之间有一个缓冲区,所以当蛇吃了食物,尾巴就在它的头旁边时,它不会立即跟随尾巴,但决定绕道以达到其后端的指定最小距离,如下所示: 这在蛇头和蛇尾之间创造了一个小的呼吸空间,以防食物在两者之间产卵 我似乎不知道如何调整a*算法以适应缓冲区空间。如果你有时间的话,我希望你能给我一些建议,告诉我如何在一个*想法中实现“最小跟车距离”,使实际的尾部

我正在尝试用javascript编写一个snake AI,它被证明是一种挑战。 a*算法让蛇找到食物,然后回到它的尾巴很容易,但现在我想在蛇头和尾巴之间有一个缓冲区,所以当蛇吃了食物,尾巴就在它的头旁边时,它不会立即跟随尾巴,但决定绕道以达到其后端的指定最小距离,如下所示:

这在蛇头和蛇尾之间创造了一个小的呼吸空间,以防食物在两者之间产卵


我似乎不知道如何调整a*算法以适应缓冲区空间。如果你有时间的话,我希望你能给我一些建议,告诉我如何在一个*

想法中实现“最小跟车距离”,使实际的尾部长2个单位,但不要画最后2个单位。这样,这两个空间将被看不见的尾巴占据。(或一些类似的变化)。基本上,你的a*需要将尾部附近的空格视为不可用,因此你在a*期间的检查将
被占用=mapdata[mapcellY*mapwidth+mapcellX]| isNearTail(mapcellX,mapcellY)
虽然这可能很有趣,可以避免很多不好的情况,但我不确定一旦蛇的尾部被破坏,它在很多情况下都会起作用“埋葬“在它自己的尾巴的线圈或被网格的边缘切断。你是想制造一个完美的人工智能,还是仅仅是一个比天真的苹果之路更好的东西?@ggorlen我不太清楚你的意思,你能详细说明一下吗?。我正在尝试制作一种人工智能,它在大多数情况下都能完美地解决snake问题,但也不会遵循预先计算好的hamilton循环。@gman我尝试了一种类似的方法,结果在某个时候遇到了问题,我将不得不再次尝试,看看我是否做错了什么。我想你可能是对的。很明显,如果if按原样工作,那么如果唯一的区别是尾部的最后N个单位是不可见的,你会得到正确的解决方案吗?如果您希望其他对象能够进入这些单元,那么您可能需要某种方式,仅当头部使用*一个想法时,才将它们视为已占用,将实际尾部延长2个单位,但不要绘制最后2个单位。这样,这两个空间将被看不见的尾巴占据。(或一些类似的变化)。基本上,你的a*需要将尾部附近的空格视为不可用,因此你在a*期间的检查将
被占用=mapdata[mapcellY*mapwidth+mapcellX]| isNearTail(mapcellX,mapcellY)
虽然这可能很有趣,可以避免很多不好的情况,但我不确定一旦蛇的尾部被破坏,它在很多情况下都会起作用“埋葬“在它自己的尾巴的线圈或被网格的边缘切断。你是想制造一个完美的人工智能,还是仅仅是一个比天真的苹果之路更好的东西?@ggorlen我不太清楚你的意思,你能详细说明一下吗?。我正在尝试制作一种人工智能,它在大多数情况下都能完美地解决snake问题,但也不会遵循预先计算好的hamilton循环。@gman我尝试了一种类似的方法,结果在某个时候遇到了问题,我将不得不再次尝试,看看我是否做错了什么。我想你可能是对的。很明显,如果if按原样工作,那么如果唯一的区别是尾部的最后N个单位是不可见的,你会得到正确的解决方案吗?如果希望其他对象能够进入这些单元,则可能需要某种方式,仅当头部使用时,才将其视为已占用*