重返未来:1999战斗计算分析(一)
近期,因为对1999自动化战斗比较感兴趣,同时也希望可以精进一下我拙劣的编程技术,稍微总结了一些战斗的规律,并尽量以一个统一的标准来衡量卡牌价值以便决策,以期可以实现可靠的自动战斗,下面是我的第一版初稿,希望各位大佬可以批评指正
一、手牌规律
根据我当前的总结,手牌仅有首回合规律分布,后续为随机获得,当前阶段算法我将更着重于当前手牌使用的“短期期望”,等后续技术力再增进一些再结合概率考虑尝试做一些基于期望的长期规划
首回合手牌,一定为三个角色各两张小卡,再加上第一张卡牌的复制,一共七张卡。后续从六张卡牌中随机抽取补充手牌
二、一些先决结论
1、buff卡
以十四行诗为例,首先假设所有角色面板相同,其次假定所有卡牌倍率相同(对单200%,对群150%),再其次,忽略防御和暴击率造成的结论干扰。
可以得到以下简易结论:
假定使用buff卡后持续时间内剩余的五张卡均为输出卡
使用buff卡:1.15*200%*5=11.5
不使用buff卡:1*200%*6=12
使用buff卡:1.15*150%*2*5=17.25
不使用buff卡:1*150%*2*6=18
可以看到,以纯期望伤害计算,buff卡的使用并不会带来太多的直接伤害损失。而同时,使用buff卡带来的自身穿透、全队减伤、自身属性增益词条的获取,全部收益合计得出,使用buff卡应该是一件比较划算的行为
其后,假定使用buff卡后持续时间内还使用了一张治疗卡(如苏芙比)
使用buff卡:1.15*200%*4=9.2
不使用buff卡:1*200%*5=10
使用buff卡:1.15*150%*2*4=13.8
不使用buff卡:1*150%*2*5=15
可以看到,以伤害计算计,使用buff卡后还使用一张纯治疗卡,带来的伤害损失已经比较大了,大约是对单80%,对群120%,均为接近半张卡的输出,考虑到十四行诗本身的穿透和伤害减免、增益词条等,这种行为或许可以是一个不亏的行为。当然原则上应当是避免这种情况的存在的,但考虑到决策条件的泛用性和简易性,因此决策中可能仍会使用“buff周期”,尽量保证全程吃满buff
2、大招和激情点数
1999中大招的释放会存在激情限制,使用卡牌、移卡、合卡均可以获得一激情点数,为了量化移卡、合卡带来的收益,同时为了兼顾百夫长、未锈铠等角色卡牌中自带的激情值,我考虑将大招伤害拆分处理:
大招对单:拆分为200%对单卡+(大招倍率-200)%的额外伤害
大招对群:拆分为150%对群卡+(大招倍率-150)%的额外伤害
(以大招对2个敌方计)
大招前半部分作为普通单卡计算,额外伤害部分以激情点为权重分配给移卡、合卡操作,从而量化移卡合卡操作,使得使用后可以顺带合卡的卡牌的使用,可以获得更高的优先级。对于自身描述中包含了激情点数的,也可以更客观的衡量其卡牌价值,以便后续逻辑选择的处理。
对于普通卡自身使用带来的激情点,我决定暂不考虑。后续无论是使用以激情点体系考虑大招伤害的平均期望伤害来计算,还是就像现在这样不管了,又或者是有更优秀的决策体系出现了,那是以后的事情,关我啥事
三、核心逻辑
以行动点为筹码,期望伤害为货币的计算体系
1、读取手牌
2、开始计算buff、治疗周期
3、以角色本身面板*卡牌倍率为每张卡牌标定初始价值(伤害)
4、计算卡牌使用后是否会带来合卡,如果有,为卡牌加上合卡收益(卡牌所属角色面板*倍率)
5、对二夹二、二夹三的情况,酌情适当考虑大招伤害的激情点伤害分配,如在二夹一的基础上乘以一个衰减系数(0.4、0.2),以鼓励决策程序使用被夹卡牌
四、目标
基本目标:
1、构建基本素材库,录入各角色名称、各等级面板、技能倍率、技能图片
2、建立基本类、如角色、卡牌,录入素材库信息
3、借助图像识别,实现对手牌、卡牌等级、战斗开始前使用角色及其等级、行动点数量等关键信息的读取
4、构建激情点模拟计算体系,为大招伤害计算提供基础工具
5、实现对移卡合卡等操作的排列组合
6、实现以期望伤害为权值的手牌使用决策体系
进阶目标:
1、实现对我方血量的读取,以优化治疗卡的选择和使用
2、实现对敌方属性的读取,并实现对克制属性伤害增幅的计算
3、实现对敌方血量的读取,以便实现手牌的使用目标选择优化
4、尝试统计已造成伤害,以便更精确的实现目标选择
5、录入敌方数据库,以便更精确的完成伤害计算
6、尝试完成对暴击伤害的识别(感觉不太能实现,标识太小了)