LOL的玩家都知道,当您的召唤师随便点击地图上的某一块区域时,小地图便会自动为您画出一条最短路径。比如1级的时候,您想在男爵河道上开个1级小团,只需在河道上点一下,您的英雄便会按照最短路径朝目标区域前进。但是,您有没有想过,游戏中的AI是如何帮您做到这一点的呢? 这个问题就是本文将要讨论的,但讨论之前必须要声明的是,以下内容纯属臆测,可以娱乐但不要当真!

在英雄联盟中,地图并不大而且还是静态的,所以我当初最先的猜测是生成最短路径的方法也是静态的,即生成路径无需调用任何算法,只需从内存中取出原先计算好的路径结构体即可。大概原理如下:将地图划分为100个区域,每个区域代表一个点。因为生成的路径是两个点之间的路径,所以我们需要开辟的是二维性质的数组,即100*100=10000,然后我们将地图中的每一点到每另一点的最佳路径都设计好并存放在相应的数组元素中【对英雄联盟这样的制作团队而言,设计好大约4950个最优路径应该不是太大的工作量吧】,最后按照玩家的点击,直接取出来就OK了。比如,玩家站在A点,他点击了要去的B点,那么只需把A与B两个点当成二维数组的两个下标,取出的路径自然是Path[A][B]。但这种方法有一个不确定的问题,那就是划分区域的精确度,毕竟把地图分为100块,其粒度是否过粗我很不确定。但如果增加精确度的话,其对应的内存开销将会呈指数级的增长。比如将地图切割成1000块,其对应内存长度就得是1000000!而这将会是一个不容小觑的内存开销。

上面的路径寻找是静态方法,接下来谈谈动态方法。在谈动态生成路径之前,有必要先为大家定义一个认知:那就是先把英雄联盟地图中的的每面墙壁至少附加上两个属性——这面墙壁的顶点和尾部,如下图所示:![那个直角墙壁的顶点是大写A,尾部是小写a。那个直线墙壁的顶点是大写C,尾部是小写c] 还是参照上面那个图,里面的“起”字代表我们英雄现在的位置,“目”字代表我们将要去的目标位置。让我们来看一下,当我们的英雄点击了那个“目”自区域块时,程序内部做了哪些事情。。。

1):首先程序会尝试从“目”开始画一条直线到“起”字区域,在直线画到1/4时,遇到了拦路虎【就是那个Aa直角墙】,然后程序先找到拦路虎的“顶点”属性,连接“目”到A点;接着程序再尝试从A点画直线到“起”字区,又遇到拦路虎Bb,连接AB;再从B到“起”,遇到Cc,连接BC,最后从C到“起”,畅通无阻,那么这个路径也就确定下来:目->A->B->C->起,所以目前暂时的最佳路径【目->A->B->C->起】。

2):程序回溯一步,从Cc的尾部c开始,画直线到“起”,畅通无阻,第二条路径确定下来:目->A->B->c->起,然后再把它与第一条路径【目->A->B->C->起】比较,发现它比较长,所以目前的最优路径还是【目->A->B->C->起】。

3):程序再回溯一步,因为Cc测试连个属性都测试完毕,所以从Bb的尾部开始,从“b”画直线到“起”,遇到拦路虎Cc,连接bC,再从blablabla,最后确定下来路径:目->A->b->C->起,将它与保存下来的最优路径【目->A->B->C->起】比较,发现它还是比【目->A->B->C->起】长,所以目前的最优路径还是【目->A->B->C->起】。

4):程序回溯一步,又从Cc的尾部c开始,生成路径:目->A->b->c->起,与保存路径比较,新的路径长,无法取代,目前最优依然是【目->A->B->C->起】。

就这样,程序一直连接、计算、回溯、连接。。。直至回溯计算出这样一条路径:目->a->b->C->起,然后计算发现,咦!它比保存下来的【目->A->B->C->起】还要短一些,好吧,那就让它取代原先的最优路径,成为新的最优路径好了。

然后的然后,程序还是一直连接、计算、回溯、连接。。。直至计算比较完最后的路径:目->a->b->c->起,因为已经没有什么可以再回溯的了,所以计算完毕,保存下来的最优路径也就成为最后确定下来的最优路径,也就是【目->a->b->C->起】。。。

到了这里,静态和动态都说完了,本博貌似也该结束了,但这里还是要重审一下的:以上所有的想法只是本人的胡编,极其的不靠谱!!事实上,想要否定它们的话,可以通过一个简单的小实验来否定,实验很简单,创建自定义模式,你用剑圣,搭档用巨魔,让巨魔来到你的的家园左翼墙壁附近,在那个墙壁中间的单向通道口放一块冰锥,紧接其后你用剑圣点击野区的蓝爸爸,看看系统给你生成的最佳路径是不是平常状态下生成的最佳路径【这种实验,至少可以否定第一种吧】。。

