为什么我的 srand 返回所有结果

Why does my srand return all outcomes?

本文关键字:结果 返回 我的 srand 为什么      更新时间:2023-10-16

这是一个简单文本游戏的开始。在游戏中,你应该四处寻找地牢并收集文物。我用srand(time(0))来做一些事情,比如找到要去哪个阶段,攻击,找到什么物品,我在编程上还没有走多远,但我已经遇到了一个问题。我的 rand(( 返回所有结果。当我运行游戏时(这不是完整的代码,顺便说一句(,它返回"你进入了一个地牢!","哦,不,敌人来了!"和"你找到了一件神器!

void mainScreen()
{
    srand(time(0));
    cout << "Health: n";
    cout << health;
    cout << endl;
    _sleep(500);
    cout << "Inventory: n";
    cout << inventory;
    cout << endl;
    _sleep(500);
    cout << "Gold: n";
    cout << gold;
    cout << endl;
    _sleep(500);
    cout << "Artifacts: n";
    cout << artifacts;
    cout << endl;
    _sleep(500);
    cout << "Rolling the dice of fate... n";
    int diceRoll = 1 + (rand() % 10);
    if (diceRoll = 1, 2, 3, 4, 5, 6) {
        cout << "You entered a dungeon! n";
    }
    if (diceRoll = 7, 8) {
        cout << "Oh No! An enemy has arrived! n";
    }
    if (diceRoll = 9, 10) {
        cout << "You found an artifact! n";
    }
}

你的if语句并没有做你认为它们做的事情。

首先,当您应该改用==比较运算符时,您使用的是=赋值运算符。

其次,您使用的是 , 运算符,该运算符计算左表达式和右表达式,然后返回右表达式的结果。

所以,这段代码:

if (diceRoll = 1, 2, 3, 4, 5, 6)
{
    ...
}
if (diceRoll = 7, 8)
{
    ...
}
if (diceRoll = 9, 10)
{
    ...
}

有效地做与此相同的操作,这不是您想要的:

diceRoll = 1;
if (6)
{
    ...
}
diceRoll = 7;
if (8)
{
    ...
}
diceRoll = 9;
if (10)
{
    ...
}

您需要改为执行以下操作:

if ((diceRoll == 1) ||
    (diceRoll == 2) ||
    (diceRoll == 3) ||
    (diceRoll == 4) ||
    (diceRoll == 5) ||
    (diceRoll == 6))
{
    cout << "You entered a dungeon! n";
}
else if ((diceRoll == 7) ||
        (diceRoll == 8))
{
    cout << "Oh No! An enemy has arrived! n";
}
else
{
    cout << "You found an artifact! n";
}

这可以使用范围比较来简化:

if ((diceRoll >= 1) && (diceRoll <= 6))
{
    cout << "You entered a dungeon! n";
}
else if ((diceRoll >= 7) && (diceRoll <= 8))
{
    cout << "Oh No! An enemy has arrived! n";
}
else
{
    cout << "You found an artifact! n";
}

或者替换为单个switch语句:

switch (diceRoll)
{
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    {
        cout << "You entered a dungeon! n";
        break;
    }
    case 7:
    case 8:
    {
        cout << "Oh No! An enemy has arrived! n";
        break;
    }
    case 9:
    case 10:
    {
        cout << "You found an artifact! n";
        break;
    }
}

另外,附带说明一下,您不应该每次调用mainScreen()时都调用srand()(我认为在程序的生命周期中可以多次调用(。 srand()只应调用一次,因此在调用mainScreen()之前,您应该在main()中调用它。

这个:

if (diceRoll = 1, 2, 3, 4, 5, 6) {
    cout << "You entered a dungeon! n";
}
if (diceRoll = 7, 8) {
    cout << "Oh No! An enemy has arrived! n";
}
if (diceRoll = 9, 10) {
    cout << "You found an artifact! n";
}

是完全错误的,你需要单独检查每个元素,像这样:

if (diceRoll == 1 || diceRoll ==2 || diceRoll == 3 || diceRoll == 4 diceRoll == 5 || diceRoll == 6) {
    cout << "You entered a dungeon! n";
}
if (diceRoll == 7|| diceRoll == 8) {
    cout << "Oh No! An enemy has arrived! n";
}
if (diceRoll == 9 ||diceRoll == 10) {
    cout << "You found an artifact! n";
}

为了进一步简化第一个分支,您可以这样做:

if (diceRoll >= 1 || diceRoll <= 6) {
    cout << "You entered a dungeon! n";
}
相关文章: