问题是当它到达这个部分时......
if ( f != m )
{
enemy_ptr[f] -> fire_Weapon();
enemy_ptr[m] -> update_Status();
}
...由于模数,变量f
和m
可能具有相同的值,因此永远不会调用您的fire_Weapon()
andupdate_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() )
一次。如果您希望每次运行游戏时序列保持不变,请保持原样。这可以极大地帮助调试,如果您的游戏需要确定性,这是必需的。
在此处阅读更多信息:httprand()
: //www.cplusplus.com/reference/cstdlib/rand/srand()
正如另一个答案中提到的,C++11 改进了随机数生成。在此处了解更多信息:http ://www.cplusplus.com/reference/random/