关于英雄联盟中的英雄是如何寻找最佳路径的相关推荐

  1. 使用Unity和A*插件实现LoL英雄联盟中的移动方式

    LoL中的移动方式是怎么样的呢?我分析一下应该是这样的: 右键单击选择目标点,角色会向着目标点走去,而去目标点的路上如果点击了其它目标点就更新目标点,如果中间有障碍会自动选择最近的路径,如果目标点不可 ...

  2. 【经典算法】:英雄联盟中打字屏蔽系统的实现

    前言 在玩英雄联盟中玩家经常会出现这种问题,喜欢打字喷人,比如说喜欢喷人说:操你妈,狗日的,操了.你妈逼的,傻逼等.... 这里会出现一个词语叫做高频词汇,比如说上述那些词语就是如此,上述词语会被系统 ...

  3. cpu低端计算机配置清单,i3 4160/GTX750Ti剑灵/英雄联盟中低端组装机配置清单

    现在的游戏对于电脑配置有着较高的要求,不然配置都带不动游戏,今天给大家推荐的是华硕B85 PRO GAMER主板.Intel酷睿i3-4160处理器以及影驰GTX750Ti大将版独立显卡搭配的组装电脑 ...

  4. 关于英雄联盟中护甲值对伤害减免的影响

    关于英雄联盟中护甲值对伤害减免的影响 16340238 本人学院 大师头像镇一楼 大师名言镇二楼 ~这是一个链接请点击~同学你是中山大学软件工程专业的学生吧,我是你们软导老师余阳,你好好看下 Lect ...

  5. 英雄联盟中如何实现快速发送上次消息

    英雄联盟中如何实现快速发送上次消息 #正文 大家好,欢迎大家阅读,这次为大家带来的是如何在英雄联盟中快速发送上次的消息,我在网上搜索了很多的教程,但是都没有一个好的效果,这里我给大家带来我的方法. 1 ...

  6. 用pandas库提取IBTrACS中特定条件的热带气旋最佳路径数据

    JTWC的官网还是上不了,但是IBTrACS的数据下载还是没有问题的,本文就跟大家交流一下如何从IBTrACS中提取特定机构和特定条件的热带气旋最佳路径数据. IBTrACS下载地址https://w ...

  7. 【已解】英雄联盟lol撸啊撸“寻找对局”按钮无法点击,开不了赛解决方法

    问题描述 lol现在已经有些年头了,随着时间的推移,客户端是越来越漂亮,越来越简洁,但实际上也越来越占CPU和内存,有这么一种情况,在进入队列界面后,选择好自己要打的位置,没法点击寻找对局,导致lol ...

  8. 如何看自己在英雄联盟中的定位?也就是自己的本命英雄?

    对于这个问题,大多数的玩家都会去官网查看,因为那里已经给大多数玩家生成好了.但是你们发现没有,一般自己心目中所想或者比较喜欢的都不是自己的本命英雄,难道系统出错了吗?错,系统并没有出错,只不过是统计的 ...

  9. java dijkstra算法代码_[转载]Java实现dijkstra算法: 地图中任意起点寻找最佳路径...

    最近在复习java,下学期要用,写这个练手.  技术较粗糙,见谅. 代码里用的是这幅地图,根据实际情况更改,在addNode方法中 这个是运行结果,起点和终点在 运行wrap(String qidia ...

最新文章

  1. matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
  2. 该项目不在桌面中删除不了_win7系统桌面上的文件删不掉怎么办
  3. cacti系统性能监控(CENTOS/UBUNTU)
  4. 手写spring编程事务
  5. javascript-bom-浏览器对象模型
  6. div隐藏select显示的解决办法(就死select挡住了div) 不是网上找到的那五种
  7. .NET 中使用 SQlite 数据库_1.新数据库的创建
  8. 15.try...except...finally
  9. 中国内脏痛行业市场供需与战略研究报告
  10. Mppt光伏最大功率点跟踪控制matlab仿真
  11. 很不错的在线Office控件:IWebOffice与SOAOffice
  12. 部署ASDM图形化工具
  13. 练习2-1 Programming in C is fun
  14. hp服务器不显示错误代码,惠普服务器开启不了
  15. oracle 审计文件目录,审计ORACLE程序文件是否被修改
  16. Caused by: com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.AbstractChannel$AnnotatedC
  17. CostMonitorUtils耗时监控工具类(线程安全)
  18. dockers-系统学习
  19. [2018 NUIST 程序设计竞赛] A. 竹鼠的命运
  20. cad 二次开发 插入图片_CAD 二次开发 引用外部DWG并放到对应图层上

热门文章

  1. C/C++数据结构——哈利波特的考试(dijkstra与前向星)
  2. js代码大全(各种方法、属性)《转载》
  3. 【AMD GPU】使用A卡进行ai模型训练
  4. java btw,Java new一个对象的过程
  5. 数值优化学习笔记(一)凸集、凸函数信息
  6. matlab如何旋转图例
  7. !codeforces 558C Amr and Chemistry-yy题-(位运算相关)
  8. 读《平凡的世界》后感 (二)
  9. 这是个超级好用的免费无损放大软件 Topaz Gigapixel AI
  10. 科普名人记(莱昂傅科)