我有下面的代码,但用户将赢得大约99.9%的时间(测试5000个随机循环)
我有以下影响战斗的变数
力量防御灵巧伤害门户难度(始终+1停止*0)关键
这就是我目前所拥有的
//player variable
//(int) player.itemDamage = 20
//(int) player.itemStr = 2
//(int) player.itemDex = 4
int defense = (int)Math.Round((((portal + 1) * ((rand.NextDouble() + 0.5))) + 5) / 2, 0);
int damage = (int)Math.Round((((portal + 1) * ((rand.NextDouble() + 0.5))) + player.itemDamage), 0);
int str = (int)Math.Round((((portal + 1) * ((rand.NextDouble() + 0.5))) + player.itemStr), 0);
int dex = (int)Math.Round((((portal + 1) * ((rand.NextDouble() + 0.5))) + player.itemDex), 0);
while(true)
{
for (int i = 0; i < 10; i++)
{
critical += rand.NextDouble();
}
eHP -= (int)Math.Round((((player.itemDamage + player.itemStr) - defense) * critical) / 2, 0);
critical = 1;
for (int i = 0; i < 10; i++)
{
critical += rand.NextDouble();
}
HP -= (int)Math.Round((((damage + str) - 5) * critical) / 2, 0);
if (eHP <= 0)
{
return;
}
else if (HP <= 0)
{
return;
}
}
我可以在下面的代码中更改什么,让用户(HP)赢得70%的时间我可以得到一些建议吗?我不擅长算法
编辑:虽然我希望用户赢得70%的时间,但我仍然希望它是基于损害的圆形,而不是使用简单的if(0>70)win else loose语句,因为这不是一场非常有趣的战斗。
最佳答案
严肃地说,基于你如何用代码来处理这个问题,你为什么会遇到麻烦是可以理解的。你应该把它当作一个数学函数来处理。
从一组输入f
创建一个pure function(x, y, ..., z)
到一个boolean
输出。此函数中不应使用rand
。如果需要随机输入,则将其传递到函数中。尝试先做而不重写现有变量(不要使用+=
/-=
)。对于每个(x, y, z)
,f(x, y, z)
应该总是产生相同的输出。如果您这样做,应该很容易使用数学来解决丢失的值。