Appearance
第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());
}チェックリスト
今回の変更箇所を指し示し、観察した結果とその理由を説明できますか。実験後の値とファイルを確認して次へ進みます。