Silverlight 实现 A* 寻径算法


建议在新窗口中查看:
http://www.dotnet.pp.ru/silverlight/SilverlightAStar.html



花了几天的时间研究
A*算法,总算是搞出来了。放上来给大伙儿瞧瞧。

点击“StartPoint”指定开始点,点击“EndPoint”指定目标点。点击“Impediment”指定不可通过区域。

GridSize设置节点大小,节点越小,容器中的节点就越多,填好后点Set保存设置。

Clear清除所有。

StartFindPath 开始寻径

Completed Tim 显示寻径所耗时间。

Diagonals 设置是否可以斜着走。

自我感觉速度不错。

下面说说算法的大致流程

 

首先定义两个列表

        private List<PathNote> openedList = new List<PathNote>(); //开启列表

        private List<PathNote> colsedList = new List<PathNote>(); //关闭列表

开启列表中存储待检测节点。关闭列表中存储已检测节点。

 

从开始点开始,拿到开始点周围48个方向的节点,把他们添加进开启列表中。

G等于当前节点的父节点加上10或者14,水平或垂直方向加10,对角线方向加14

H等于当前节点的X的差与目标的的X的差、Y与目标点Y的差的绝对值的和。

 

F = G + H

把当前节点从开启列表中删除。并添加进关闭列表中。以“F”值为依据从小到大排序,把F值最小的节点拿出来,重复以上过程。

大致流程是这样的。细节方面已经有一篇文章写的非常详细,在此也没有必要赘述了。

传送门:http://data.gameres.com/message.asp?TopicID=25439


最后放上算法的代码,不多。直接以文本形式发出来算了。

PathFinder

 

posted @ 2009-09-18 16:25  猪笨无罪  阅读(2438)  评论(24编辑  收藏  举报