• 新浪微博:
  • 微信 :
按键精灵电脑版
立即下载

软件版本:2014.05
软件大小:21.6M
更新时间:07-04

按键精灵安卓版
立即下载

软件版本:3.3.0
软件大小:62.5M
更新时间:5-24

按键精灵iOS版
立即下载

软件版本:1.3.3
软件大小:29.2M
更新时间:06-14

按键精灵Mac版
立即下载

软件版本:1.1.0
软件大小:12.3M
更新时间:12-29

快捷导航

登录 后使用快捷导航
没有帐号? 注册

登录 注册
返回列表 12345678» / 9
发新话题 回复该主题

20源码实现【自动寻路】 —【拓扑图】—网游城市互传最优路径算... [复制链接]

1#
本帖最后由 renjinqiaoqq 于 2014-8-4 16:49 编辑

很多朋友传图,经过N个,然后才到自己目的地。
比如 如下地图

如果从瓦当出发,去古洞。那么,可以是瓦当—洛阳—南郡—古洞。。。瓦当—洛阳—冰峪—南郡—凤翔—古洞。。
怎么走才到,经过几个城市。路途最短怎么走。。。
这就是拓扑图最短路径算法了。
那遇到这样的图,我们怎么在代码上把图画出来呢。
小妖是利用的伪二维数组。比如,这个图。代码如下
  1. 地图数组(1) = array("瓦当", 1, 2, 4)
  2. 地图数组(2) = array("洛阳", 2, 1, 3, 4, 5)
  3. 地图数组(3) = array("冰峪", 3, 2, 5, 7)
  4. 地图数组(4) = array("落水", 4, 1, 2, 5, 6)
  5. 地图数组(5) = array("南郡", 5, 2, 3, 4, 6, 7)
  6. 地图数组(6) = array("凤翔", 6, 4, 5, 7, 8)
  7. 地图数组(7) = array("徐州", 7, 3, 5, 6)
  8. 地图数组(8) = array("古洞", 8, 6)
