炉石传说 酒馆战棋 战斗模拟的实现

这几天工作闲余,琢磨着新的AI算法思路,于是想尝试一下和机器对战,遂想到炉石传说的酒馆战棋。想要机器对战,就得先把规则写成一个sandbox,然后再机器学习。那么这个第一步就比较繁琐,不想想太多设计,直接捋起袖子做吧。想代码好看,以后再说。

https://github.com/dna2ai/HSBG/blob/master/deck.js
git clone 后打开 index.html 等待一会就能看到demo结果

这个只是闲余极速之作,已经fix了很多bug了,比如从视频里找一些复杂的实例,然后run个100万遍,尤其是亡语招募各种复杂。原理其实很简单,就是两个循环的队列,1号元素不停进攻另一个队列里的元素,直到没有随从能进攻为止。然后,比如让这2个队列战斗个1000遍,就可以知道大概的胜负概率,和英雄伤害量,从而可以很轻松算出抬走概率。

比如我们来看看这个demo阵容:

结果就是 下方的SlotA win: 9.61%, 上方的SlotB win: 85.42%, 平局Tie: 4.96%

var slotA = [], slotB = [];
function last(slot) { return slot[slot.length-1]; }
slotA.push(api.newMinionById(612, false));
slotA.push(api.newMinionById(411, false));
last(slotA).hp = 7; last(slotA).atk = 2;
slotA.push(new Minion(-12, 2, 4, 0, {}));
slotA.push(new Minion(614, 12, 6, 99, { shield: true, windfury: true }));
slotA.push(api.newMinionById(611, false));
slotA.push(api.newMinionById(312, true));
last(slotA).hp = 7; last(slotA).atk = 7;
slotB.push(api.newMinionById(306, false));
last(slotB).hp = 6; last(slotB).atk = 5;
slotB.push(api.newMinionById(306, false));
last(slotB).hp = 8; last(slotB).atk = 5;
slotB.push(api.newMinionById(302, false));
last(slotB).hp = 2; last(slotB).atk = 3;
slotB.push(api.newMinionById(302, false));
slotB.push(api.newMinionById(406, false));
slotB.push(api.newMinionById(415, false));
last(slotB).hp = 14; last(slotB).atk = 4; last(slotB).flags.taunt = true; last(slotB).flags.shield = true;
slotB.push(new Minion(-15, 8, 20, 3, {}));

这里我们还可以顺便讨论讨论酒馆战棋的实现;其实插件只是按照我们大概的估算得到一个近似的概率。这些在暴雪的服务器上都可能是一个超参。比如说,狂战斧是打在最边上两个随从还是打中间击中3个随从,可能这个概率是个倒钟形从最中间到最旁边,以前的战棋版本,打旁边的概率特别高,之后调整了以后,攻击中间的概率作了稍微调高。包括暴雪可以看你平时用这个英雄的胜率,当你长时间赢以后,生成一套特定卡组,让你适当输一输。当然,酒馆战棋做不到让你输让你不爽然后充钱买卡牌包,在产品策略上,估计是往竞技平台去了。当然,你充钱了,暴雪可以多给你赢几把,这还是很正常的,控制输赢诸如60%:40%还是很容易的。抱歉,容我收回上面的话;暴雪还是要你充钱的,比如你充钱了以后,拿好牌的概率就大,你不充钱,就不给你牌;所以打着开心就好;想充榜,先交点钱。

所以平衡在战棋里很关键,比如一个6 10的鬼妈妈和白板随从交手,要怎样的身材能打平呢?3 55?5 21?10 14?交手胜负概率测一测就知道了。

我们可以再看一个例子:

# 把这个数据复制到 index.html里的输入框里,点 "Go fight!" 就可以看结果了
613/8/5/T
403/7/9
608/7/13
604/12/12
604/12/12
609
502
-
216/8/8/3T
306/7/4
306/5/2
411/7/12/ST
516/12/14/ST
415/13/17/3
406

