使用变量概率来影响rand()的输出

时间:2014-10-27 18:00:04

标签: c random probability

我很难绕过这个概念。我为模糊的主题道歉。我正处于创建文本基础RPG的迷雾中,并且我被困在战斗序列中。我有一些受影响的变量,但强度方面令人困惑。

这是强度发生的规则:

Strength increases or decreases by 5 depending if win or lose. 

我希望有50/50的输赢机会,但总是至少有5%的机会输掉比赛才能让比赛变得公平。力量也是获胜概率的额外奖励。

我的问题:

How can I use strength to benefit the random number generated to win or lose? 

它将会运行并且将是50/50,但是一旦力量达到25-30左右就会赢得100%的时间使其变得不公平。我需要结果为50/50,并且应用力量奖励

我知道可能超级简单,但我无法弄明白。如果我需要更好地解释,请告诉我。这对于一个学习项目来说是很多,我很感激所有的帮助。

下面的代码是计算的片段。我知道这可能是令人困惑或完全错误的,但即使是朝着正确方向轻微推动也会是巨大的。谢谢大家!

 randomNum = 1 + rand() % (100 - 1 + 1);
    randomNum = player->strength + randomNum;
    if (randomNum >= 51){//changed to be based off rand() + strength
        player->money += 50;
        if (player->strength < 95){//made it to not go above 95
            player->strength += 5;
        }
printf("\n You won $50 and 5 strength points!\n\n ");

else{
        if (randomNum <= 50){//changed if less than 50 you lose
        {
        player->strength -= 5;
        }

printf("\n You lost a life and 5 strength points!\n\n ");

2 个答案:

答案 0 :(得分:0)

在有明确掷骰子的角色扮演游戏中,你通常会有一个'攻击'分数(在你的情况下有力量)与'防御'分数(防守,抵抗,坚韧,无论如何)相对应。

通常会选择这样的值,以便攻击成功,如果攻击+死亡&gt; =防御(留下修改器等),添加的条件是非常低的滚动 - 在d20上为1,在d100上为<= 5 - 总是错过并且非常高的卷 - 在20日的20,&gt;在d100上95 - 总是命中。这大致相当于你的5%微调。

防御和攻击之间的区别是掷骰子的窗口。如果攻击正好比防守低一半,则攻击成功的几率为50%。增加攻击(通过增加力量)可以降低失败的可能性,直到只剩下自动失误,因为它们独立于攻击/防御分数。

在你的情况下,防守得分是50,但是力量可以远高于此,所以玩家永远不会失去,因为你没有自动失误。在平衡方面,平均攻击​​应该比平均防御低50,这意味着如果攻击低于标准或防御高于平均水平,命中率可以低于50%。将基础防御置于100,将基础攻击(力量)置于50,为任何方向留出空间。

答案 1 :(得分:0)

对于简单的事情你可以尝试:

int randomNum = 1 + (rand() % 100); //1-100
int testStrength = strength; // 1-100

if (testStrength > 95)
   testStrength = 95;
else if (testStrength < 5)
   testStrength = 5;

   //chance to lose is 5-95% depending on strength
if (randomNum > testStrength) 
{
  //you lose!
}
else
{
  //you win!
}

请注意,执行rand() % X并不一定能为您提供完全随机的分布,但对于简单的游戏来说可能已经足够好了(请参阅here了解解决方案)。

我首先要在纸上创建游戏系统的所有规则。列出所有统计数据,它们影响的内容,战斗规则等......然后将其转换为代码。您可以查看现有的游戏规则(如D&amp; D或计算机RPG),了解某些规则系统的基本概念。有可能创建一个“好”的规则系统将是困难的部分......将其转换为代码应该很容易。

您可以做的另一件事是测试您的游戏规则代码,通过它运行100次或1000次并累积结果(在这种情况下赢/输)。绘制或制表数据以确保其有意义。