使用 C++ rand() 获取随机方向 (up/down/left/right) - 总是起床

Using C++ rand() to get random directions (up/down/left/right) - always getting up

我正在制作基于 C++ 文本的 Battleship 游戏。我使用 rand() 函数随机放置计算机的飞船。我在 main() 的开头为数字生成器播种 一次,下面一行:

srand(static_cast<unsigned>(time(0)));

稍后我使用 rand() 函数来选择每艘船将要到达的空间。 (船一端开始的坐标)。然后我在下面的函数中使用 rand() ,它决定了它们延伸的方向(取决于船的长度):

char randDirection()
{
    int randNumber = rand();
    int x = (randNumber % 4) + 1;

    if (x = 1)
        return 'u';
    else if (x = 2)
        return 'd';
    else if (x = 3)
        return 'l';
    else
        return 'r';
}

它随机得到一个1到4之间的数字,returns一个方向(用一个字符表示)取决于这个数字。虽然我成功地随机选择了棋子的位置,此功能始终将棋子垂直设置。他们总是往上走。谁能告诉我为什么?

您的问题似乎在语句 x = 1 中,您应该更改 x == 1,因为赋值始终为真。

希望对您有所帮助!

试试这个,避免输入错误 == ;-) :

char randDirection()
{
    return "udlr"[rand() % 4];
};

您的问题出现在每个 "if" 上,您正在做作业,而不是测试。 此外,在测试中,赋值总是 return 赋值的结果。 例如:

if (x = 0) // will never be here because 0 is false in a test else if (x = 42) // will always end up here else // will never be here