阵容可谓势均力敌;上面的胜率是 48.3% (平均存活随从造成英雄伤害 10.51), 下面是 44.13% (7.18), 平局 7.57%
当我们将下面的5 2偏折机器人+2 +2,就基本五五开了。上面: 46.31% (10.61), 下面: 46.6% (7.22), 平局 7.09%。当然胜率一样了,但是我们看到,平均英雄伤害量是不一样的,所以如果是最后决赛,还是上面的迎面大。就是权重看 胜率 * 伤害。这里我们将两个偏折机器人改为9 6, 9 4,基本上就让这个权重相当了。

要是说到战棋的插件,网上比较流行的酒馆插件应该就是HDT了,它的实现和我这里的思路又不太一样。比如双方的随从互相战斗,循环10000次,得到的频率和概率还是有偏差的。而HDT可以做到没有偏差,也就是说它在穷举所有可能,然后把胜率用这个可行解的树计算出来,这样做可以没有偏差,但是我们经常看到它有的时候一直在转圈圈loading,就是可能性太多,还没有穷举完,尤其是套娃流,复杂度很高。

其实结合了计算机视觉,不用截取炉石的网络包也可以做到得到当前随从,只是没有网络包截取稳定就是。但是现在门槛也低,弄个resnet yolo什么的稍加训练就可以得到一个图片提取模型了。

战棋这种游戏,虽然有运气带概率,performance计算机肯定最终是要比人类好的。能记录大量信息,能逆向服务器各种超参的概率,基本就赢了这个游戏。当然,游戏嘛,开心就好~

下面就给出一下小测评吧(在召唤概率所有随从相等的情况有):
拿6费的随从 大蛇 鬼妈妈 和 海盗船来说,看看单挑数据
大蛇 和 鬼妈妈 {a: 4511, b: 4258, tie: 1231} a 为第一个赢,b为第二个赢,tie为平手
大蛇 和 海盗船 {a: 4031, b: 4227, tie: 1742}
鬼妈妈 和 海盗船 {a: 3754, b: 4966, tie: 1280}
白板 和 大蛇 在白板到 7 17 的时候基本五五开
白板 和 鬼妈妈 需要 5 22 白板单挑
白板 和 海盗船 需要 6 20

想要咨询讨论指导的朋友,欢迎添加微信好友。添加时注明您的话题。谢谢。