复制代码
[backcolor=#f7f7f7]地图数组(1) (0) 装地图名称 地图数组(1) (1) 装地图代号 后面的装 地图所能到的其他地图代号
这儿,小妖是从1开始的,为了方便编号 ,不过按键来说,从0开始,大家以后做的时候 ,可以从0开始。
这样,我们就把这张图做出来了。
这样的话,其实,地图数组(1) 本身也是一个数组。我们要用其中的元素的时候,值需要这样调用,如需要 "瓦当" 这个元素:
地图数组(1) (0),这样就行了!甚至可以这样:地图数组(地图数组(2)(2) )(0).
这是什么意思呢?要一层一层的解析。括号里面的首先看喽。 地图数组(2)(2)这个是地图2的第三个元素。结果返回的是1.那么就是:地图数组( 1 ) (0)了,这儿的1是地图数组(2)(2)的返回值。所有,地图数组(1) (0)和地图数组(地图数组(2)(2) )(0)的值时一样的都是"瓦当"。
这些都是 [backcolor=rgb(255,255,255)]we似曾相识[backcolor=rgb(255,255,255)] 帖子上得到的启发。


做了个控件,让其实现选择城市,然后在下面体现两个城市的寻路路径。
核心代码很短。
  1. Dim 地图数组(100) //这儿定义的是地图数组 用来装每一个城市的
  2. Event Form1.Load
  3. 地图数组(1) = array("瓦当", 1, 2, 4) //拓扑图 这儿我利用伪二维数组装 (0) 装地图名称 (1) 装地图代号 后面的装 地图所能到的其他地图代号
  4. 地图数组(2) = array("洛阳", 2, 1, 3, 4, 5)
  5. 地图数组(3) = array("冰峪", 3, 2, 5, 7)
  6. 地图数组(4) = array("落水", 4, 1, 2, 5, 6)
  7. 地图数组(5) = array("南郡", 5, 2, 3, 4, 6, 7)
  8. 地图数组(6) = array("凤翔", 6, 4, 5, 7, 8)
  9. 地图数组(7) = array("徐州", 7, 3, 5, 6)
  10. 地图数组(8) = array("古洞", 8, 6)
  11. End Event
  12. //下拉框响应事件。改变下拉框的值时,自动根据改变值计算最短路径。
  13. Event Form1.ComboBox1.SelectChange
  14. Form1.Label1.Caption=寻路(地图数组(Form1.ComboBox1.ListIndex+1), 地图数组(Form1.ComboBox2.ListIndex+1)(0))
  15. End Event
  16. //下拉框响应事件。改变下拉框的值时,自动根据改变值计算最短路径。
  17. Event Form1.ComboBox2.SelectChange
  18. Form1.Label1.Caption=寻路(地图数组(Form1.ComboBox1.ListIndex+1), 地图数组(Form1.ComboBox2.ListIndex+1)(0))
  19. End Event
  20. Function 寻路(所在城市, 目标城市) //弄个函数...
  21. Dim 栈(100, 1), i, j, z //定义
  22. i=1 : 栈(0, 0) = 所在城市(0) : 栈(0, 1) = 所在城市(1) //给变量初始值 其中 i 是 栈 有值下标后面一个(空闲单元下标) (0) 栈(0,0) 第一个装路径的栈 (0) 栈(0,0) 第一个装城市代号的栈
  23. For j = 0 To 99
  24. If 地图数组(栈(j, 1))(0) = 目标城市 Then // 判断是不是已经到了目标城市
  25. 路径 = 栈(j,0) //如果到了,那么返回的路径就等于 栈(j,0) 这是路径
  26. Exit for //退出 for循环
  27. Else
  28. For z = 2 To UBound(地图数组(栈(j, 1))) //训话地图下面的所有能够到的地图 2开始 是去掉名称 本地图代码之后
  29. If InStr(栈(j, 0), 地图数组(地图数组(栈(j, 1))(z))(0)) > 0 Then //如果这个地图名称在 路径 上出现过 那么跳过
  30. Else
  31. 栈(i, 0) = 栈(j, 0) & "→" & 地图数组(地图数组(栈(j, 1))(z))(0) //把新的路径装到i堆栈里面,新的路径包括要最前栈&新加入的地图名称
  32. 栈(i, 1) = 地图数组(栈(j, 1))(z) //把地图名称装入 i堆里面
  33. i = i + 1
  34. End If
  35. Next
  36. End If
  37. Next
  38. 寻路=路径 //返回结果路径
  39. End Function
复制代码
寻路_20138291157.Q (, 下载次数:917)

[backcolor=rgb(255, 255, 255)]一共 20行搞定寻路核心代码。而且寻路利用堆栈。直接求得结果。效率应该算是很高的了。
脚本中详细介绍 栈 的实现 详细注释 更好的让大家了解堆栈的概念

界面设计________汇总贴(持续更新中,欢迎提意见)------------------小妖页面讨....
showtopic.aspx?topicid=476854&forumpage=1&page=1

    已有27评分我要评分查看所有评分

    本主题由 超级版主 n15976906190 于 2015/9/13 23:28:06 执行 删除帖子 操作
    2#

    收到腹股沟风格豆腐干地方

    3#


    4#

    学习学习在学习

    5#


    [url=http://bbs.anji
    6#

    只是来学习学习

    7#

    可口可乐了了

    8#

    看一看学习

    接各种按键脚本制作订
    联系QQ215964368
    9#

    这么样了!这样才来后悔不迭!

    10#

    dfasfdas

    这次我离开你,是风,是雨,是夜晚...
    11#

    111111111111111111

    12#

    支持了 学习下

    13#


    14#

    辅导费feet头条

    15#

    我是来学习的!

    16#


    17#

    啊啊啊啊啊啊啊

    http://1qwzgame.com/forum.php?mod=viewthread&tid=28  梦幻挂机脚本
    18#

    现【自动寻路】 —【拓扑图】—网游城市互传最优路径算法

    19#

    2222222222222222222222

    20#

    夺要

    发新话题 回复该主题