C++ 有没有办法把它变成一个循环,让它更具包容性?

C++ 有没有办法把它变成一个循环,让它更具包容性?,c++,C++,这是检查玩家和ai(它们是对象)是否处于活动状态,并允许它们滚动(这是一个随机函数)您可以将活动测试和滚动包装到一个函数中,例如: if (player.is_alive() == true) { player_roll = roll(); } if (ai1.is_alive() == true) { ai1_roll = roll(); } if (ai2.is_alive() == true) { ai2_roll = roll();

这是检查玩家和ai(它们是对象)是否处于活动状态,并允许它们滚动(这是一个随机函数)

您可以将活动测试和滚动包装到一个函数中,例如:

   if (player.is_alive() == true) {
    player_roll = roll();
   }
   if (ai1.is_alive() == true) {
    ai1_roll = roll();
   }
   if (ai2.is_alive() == true) {
    ai2_roll = roll();
   }
   if (ai3.is_alive() == true) {
    ai3_roll = roll();
   }
   if (ai4.is_alive() == true) {
    ai4_roll = roll();
   }
   if (ai5.is_alive() == true) {
    ai5_roll = roll();
   }
然后,您可以简单地将其用于所需的任意多个实体:

void IfAliveRoll(Player& player, uint32_t& roll)
{
    if (player.is_alive())
        roll = roll();
}

函数名非常清楚地说明了发生了什么。

每当您开始命名诸如
ai1
ai2
等事物时:数组(或
std::vector
)似乎是一种自然选择。而且,你可以很容易地在它上面循环。
for(auto&a:{player,ai1/*…*/})
如果它们是同一类型的,就应该这样做。如果它们只有一个公共基类,则使用指向对象的指针。这并不能解决问题,但是
If(player.is\u alive()==true)
通常是编写
If(player.is\u alive())
。如果这个特定函数只在这个地方使用,还可以将其声明为本地lambda。
IfAliveRoll(player, player_roll);
IfAliveRoll(ai1, ai1_roll);
IfAliveRoll(ai2, ai2_roll);
IfAliveRoll(ai3, ai3_roll);
IfAliveRoll(ai4, ai4_roll);
IfAliveRoll(ai5, ai5_roll);