dnf100级版本开放,看到韩械等计算器,心动人家的功能但是需要下载更新,不能随时随地计算,正好辞职在家,想自己动手写一个web版本的计算器,但是详细计算规则,不是很清晰,所以慢慢尝试写个装备粗略的计算器 (网页版)当作学习这里记录下大致的过程,希望大家能提出宝贵意见,指出问题。
当前情况,使用mysql数据库存储装备和套装信息,使用springboot整合了mybatis和druid,log4j2。
其中尝试学习使用自定义注解记录日志,使程序更简洁,具体实现看自己写的 如何简单使用自定义注解?
装备和套装信息的录入采用了将属性截图再对图片进行文字识别,再分析装备属性的词条然后录入到数据库中
识别结果:
具体实现可以看自己写的文字识别的使用方式 如何简单使用文字识别?
录入到数据库中的数据信息:
(字段名…就拼音混用了 嘿嘿嘿)
设计好数据库后创建对应的装备和套装属性模型。
计算思路:当选择了很多装备时候,创建出来单个装备对象,将其他装备属性累加(或乘)计算到创建出来的单个装备对象上,将装备组合出来的2套装,3套装,5套装属性分别当作单个装备合并计算最终的到一个装备对象集合了选择出的装备和套装的所有属性和。例如:
计算出结果为:
相当于将:
都当作单个装备进行计算,最终输出结果。
按图片计算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;
}
进行简单测试计算(因为是计算装备之间的强弱,忽视了许多细节相关,计算具体伤害太难了,就先大概计算一下吧,装备加的技能等级也很难计算所以误差…):
选中这些装备:
计算结果返回有些乱:
后台日志比较清晰:
可以看到7件装备共有:
然后计算出这个3+2并不如5套装的属性强emmmm …
或许不准确…但是大概的属性和,能计算出来也能简单的计算下装备强度。
接下来计划:
当前程序问题:
做个记录,希望大家能指正错误,提出改善的意见。(点赞吧让我知道有人在看增加下动力 )