打印

[原创]JS中实现A*算法寻路

程序说明:程序中的障碍点设置后本次寻路中不可修改!
本程序完全采用A*寻路的理念,仅供学习之用!

由于积分不够,还不可以上传压缩包,因此粘贴所以程序代码如下:

 提示:您可以先修改部分代码再运行
;)

[ 本帖最后由 hjjboy 于 2006-8-6 18:05 编辑 ]
本帖最近评分记录
  • hutia 威望 +4 原创内容 2006-8-6 19:47
开发JSRPG
有关算法的原创文章还是一定要支持的.....

俺是外行....能不能麻烦解释一下 A* 算法?也算给俺扫盲......
不错,上次也有一个蚁群算法js版,现在很多人喜欢 搞人工智能了,呵呵

收藏。
很好呀,做游戏时经常用到的算法(鼠标点某个位置,人物自己找路走过去)。可以参考51js那边的几个JS游戏。

不过,好像还不完善呢,明明可以走过去的,却说“找不到路径”。

[ 本帖最后由 bound0 于 2006-8-7 22:11 编辑 ]
[Bound0 专题列表]QUE SAIS-JE?
生物信息技术支持动漫论坛动漫分享群:45274013

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
是啊,楼主能不能解释一下 A* 算法呢?
高雅清香的春兰秋桂,不慕求虚荣,不阿谀权贵;芳香出于自然,不是为了博取别人欣赏。

TOP

引用:
原帖由 bound0 于 2006-8-7 22:07 发表
很好呀,做游戏时经常用到的算法(鼠标点某个位置,人物自己找路走过去)。可以参考51js那边的几个JS游戏。

不过,好像还不完善呢,明明可以走过去的,却说“找不到路径”。
不会吧?
我已经试过了,是肯定能够寻找到路径的。
这个算法,我把穿越拐角的情况设定为不允许,因此在走拐角的时候必须走一个直角。

该算法也是我在自己做的JS游戏《新剑侠情缘》中运用的寻路算法,测试发现没有出现问题。

如果出现了问题,麻烦贴张图上来好吗?谢谢!

[ 本帖最后由 hjjboy 于 2006-8-8 19:22 编辑 ]
开发JSRPG

TOP

引用:
原帖由 powerzl 于 2006-8-8 09:18 发表
是啊,楼主能不能解释一下 A* 算法呢?
其实要说A*算法,网上已经有了许多的教程了,我也就不多说。

A*算法主要用到的是一个公式:F=G+H;
G,是指起始点到当前点的距离。
H,是指当前点到目的点的距离。
F,是两者之和。

为了方便起见,两点之间的距离直接取两者之间X方向的距离差+Y方向上的距离差。

在A*算法中,主要就是搜索一个点的周围八个方块(去掉不可走的),然后计算各个方块的F值,取F值最小的作为下一步需要走的方格,而把当前方格作为下一步的父方格。然后另下一步作为当前访格。依此轮回,直到找到目的方格为止。

我只是把我自己制作该算法时候的一些思路写出来,言辞难免粗糙,各位可到网上搜索A*算法教程自行参考。
开发JSRPG

TOP

没能再现当时的异常,可能是当时设置不当吧。程序没有问题。:)
[Bound0 专题列表]QUE SAIS-JE?
生物信息技术支持动漫论坛动漫分享群:45274013

TOP

这个要加分,去年摆渡程序比赛ACRush就使用的Astar算法

http://astar.baidu.com/data/demo/ACRush.txt

经典可以来场经典算法大演练啊

[ 本帖最后由 cnbruce 于 2006-8-9 09:36 编辑 ]
2008 · 布鲁斯狼的BLOG
-------------------------------------------------------------
艾生活·i0514·小艾生活网

TOP

看看 flash里 的研究。这个在游戏中用的也很多。
先点红色块确定起点,再点击任意终点,开始寻路
点击白色框,制造黑色障碍。
RESET,重置随机地图。
感觉速度比JS的快一点。

另外文章的四个分页,做了算法的说明。

http://www.blueidea.com/tech/multimedia/2005/3121.asp
只要集中精力,五年成专家,十年成权威,十五年成世界顶尖。

