自走棋冷知识之源码篇
自走棋冷知识之源码篇
近两个月来,一款 Dota2 中的内置小游戏 —— 自走棋(AutoChess)以风卷残云之势收割了各大直播平台以及游戏选手,并以 “下棋一时爽,一直下棋一直爽” 的名言俘获了无数粉丝的芳心,一度使完美的土豆服务器面临崩溃。鉴于玩家普遍痛恨 “代码哥” 的行为,笔者作为一个 CS相关专业的学生,想从源码的角度解析游戏中的某些看似不科学的巧合。
本文所参考的自走棋源码为Steam平台下 Dota2 文件中的自定义地图(版本为20190303)。
以下问题来自于不少志同道合的棋友,于精神混乱之际提出的疑问
- 问题1:为什么有些棋子看起来很聪明 (比如doom) ,有些棋子却愚蠢的令人发指 (比如经常打假赛的风行/光法/谜团) ?
实际上棋子的"智商"取决于棋子的 AI,在源码中我们可以看到,棋子在满蓝后技能的施法目标有15种(如下图所示)。而其中doom和火女的目标是10,也就是敌方等级最高的敌人(在最新的0314版本中火女目标被改成了1,惨遭削弱),这一设定让他们几乎稳定把技能丢在对方"大哥"身上,达到效益最大化。当然,为了不让doom太过强大,在寻找最高等级敌人的代码中,特别增加了一段,有百分之三十的几率会随机选择敌人,所以两个doom的容错率更大哟~
当然,由于doom大招的沉默给谁十分重要,这里还有一点必须指出,就是当两个棋子的等级相同时,doom的大招会给先上场的那个棋子。因为在寻找最高等级的棋子时会遍历代码中一个名为to_be_destroy的数组,而先从等待区上场的棋子会被先加入数组,一旦找到后后面的棋子等级不比它高就不会进行替换了。因此,可以将最不想被沉默的怪后上场,有最大的几率避开doom大招。
除此之外,据观察,最容易打假赛的几个(光法/风行/谜团)棋子,目标都是3,也就是点目标。点目标的实现是随机找一个场上的敌人,不会去找人多的地方释放,自然容易打假赛了。还有几个比较聪明的是骑士中的全能和死骑,他们的技能会给血量百分比最低的队友(9)。
- 问题2:网上流传的混沌骑士浴火和死灵法师腐化是真的吗?
是真的,下面这段代码是抽卡函数的一部分,在每次抽卡前,如果玩家人口大于等于7,就会在1到10000中roll两次数字,若两次数字都小于等于1,则可以获得一张ssr棋子。而ssr棋子就是死灵法师腐化和混沌骑士浴火了。学过概率论的朋友应该很容易明白,这两次roll的概率即10000*10000也就是一亿,一亿分之一的概率抽到了的话,这边建议直接去买彩票呢亲~
- 问题3:官方说不会连续两次碰到一个人,为什么我有时还会连续碰两次第一??
在源码中分配对手的机制是这样的:每次匹配前,在1到最大玩家数-1之间随机挑一个数n,然后循环n次,每一次都为玩家匹配当前对手的下一个还存活的对手。举个例子,场上还剩下4个玩家,分别为(1,2,3,4),那么循环一次,他们的对手分别为(2,3,4,1),两次则是(3,4,1,2),以此类推。
为了保证玩家不两次碰到一个对手,每次随机的数n都会与上一次随机出的数不同。但当场上有玩家死亡时,这个就不一定成立了。比如还是4个玩家,这一轮n为2,那么他们的对手分别为(3,4,1,2)。但这回合玩家3死了,那么下回合玩家(1,2,4)随机一轮的结果是(2,4,1),这时候玩家2就两轮碰到了同一个对手4。当然,从理论上说,有可能会出现这个情况的只有处于上一轮碰到死亡玩家的人到死亡玩家之间的位置的几个人(这个玩家列表从游戏一开始就固定了)。
对于没学过编程的小可爱来说理解起来有点困难,但简单来说,就是只要没有人死亡,那么这种情况就不会出现啦~
- 问题4:棋子池的大小究竟是多少?为什么我总是抽不到想要的卡(比如炸弹人)?
在早期的代码版本中棋子池大小是可以看见的,后来由于源码被扒,源码中只有基础数量{9,6,5,3,2},之前的倍率是5,也就是从1到5费的棋子分别有{45,30,25,15,10}个。但是现在棋子数量变多,不知道倍率是否有所提升,但一定还是基础数量的倍数。
下面是抽棋子的概率和装备掉落概率。棋子概率界面上有显示就不分析了,装备掉落概率倒是值得一看。[r] = { [x]=n } 指的是在第r回合,有(100-x)%的几率掉落等级为n的装备,当{}里有多个等式时,几率是不叠加的哦。
至于为什么抽不到想要的卡,同样脸黑的笔者仔仔细细看完了每一行跟抽卡有关的代码,只能悲伤的说,真的是看脸的TAT
- 一些额外的小知识,有利于提升你的吃鸡率哟~
1.除了doom、变羊、沉默、石化这些显而易见放不出技能的控制,斧王的嘲讽其实也是禁用技能的,也就是说跳刀斧王跳后排吼人是相当于沉默的。
2.棋子的动作优先级是释放技能>攻击>移动,这在游戏中也有据可依,比如毒龙会先放毒再跳跃等。需要注意的是,有些手长的刺客比如女王毒龙放在第二排如果能攻击到人,是不会跳到后面去切后排的,前置位TA同理。
特别说明:以上分析仅仅是广大玩家的一些好奇心,不用于商业途径,也请看到的玩家不要越界哟~
参考
Steam平台下源码阅读方法: https://www.bilibili.com/video/av43728820/
自走棋冷知识之源码篇相关推荐
- 【源码篇】Flutter Provider的另一面(万字图文+插件)
前言 阅读此文的彦祖,亦菲们,附送一枚Provider模板代码生成插件! 我为啥要写这个插件呢? 此事说来话短,我这不准备写解析Provider源码的文章,肯定要写这框架的使用样例啊,然后再哔哔源码呀 ...
- 手撸Spring系列12:MyBatis(源码篇)
说在前头: 笔者本人为大三在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正. ...
- 手撸Spring系列2:IOC/DI 思想(源码篇-IOC)
说在前头: 笔者本人为大三在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正. ...
- openstack冷迁移/Resize源码分析(二)
接上一篇 openstack冷迁移/Resize源码分析(一) 执行冷迁移/Resize /nova_queens/nova/compute/manager.py @wrap_exception()@ ...
- 涨薪秘籍之源码篇:Spring全家桶源码解读,大师晋级笔记
最近很多人留言说今年找工作太难了,要涨薪几乎更难了 !真的就这么悲观吗?其实不然,我们企业一直都在大量的招人,一直都没停过.只是一点和之前不一样要求变高了,优秀的人一直都缺. 我身边朋友所在的大厂也一 ...
- Android Jetpack架构组件之 Room(使用、源码篇)
2019独角兽企业重金招聘Python工程师标准>>> 1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发 ...
- 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)
上篇文章<深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)> 介绍了properties与environments, ...
- phpcmsV9 完整更新ckeditor编辑器到最新版 - 源码篇
phpcmsV9 默认编辑器是ckeditor,但是版本低,使用效果低. 本文 重点解决问题: 更新ckeditor默认编辑器到最新版. phpcms当前版本 : V9.6.3 . 现在将我更换编辑器 ...
- create-react-app教程-源码篇
原文链接:create-react-app教程-源码篇 之前介绍了create-react-app的基本使用, 为了便于理解一个脚手架脚本是如何运作的,现在来看一下 create-react-app ...
- shiro源码篇 - 疑问解答与系列总结,你值得拥有
前言 开心一刻 小明的朋友骨折了,小明去他家里看他.他老婆很细心的为他换药,敷药,然后出去买菜.小明满脸羡慕地说:你特么真幸福啊,你老婆对你那么好!朋友哭得稀里哗啦的说:兄弟你别说了,我幸福个锤子,就 ...
最新文章
- linux修改vim配色,更改vim配色的具体操作 更改vim配色的图文教程
- C语言、嵌入式中几个非常实用的宏技巧
- qt setData()和data()
- 乐高小颗粒履带机器人_乐高搭建+乐高编程…快带小朋友来漳州这家培训中心,边玩边学...
- delphi switch语句例子_「GCTT 出品」Go 系列教程——10. switch 语句
- 转行数据分析,是选Python还是R?
- 构造函数与析构函数的重载及浅拷贝和深拷贝
- yolov5 解码使用GPU进行加速
- django数据库设置为MySQL
- Java判断一个实体类对象实例的所有成员变量是否为空
- 北京联通光猫WO-36(HG220GS-U)改为桥接模式
- 阿里云域名注册赠送的阿里云企业邮箱使用方法
- 玩玩群辉NAS-常用命令行
- 制作Retropie系统树莓派掌机(三)
- 【颜纠日记】极简生活,盘点那些生活中的消耗品,耐用品,拯救你的断舍离。
- 红利源头指向shopee市场,虾 扑 软件起到哪些重要作用呢?
- CentOS8重启网络服务
- GitHub 上有什么好玩又有挑战的前端项目?
- Spark Standalone -- 独立集群模式、Spark 提交任务的两种模式、spark在yarn上运行的环境搭建、自己写的spark代码如何提交到yarn上并运行...
- Web前端开发与应用
热门文章
- springboot基于java的校园二手书籍交易平台毕业设计源码131558
- Netstat -tln 命令是Linux查看端口使用情况
- win10 - 淡绿色护眼背景(注册表)
- 神经网络中epoch、batch、batch_size、epoch、iteration理解
- 唯品会 京东 淘宝 得物比价1.4.1,selenium登录后再隐藏浏览器
- 汇编语言(Assembly Language)简介
- 解决:java.lang.UnsupportedClassVersionError
- [转] 怎样写好作文批语
- sklearn笔记18决策树gini系数
- 无中介租房搜房工具 V1.0