2017-04-13 3 views
0

タイトルは、私が何をしようとしているかを完全には説明していません。すべての値に達する度に実行するC++

基本的に私はSFMLでゲームを作っています。プレイヤーが一定の得点に達すると、ボスを表示したいと思いますが、1000としましょう。一度1000ポイントの基準を満たしているとボスのようなクレイジー)私は上司が一度表示されるようにするにはどうすればいいですか?現在、これは私が持っているコードです。

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

はまた、私はのみ表示されます一度1000年のスコアにボスをしたいです。たとえば、プレーヤーが1000点に達すると、ボスは2000年に登場し、その逆も同様です。 私はまだこれを行うコードは考えていません。私は、余分なコードが必要とされているとは思わないが、あなたが必要としますならば、それは私が知っているよう

*編集 私は2000になると@RedFurによって提案された実装のビットは、しかし、それだけで、1000年に到達する度に機能を使用もう一度実行されないコードに達しました。私はそれが3000で動作しないだろうと仮定していますが、私は本当に試したことはありません、任意の提案?

* Edit2 RedFurのソリューションを使用して、ボスがスポーンされているかどうかを確認するフラグを追加しました。完璧に働いた。下記の固定コード:

ボスが登場した回数を追跡
boss_appearances = 0; 
bool flag = false; 
if (flag == false){ 
    if (Player1.score/1000 > boss_appearances) { 
     boss_appearances++; 
     do stuff; 
     flag = true 
    } 
} 
+0

@VGこれはちょうど1000ではないスコアにもかかわらず、上司が常に生き残るようにします。私のスコア変数がintであるとは関係ありますか? – Lucky38i

答えて

4

行くための一つの方法である:プレーヤーが1000に達するたびに 、上司が一度表示されます。次いで整数1000以来1000

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

のすべての複数のために再度行う、結果が切り捨て小数(スコアもINTであると仮定して)を有する整数です。だから、1000年から2000年の間にPlayer1.score/1000プレイヤーが到達した最初の時間は、1に等しくなる、など

+0

これはかなり良い解決策ですが、基本的に 'if(floor(PLayer1.score/1000.0)> boss_apperances)'条件が満たされるとボスは何百回もスポーンすることができます。私はそれが一度だけ発生し、1000の別の倍数が発生するまで停止します。 – Lucky38i

+2

これがなぜ投票されたのか分かりません。 @ Lucky38iは、条件が満たされたときにboss_appearancesが1つ増分されるため、コードが次の1000まで再度トリガーされないようにします。 – redFur

+0

これは良いスタートです - ボスがvsのスコアを表示した回数を相関させる必要があります。条件が満たされれば – Tim

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

そのようなことがうまくいくかもしれない、私は同様のソリューションがすでにかかわら掲載されていると思います。

+0

これは同様に機能する他のソリューションと同じで、1000の別の倍数では機能しません。たとえば、スコアが2000の場合、スコアは実行されません – Lucky38i

0

他の解決策のコメントを見てから、1秒ごとにフレームが生成されるボスモンスターを簡単に修正すると、初めてボスモンスターが再びスポーンされるのを防ぐフラグが追加されます。

このフラグは、ボスが最初に生成されたときにtrueに設定され、その後、彼が強制終了されるとfalseにリセットされます。あなたが見たいかもしれませんこれらの線に沿って、または何か...

// 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 
} 

何かがゲーム状態マネージャー、現在の状態を追跡するに捧げ何か、何が起こるとするときのいくつかの種類を使用することです。

関連する問題