一旦达到每个值就执行 C++

Execute once every value is reached C++

标题并没有完全解释我想做的事情。

基本上我正在用 SFML 制作游戏,我希望玩家达到一定分数后出现老板,比方说 1000。但是我希望循环只让老板出现一次(目前它正在产卵一旦达到 1000 点标准,boss 就会发疯)我怎么才能让 boss 出现一次?目前这是我的代码。

    //Spawns Boss
    if (Player1.score >= 1000)
    {
        boss1.rect.setPosition(generateRandom(window.getSize().x), -100);
        enemyArray.push_back(boss1);
    }

另外我希望boss每1000分只出现一次。例如,一旦玩家得分达到 1000,就会出现一个 Boss,然后在 2000 时出现另一个 Boss,反之亦然。 我还没有想出一个代码来做到这一点。我认为不需要额外的代码,但如果您确实需要它,请告诉我

*编辑 我使用了@RedFur 建议的一些实现,但是它只有在达到 1000 时才有效,一旦达到 2000,代码就不会再次执行。我假设它在 3000 时也不起作用,但我从未真正尝试过,有什么建议吗?

*编辑2 除了标志之外还使用了 RedFur 的解决方案来查看是否已生成 Boss。工作得天衣无缝。固定代码如下:

boss_appearances = 0;
bool flag = false;
if (flag == false){
    if (Player1.score/1000 > boss_appearances) {
      boss_appearances++;
      do stuff;
      flag = true
    }
}

跟踪 boss 出现的次数是一种方法: 每当玩家达到 1000 时,boss 就会出现一次。然后每隔 1000 的倍数再做一次。

boss_appearances = 0;
if (Player1.score/1000 > boss_appearances) {
  boss_appearances++;
  do stuff;
}

由于1000是一个整数,所以结果是一个截断小数点的整数(假设score也是一个int)。所以玩家第一次达到 1000 到 2000 之间 Player1.score/1000 将等于 1,等等

int numBossSpawns = 1;
if (Player1.score >= numBossSpawns * 1000)
   {
       boss1.rect.setPosition(generateRandom(window.getSize().x), -100);
       enemyArray.push_back(boss1);
       numBossSpawns++;
   }

类似的东西可能会起作用,但我认为类似的解决方案已经发布了。

在查看了对其他解决方案的一些评论后,一个简单的快速修复每帧每秒生成 boss 怪物的方法是添加一个标志,以防止 boss 怪物在第一次生成后再次生成.

这个标志可以在 Boss 最初生成时设置为真,然后在他被杀死时重置为假。或者类似的东西...

// flag initialised to true. The boss isn't alive yet.
bool bossNotAlive = true;

/* check if score is a multiple of 1000, not the most effective method    */
/* if the players score goes from 990 to 1090 without ever hitting 1000,  */
/* it wouldn't trigger a boss spawn.                                      */
if (bossNotAlive && Player1.score % 1000 == 0) 
{
    // since the boss is about to be spawned, 
    bossNotAlive = false;
    boss1.rect.setPosition(generateRandom(window.getSize().x), -100);
    enemyArray.push_back(boss1);
}

// Something in the boss to check death.
if (Boss.health < 0)
{
    bossNotAlive = false;
    // Call Destructor or something
}

您可能想要了解的是某种游戏状态管理器的使用,它专门用于跟踪当前状态、发生的情况和时间。