Springboot尝试写一个DNF装备计算器(后端--1)

dnf100级版本开放,看到韩械等计算器,心动人家的功能但是需要下载更新,不能随时随地计算,正好辞职在家,想自己动手写一个web版本的计算器,但是详细计算规则,不是很清晰,所以慢慢尝试写个装备粗略的计算器 (网页版)当作学习这里记录下大致的过程,希望大家能提出宝贵意见,指出问题。

0.准备工作

当前情况,使用mysql数据库存储装备和套装信息,使用springboot整合了mybatis和druid,log4j2。
其中尝试学习使用自定义注解记录日志,使程序更简洁,具体实现看自己写的 如何简单使用自定义注解?在这里插入图片描述

1.装备录入

装备和套装信息的录入采用了将属性截图再对图片进行文字识别,再分析装备属性的词条然后录入到数据库中
在这里插入图片描述
识别结果:
在这里插入图片描述
具体实现可以看自己写的文字识别的使用方式 如何简单使用文字识别?
录入到数据库中的数据信息:
在这里插入图片描述

在这里插入图片描述
(字段名…就拼音混用了 嘿嘿嘿)
设计好数据库后创建对应的装备和套装属性模型。
在这里插入图片描述

2.计算思路

2.1整合装备属性

计算思路:当选择了很多装备时候,创建出来单个装备对象,将其他装备属性累加(或乘)计算到创建出来的单个装备对象上,将装备组合出来的2套装,3套装,5套装属性分别当作单个装备合并计算最终的到一个装备对象集合了选择出的装备和套装的所有属性和。例如:
在这里插入图片描述
计算出结果为:
在这里插入图片描述
相当于将:

  • 古代祭祀的神圣仪式套装2套装效果
  • 古代祭祀的神圣仪式套装3套装效果
  • 死亡阴影套装2套装效果

都当作单个装备进行计算,最终输出结果。

2.2将装备属性带入计算

百度到的计算图片进行大致计算:
在这里插入图片描述

伤害模型:在这里插入图片描述

按图片计算A类(有些许出入参考了不同的计算方式)

  public void computeA() {
        BigDecimal zuizhong = equip.getZuizhong().divide(B100, 4, RoundingMode.HALF_UP).add(B1);
        BigDecimal percentSangong = equip.getPercentageSangong().divide(B100, 4, RoundingMode.HALF_UP).add(B1);
        BigDecimal huang = equip.getHuang().add(equip.getHuangzhui()).divide(B100, 4, RoundingMode.HALF_UP).add(B1);
        BigDecimal bao = equip.getBao().add(equip.getBaozhui()).divide(B100, 4, RoundingMode.HALF_UP).add(B1);
        //{(站街力智+固定力智提升)*(1+百分比力智提升)}/250 + 1 lz_xishu_1=(站街力智+固定力智提升)  lz_xishu_2=(1+百分比力智提升)
        BigDecimal lz_xishu_1 = AParam_roleFixedPowerAndintelligence;
        BigDecimal lz_xishu_2 = equip.getPercentageLizhi().divide(B100, 4, RoundingMode.HALF_UP).add(B1);
        BigDecimal lz_xishu = lz_xishu_1.multiply(lz_xishu_2).divide(B250, 4).add(B1);
        //站街攻击面板/(站街力智/250+1) 注意:如果有武器精通要除掉精通比例。 gj_xishu_1=(站街力智/250+1)
        BigDecimal gj_xishu_1 = AParam_roleFixedPowerAndintelligence.divide(B250, 4, RoundingMode.HALF_UP).add(B1);
        BigDecimal gj_xishu_2 = B1.subtract(AParam_WeaponMastery.divide(B100, 4, RoundingMode.HALF_UP));
        BigDecimal gj_xishu = EParam_roleHurt.divide(gj_xishu_1, 4, RoundingMode.HALF_UP).multiply(gj_xishu_2);
        this.A = gj_xishu.multiply(bao).multiply(huang).multiply(percentSangong).multiply(zuizhong).multiply(lz_xishu);
        log.info("A 类结果百分比===zuizhong={},percentSangong={},huang={},bao={},lz_xishu_1={},lz_xishu_2={},lz_xishu={},gj_xishu_1={},gj_xishu_2={},gj_xishu={},A={}", zuizhong, percentSangong, huang, bao, lz_xishu_1, lz_xishu_2, lz_xishu, gj_xishu_1, gj_xishu_2, gj_xishu, A);
    }

最终伤害为各类型伤害的乘积:

    public BigDecimal computeFinalHurt() {
        if (this.EParam_fixedOrPercent.equals("percent")) {
            computeA();

        }else{
            computeA_Gu();
        }
        computeB();
        computeC();
        computeD();
        computeE();
        computeF();
        computeG();
        computeX();
        computeY();
        accurate2Need();
        this.finalHurt = A.multiply(B).multiply(C).multiply(D).multiply(E).multiply(F).multiply(G).multiply(X).multiply(Y).multiply(new BigDecimal("1.5"));
        if(FParam_ifBreak.equals("break")){
            this.finalHurt =this.finalHurt.multiply(new BigDecimal("1.25"));
        }
        this.finalHurt=finalHurt.setScale(2,RoundingMode.HALF_UP);
        return this.finalHurt;
    }

3.测试

进行简单测试计算(因为是计算装备之间的强弱,忽视了许多细节相关,计算具体伤害太难了,就先大概计算一下吧,装备加的技能等级也很难计算所以误差…):
选中这些装备:
在这里插入图片描述

计算结果返回有些乱:在这里插入图片描述
后台日志比较清晰:
在这里插入图片描述
可以看到7件装备共有:在这里插入图片描述
然后计算出这个3+2并不如5套装的属性强emmmm
或许不准确…但是大概的属性和,能计算出来也能简单的计算下装备强度。

4.计划

接下来计划:

  • 打算将技能等级的提升加进去.(粗略的模糊的提升 )
  • 用缓存将 相关数据存起来,避免太多的重复计算(不确定是否有这个必要 )
  • 买云服务器尝试运行起来
  • 前端!前端!前端!

5.问题

当前程序问题:

  • 当装备选择太多,组合太多计算会卡死

做个记录,希望大家能指正错误,提出改善的意见。(点赞吧让我知道有人在看增加下动力

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值