TOP

看的我头晕
msn:renaski@hotmail.com

TOP

回复 #9 cnbruce 的帖子

稍微看了下你个的那个代码,应该是采用的C写的吧?
应该说C与JS这种解释型的语言速度上是不可比拟的,如果在很大的范围内的话

大虾觉得如何?
开发JSRPG

TOP

回复 #10 蓝色 的帖子

看了那个FLASH的寻路算法,真的很不错!
但要是说到速度的快慢,应该JS不会输给AS的吧?

我修改了程序,把延时改成了0,应该很快就能找到终点了!

PS:用JS和AS的字符串累加做了一个速度测试,发现如果执行90000次循环的话,那么JS会死一段时间,然后时间超长。而AS才31ms左右,郁闷!
开发JSRPG

TOP

不错!
我对于算法还真没研究过,很有启发啊!
我原来用过的寻路算法没用到H计算这一块,可能对迷宫这样复杂的地形帮助不是很大吧,没事儿加上试试看.
自己动手 丰衣足食
-------------------------
猫了好长时间了,出来透透气~

TOP

这个不错 当时看那个用JS写的SC的时候研究过寻路算法了..

不过楼主这个很直接明了,收了 谢谢楼主 ~~

TOP

如果楼主有兴趣,可以看一下这个帖,
我估计性质是一样的。

http://bbs.blueidea.com/viewthread.php?tid=1640729

另外NCS还有这些个帖。
http://bbs.blueidea.com/viewthread.php?tid=2402659

寻路算法中,我最佩服的还是微软帝国时代二的算法。
8个种族。上限200,1600个点在寻路,而且还有队列模式。还有地图起伏。
在电脑上玩起来。还算好。
特别觉得难的地方是 两个人走同样的路卡住后,又选择同样的方向让路,结果两个人始终卡在那里。
怎么保证不卡死在那儿。真是不容易哈。
只要集中精力,五年成专家,十年成权威,十五年成世界顶尖。

TOP

引用:
原帖由 蓝色 于 2006-8-11 10:12 发表
特别觉得难的地方是 两个人走同样的路卡住后,又选择同样的方向让路,结果两个人始终卡在那里。
怎么保证不卡死在那儿。真是不容易哈
这个貌似好办呢:一个节点将要有人走的时候,对其他人来说,节点的G值增加就可以了(其他人就会不太愿意走同一点了)。
[Bound0 专题列表]QUE SAIS-JE?
生物信息技术支持动漫论坛动漫分享群:45274013

TOP

引用:
原帖由 蓝色 于 2006-8-11 10:12 发表
如果楼主有兴趣,可以看一下这个帖,
我估计性质是一样的。

http://bbs.blueidea.com/viewthread.php?tid=1640729

另外NCS还有这些个帖。
http://bbs.blueidea.com/viewthread.php?tid=2402659

寻路算 ...
那些帖子都是很不错的教程呢,说得比我清楚。

还有,你说的那个微软的帝国时代二的算法在哪里可以参考到??
要没有,又这个游戏的地址吗?

谢谢 蓝色
开发JSRPG

TOP

引用:
原帖由 蓝色 于 2006-8-11 10:12 发表
如果楼主有兴趣,可以看一下这个帖,
我估计性质是一样的。

http://bbs.blueidea.com/viewthread.php?tid=1640729

另外NCS还有这些个帖。
http://bbs.blueidea.com/viewthread.php?tid=2402659

寻路算 ...
...........汗.....星际的算法比帝国的优秀的多的多.......

TOP

引用:
原帖由 hutia 于 2006-8-11 17:53 发表



...........汗.....星际的算法比帝国的优秀的多的多.......
原来帝国时代是个PC游戏啊?郁闷,我以为是JS游戏呢
开发JSRPG

TOP

引用:
原帖由 hjjboy 于 2006-8-11 18:14 发表

原来帝国时代是个PC游戏啊?郁闷,我以为是JS游戏呢
大汗........

TOP

起点和重点重叠的时候出现BUG
69.4.239.126/bbs

TOP

我还是没弄明白!

TOP





我做了个比较变态的测试.
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!
.com

TOP