【问题标题】:SFML how to make various shapes move in random directions?SFML 如何让各种形状在随机方向上移动?
【发布时间】:2020-12-30 20:08:50
【问题描述】:

我在使形状沿随机方向移动时遇到了麻烦,我目前的代码使它们都沿同一方向移动,然后随机更改为另一个方向。

这里是代码

for(int i = 0; i < 50; i++)
    {
        int randomMoveX = rand() % 2 + (-1);
        int randomMoveY = rand() % 2 + (-1);
        circleObjectArray[i].move(randomMoveX,randomMoveY);
        while(randomMoveX == 0)
        {
            randomMoveX = rand() % 2 + (-1);
        }
        while(randomMoveY == 0)
        {
            randomMoveY = rand() % 2 + (-1);
        }

        cout << "randomMoveX: " << randomMoveX << endl;
        cout << "randomMoveY: " << randomMoveY << endl;
    }

如何更改我的代码,以便能够单独在随机方向上移动它们?

感谢您的宝贵时间:D

【问题讨论】:

  • while(randomMoveX == 0) { randomMoveX = rand() % 2 + (-1); 有点傻,因为赋值只能产生 2 个值(其中一个为 0)。那么为什么要有循环呢?如果该值当前为 0,那么您显然想要另一个,因此在循环之后该值将始终为非 0 值,那么为什么不直接分配它并摆脱循环。
  • 哦,我想用 randomMoveX = rand() % 2 + (-1);我可以得到一个介于 1 和 -1 之间的随机值
  • 你为什么会这样想? rand() % 2 只给出 0 或 1 并且添加一个常量并不会改变最终结果只能是两个不同值之一的事实。比如,如果你加上 42,它只会是 4243
  • 所以如果我想在 -1 和 1 之间有一个 rand() 我需要做 rand % 3 + (-1)?
  • 就我个人而言,我永远不会在现代 C++ 中使用 rand。我会使用<random> 中提供的现代设施,并获得特定范围内的数字,我会使用std::uniform_int_distribution。尝试使用 % 生成分布是一个非常糟糕的主意,因为它会在您的数字中引入偏差,除非您的除数完全划分生成器的可用范围。

标签: c++ codeblocks sfml shapes


【解决方案1】:

当您运行您的应用程序时,随机种子设置为srand(1)

要在 rand 中使用不同的值,您需要更改随机的种子。 然后使用函数srand并将其保存在unsigned int中,以便为不同的形状使用不同的rand。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多