我正在尝试计算一种算法并在 C# 中实现它,该算法将计算角色扮演游戏中对敌人的命中率。
本质上,如果我的角色的灵巧度与对手的灵巧度相等,那么我的命中率是 90%。如果我的灵巧是我对手的500%,我的命中率是100%,如果我的对手是我的500%,那么我的命中率是0%。
我一直在寻找曲线拟合公式一个小时,我的大脑被破坏了。
也许这是一种确定命中机会的方法太复杂了?也许有人也可以提供更好的解决方案?
我没有对此进行测试,但这似乎是您想要的:
double higherd = Math.Max(mydexterity, oppdexterity);
double lowerd = Math.Min(mydexterity, oppdexterity);
//(500%-100%)/100% * 25% = 400%/100% * 25% = 4* 25% = 100%
double d_hitchance = (higherd - lowerd) / (lowerd) * 0.25D;
double higher_hitchance = d_hitchance * 0.1D + 0.9D;
double lower_hitchance = 0.9D - d_hitchance * 0.9D;
double myhitchance = (mydexterity==higherd)? higher_hitchance : lower_hitchance;
double opphitchance = (oppdexterity==higherd)? higher_hitchance : lower_hitchance;
当差异超过 500% 时,您可能必须将机会限制在 0 和 1.0 之间