gpt4 book ai didi

C++ 需要帮助 if != to a random number

转载 作者:太空狗 更新时间:2023-10-29 23:25:35 25 4
gpt4 key购买 nike

我正在做一个项目,但遇到了困难。我有两个生成随机数的变量。我想做一个检查以确保变量不是相同的数字,如果是,则重复该过程直到它们不相同。这是我所拥有的:

num_enemy = 3;

int f = rand() % num_enemy;
int m = rand() % num_enemy;

if ( f != m )
{
enemy_ptr[f] -> fire_Weapon();
enemy_ptr[m] -> update_Status();
}

上面的代码无法正常工作,而且我如何才能使它在错误时再次生成随机数?

我不是在寻找答案,只是在寻找我需要做什么的帮助。谢谢!

最佳答案

问题是当它到达这个部分时...

if ( f != m )
{
enemy_ptr[f] -> fire_Weapon();
enemy_ptr[m] -> update_Status();
}

...变量fm由于模数,可能具有相同的值,因此您的 fire_Weapon()update_Status()永远不会调用函数。您将需要循环直到两个变量具有不同的值。下面的代码应该可以解决您的问题。

const int num_enemy = 3;
int f = rand() % num_enemy;
int m;

// A do-while loop is guaranteed to be called at least once.
do
{
m = rand() % num_enemy;
} while ( f == m ); // Repeat the loop if the values are the same

// At this point, f and m will always have different values.
enemy_ptr[f] -> fire_Weapon();
enemy_ptr[m] -> update_Status();

因为您的变量是模低值,所以循环可能必须在 f != m 之前运行多次.

此外,如果您想要 rand() 返回的伪随机数序列要在每次运行游戏时都不同,请通过调用 srand( time() ) 为伪随机数生成器播种。一次。如果您希望每次运行游戏时序列保持不变,请保持原样。这可以极大地帮助调试,如果您的游戏需要 deterministic,则需要这样做。 .

阅读更多关于 rand() 的信息和 srand()这里:http://www.cplusplus.com/reference/cstdlib/rand/

正如另一个答案中提到的,C++11 改进了随机数生成。在此处了解更多信息:http://www.cplusplus.com/reference/random/

关于C++ 需要帮助 if != to a random number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16557294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com