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

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

0.准备工作

当前情况,使用mysql数据库存储装备和套装信息,使用springboot整合了mybatis和druid,log4j2。
其中尝试学习使用自定义注解记录日志,使程序更简洁,具体实现看自己写的 如何简单使用自定义注解?Springboot尝试写一个DNF装备计算器(后端--1)_第1张图片

1.装备录入

装备和套装信息的录入采用了将属性截图再对图片进行文字识别,再分析装备属性的词条然后录入到数据库中
Springboot尝试写一个DNF装备计算器(后端--1)_第2张图片
识别结果:
Springboot尝试写一个DNF装备计算器(后端--1)_第3张图片
具体实现可以看自己写的文字识别的使用方式 如何简单使用文字识别?
录入到数据库中的数据信息:
Springboot尝试写一个DNF装备计算器(后端--1)_第4张图片

Springboot尝试写一个DNF装备计算器(后端--1)_第5张图片
(字段名…就拼音混用了 嘿嘿嘿)
设计好数据库后创建对应的装备和套装属性模型。
Springboot尝试写一个DNF装备计算器(后端--1)_第6张图片

2.计算思路

2.1整合装备属性

计算思路:当选择了很多装备时候,创建出来单个装备对象,将其他装备属性累加(或乘)计算到创建出来的单个装备对象上,将装备组合出来的2套装,3套装,5套装属性分别当作单个装备合并计算最终的到一个装备对象集合了选择出的装备和套装的所有属性和。例如:
Springboot尝试写一个DNF装备计算器(后端--1)_第7张图片
计算出结果为:
Springboot尝试写一个DNF装备计算器(后端--1)_第8张图片
相当于将:

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

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

2.2将装备属性带入计算

百度到的计算图片进行大致计算:
Springboot尝试写一个DNF装备计算器(后端--1)_第9张图片

伤害模型:Springboot尝试写一个DNF装备计算器(后端--1)_第10张图片

按图片计算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.测试

进行简单测试计算(因为是计算装备之间的强弱,忽视了许多细节相关,计算具体伤害太难了,就先大概计算一下吧,装备加的技能等级也很难计算所以误差…):
选中这些装备:
Springboot尝试写一个DNF装备计算器(后端--1)_第11张图片

计算结果返回有些乱:Springboot尝试写一个DNF装备计算器(后端--1)_第12张图片
后台日志比较清晰:
Springboot尝试写一个DNF装备计算器(后端--1)_第13张图片
可以看到7件装备共有:Springboot尝试写一个DNF装备计算器(后端--1)_第14张图片
然后计算出这个3+2并不如5套装的属性强emmmm
或许不准确…但是大概的属性和,能计算出来也能简单的计算下装备强度。

4.计划

接下来计划:

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

5.问题

当前程序问题:

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

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

你可能感兴趣的:(java,dnf,spring,boot)