如何使2名球员的随机骰子卷不同? (C ++)

时间:2017-05-16 10:42:04

标签: c++ random output

我掷骰子的代码是函数:

void Dice(int &dice1, int &dice2)
{
    dice1 = rand() % 6 + 1;
    dice2 = rand() % 6 + 1; 
}

但是当它在主

int main()
{
    srand(time(NULL));
    int dice1;
    int dice2;

    Dice(dice1, dice2);
    cout << "Player 1's Roll: " << dice1 << " and " << dice2 << endl;
    cout << "Player 2's Roll: " << dice1 << " and " << dice2 << endl;
}

当我运行该程序时,输出是玩家2的掷骰总是与玩家1相同。

示例:

Player 1's Roll: 1 and 4
Player 2's Roll: 1 and 4

如何修复此问题(无需另外执行此操作),以便玩家2可能有不同的骰子滚动?

2 个答案:

答案 0 :(得分:3)

你的问题很简单。您只需拨打Dice()一次,而不是两次。如果你想让第二个玩家掷骰子 - 你需要再次打电话给Dice()。如果你不这样做 - 你会得到相同的结果。如果两个cout之间没有进行任何更改,则没有理由不同。

我刚刚添加了Dice()的第二个电话,请查看此内容。

int main()
{
    srand(time(NULL));
    int dice1;
    int dice2;

    Dice(dice1, dice2); //you're rolling first time
    cout << "Player 1's Roll: " << dice1 << " and " << dice2 << endl; //printing result
    Dice(dice1, dice2); //Added by Sylogista: you're rolling second time
    cout << "Player 2's Roll: " << dice1 << " and " << dice2 << endl; //printing result
}

答案 1 :(得分:1)

一种方法是在

的行上写一些东西
struct Player
{
    int roll1;
    int roll2;
    void roll()
    {
        Dice(roll1, roll2);
    }    
};

在通话现场:

int main()
{
    srand(time(NULL));
    Player one, two;
    one.roll();
    two.roll();
    cout << "Player 1's Roll: " << one.roll1 << " and " << one.roll2 << endl;
    cout << "Player 2's Roll: " << two.roll1 << " and " << two.roll2 << endl;
}

然后你可以在闲暇时增强玩家类,例如构建一个合适的构造函数,封装成员变量,添加其他成员,例如播放器的名称&amp; c。