Skip to content
第27回 攻撃間隔とHP

2 / 2 HPと退場 ​

このステップの目的

HPが0の個体を戦場から取り除き、残った相手へ索敵を続けます。

個体を取り除く ​

Battle.cppのBattle::RemoveDefeatedを実装します。std::remove_ifでhp <= 0の個体を一覧の後ろへ寄せ、eraseで取り除きます。remove_ifだけでは一覧の要素数は減りません。

攻撃対象の位置を使ってダメージを反映し終えてから取り除きます。攻撃ループの途中で一覧を消すと、対象の位置がずれてしまいます。Battle::Updateに用意された呼び出し順を確認してください。

戦闘を確かめる ​

ビルド後、味方を2体出し、敵のHPが0になると消えることを確認します。残った個体が再び進軍し、別の個体の現在HPまで同時に変わらないことを観察してください。

攻撃力だけを8から16へ変えた場合、1回のダメージと攻撃間隔のどちらが変わるか予想して試します。攻撃力を8へ戻し、攻撃間隔は0.5秒のまま次へ進みます。

実装後に比較する参考コード
Source/TowerDefense/Battle.cppcpp
void Battle::RemoveDefeated()
{
    units_.erase(std::remove_if(units_.begin(), units_.end(),
        [](const UnitInstance& unit) { return unit.hp <= 0; }), units_.end());
}
チェックリスト

今回の変更箇所を指し示し、観察した結果とその理由を説明できますか。実験後の値とファイルを確認して次へ進みます。

ゲームプログラミング実践