炉石传说 酒馆战棋 战斗模拟的实现相关推荐

  1. Github项目分享——炉石传说酒馆战棋插件

    炉石传说酒馆战棋插件 项目地址 https://hs.chenyueban.com/ 项目介绍 统计每天的战棋战绩,并通过数据分析得到你最拿手的英雄!

  2. 炉石传说酒馆战棋一键拔线(windows)

    小编的业余游戏之一<炉石传说>,这里分享的是现在很火的游戏拔线(跳过约20秒的战斗动画),用夜吹的话说,注意,不是"日你大坝",是"整活",哈哈.小 ...

  3. 炉石传说酒馆战棋(python版)

    详细解释内容请见代码注释XD import numpy as np#随从的定义 #随从的星数,攻击力,防御力,属性,圣盾,亡语,嘲讽,在场buff,因其他随从状态变化而造成的效果 class mini ...

  4. window和python查看和调用exe的对照,结合pyqt5应用查找指定程序,并结束应用程序(酒馆战棋整活必备)

    1. 打开程序 对于应用程序而言,可以通过ui界面打开程序,也可以通过命令打开程序.在windows下打开一个应用程序只要输入程序的完成路径即可.在window下打开程序的方式有两种: 双击exe文件 ...

  5. 炉石整活拔线方法_酒馆战棋:整活如何简单“拔线”?瓦娘在线教学,却3本得死神?...

    大家好!我是炉石闲说,为您分享炉石魔兽趣闻趣事! 在酒馆战棋中,在目前游戏规则允许的条件下,整活作为一个对网络速度.电脑配置尤其是对玩家手速和大局观要求比较高的技术,整活通常在逆境中能帮你逆转局势,顺 ...

  6. 通过编程求解炉石传说酒馆战旗最佳血量和攻击力分配方式

    相信很多程序员们私下除了上班写程序以外,平时下班也会玩玩游戏,而酒馆战旗便是很多人休闲的很好方式,今天我下棋的时候不禁想到了一个问题,那就是血量和攻击力究竟优先加哪个呢,该怎么配比呢?于是就小试牛刀的 ...

  7. 炉石一键拔网线_炉石传说拔网线插件

    iefans下载为用户提供的炉石一键拔网线插件是一款专门针对炉石传说酒馆战棋所推出的辅助工具,用户通过使用炉石传说拔网线插件可以在不影响网络环境的情况下对游戏进行断网操作,这样就能够帮助用户一键跳过战 ...

  8. 炉石传说android手机版本,炉石传说安卓手机版

    炉石传说安卓手机版是一款具有魔幻色彩的卡牌对战的竞技类游戏,游戏为玩家构画了一幅魔兽世界,游戏中总共分为九种职业,玩家可以根据自己喜爱的选择职业,然后根据玩家自己的策略进行合适的分配以及卡组,与其他玩 ...

  9. 整活插件 炉石传说_酒馆战旗整活插件 免安装版

    炉石传说酒馆战旗整活插件是一款专门用来帮助玩家跳过炉石传说战斗动画的工具.炉石传说中的战旗模式会在匹配成功后播放一段战斗动画,等到动画播放完毕才会正式进入选牌阶段开始游戏,而很多经常玩战旗模式的玩家早 ...

最新文章

  1. Trip to Saint Petersburg CodeForces-1250 C
  2. 基于MATLAB FDATOOL的CIC滤波器设计
  3. #if DEBUG与条件(“ DEBUG”)
  4. 剑指Offer——Java答案
  5. QT技术应用_2D绘图(转)
  6. aop拦截mybatis执行sql_Java进阶架构之开源框架面试题系列:Spring+SpringMVC+MyBatis
  7. 全域调度:云边协同在视频场景下的探索实践
  8. 067:【Django数据库】ORM查询条件详解-range
  9. 30人的产研团队如何高效协同?
  10. 也从小站长视角浅谈主机提供商的优劣
  11. udp 协议阻断_应对UDP反射放大攻击的五种常用防护思路
  12. 一步一步写算法(之函数堆栈显示)
  13. 微型计算机主机箱内的所有部件均由,计算机应用基础模拟题
  14. div横向滚动条_14. Selenium 处理滚动条
  15. Axure rp 9安装包下载地址、汉化文件、授权码(包括下载地址)
  16. 【2022最新Java面试宝典】—— TCP,UDP,Socket,Http网络编程面试题(47道含答案)
  17. PCB设计中抑制电磁干扰的几个准则及窍门
  18. 扬帆际海——跨境电商转型升级新时代来临!
  19. 用wireshark抓包疯狂聊天实验
  20. 收藏很久的资源整合网站,一个网站一个世界

热门文章

  1. LabVIEW如何开发大型程序
  2. 改变人生的100句箴言
  3. 使用SimpleEmail邮件发送之QQ邮箱
  4. 百度地图加载过慢问题
  5. 《陰陽師·付喪神卷·瓜仙人》原作:梦枕貘
  6. 图像分割之分水岭分割算法
  7. 02Hadoop3分布式文件系统HDFS-01HDFS Shell文件操作
  8. OLED电视与量子点电视,谁更值得买?
  9. main java.lang,各位大哥办我看看,Exception in thread main java.lang.Error: 无法解析的编译有关问题...
  10. 也来说说电影《少年班》中周知庸问王大法的问题