3

我有以下战斗代码,但用户将赢得大约 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% 的时间,我可以得到一些建议吗?我的算法很糟糕非常有趣的战斗。

4

3 回答 3

2
if (rand.next(10) > 7) {
    //user wins
} else {
    //user loses
}
于 2012-11-25T13:10:32.310 回答
1

严肃地说,根据您使用代码处理它的方式,您为什么会遇到麻烦是可以理解的。您应该将其视为数学函数。

从一组输入到输出创建一个纯函数。 在这个函数中不应该有任何用法。如果您需要随机输入,请将 then 传递给函数。在不覆盖现有变量的情况下先尝试这样做(不要使用/ )。对于每个,应该总是产生相同的输出。如果你这样做,使用数学来解决缺失值应该很容易。f(x, y, ..., z)booleanrand+=-=(x, y, z)f(x, y, z)

于 2012-11-25T13:42:40.377 回答
1

正如 drstevens 所说,您的实现最好拆分成更小的纯函数。

特别是,损失的生命值数量似乎与 的值成正比critical。您提供的代码没有显示critical循环开始时的值,但在第一次迭代后,减少“敌人”生命值时的值将比在前一次迭代中减少“用户”生命值时高约 5,因为在向其添加十个随机数之前,您不会将其设置为 1。至于critical用户一般在11左右,敌人在6左右,则需要强敌才能获胜(例如,defence大于用户力量和物品伤害的敌人,因此击中他们会获得生命值!)。

如果您编写了一个纯函数来计算其中一个critical或要减去的命中点数,则不会发生此错误。

于 2012-11-25T16:42:37.850 回答