自走棋冷知识之源码篇

自走棋冷知识之源码篇

近两个月来,一款 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/

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
围棋学习app的源码是一个用于教授和学习围棋的应用程序的程序代码。这种app可以提供各种功能和特性,以帮助初学者或有经验的围棋爱好者增强他们的围棋技巧。以下是一些可能包含在这种围棋学习app源码中的功能: 1. 视频教学:通过上传或链接到专业的围棋教学视频,用户可以观看高水平围棋棋手的讲解和示范对局,从中学习围棋技巧和战略。 2. 问题和解答:提供一系列问题和解答来测试用户的围棋知识。这些问题可以涵盖各个水平和主题,从基础规则到复杂的布局和战术。 3. 对局和分析:允许用户与其他用户或计算机进行对弈,并提供棋局分析功能。这样用户可以收集自己的对局数据,并通过电脑分析了解他们的下棋失误和改进的机会。 4. 游戏功能:提供一个可以调整棋力和棋盘大小的人机对局功能。这样用户可以与计算机对弈,并根据自己的能力难度来挑战自己。 5. 专业棋谱:提供一些经典围棋对局的棋谱,允许用户在app中复盘这些对局并学习高水平选手的下棋思路和策略。 6. 社交互动:允许用户与其他围棋爱好者交流和分享自己的对局数据、收藏的棋谱等内容。这样用户可以通过互动和讨论与其他围棋爱好者共同学习和进步。 这只是一些可能存在于围棋学习app源码中的功能,具体的实现方式和细节取决于开发者的设计和目标。通过使用这样的app,用户可以更好地学习和享受围棋,并在围棋水平上不断提高。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值