Skip to content
第29回 性能定義と個体の分離

1 / 1 性能定義と個体の状態 ​

このステップの目的

同じ行動処理を使い、構造体の値だけで役割の違う種類を作ります。

第29回の到達版で軽装兵、重装兵、攻撃兵を出撃させます。重装兵は遅く、攻撃兵は1回のダメージが大きいことを観察します。3種類ともBattleの同じ関数で動いています。

種類と1体の値を分ける ​

最大HP240は種類の定義です。現在HP170はダメージを受けた1体の状態です。生成するときに最大HPを現在HPへコピーし、戦闘中は現在HPだけを減らします。定義を減らすと、同じ種類の別の個体まで能力が変わってしまいます。

Battle.hで、所属、位置、待ち時間がUnitInstanceにあることを確認します。所属は生成時に渡すので、同じ性能定義を敵にも味方にも使えます。

値から役割を作る ​

Source/TowerDefense/LessonData.cppのdata.unitsへ重装兵と攻撃兵を追加します。構造体の項目順はDefinitions.hで確認してください。

Source/TowerDefense/LessonData.cppcpp
data.units = {
    { "scout", "軽装兵", 70, 8, 70, 28, 0.5, 35, 1.0, "soldier_blue" },
    { "guard", "重装兵", 240, 10, 24, 28, 1.3, 85, 4.0, "soldier_green" },
    { "striker", "攻撃兵", 100, 32, 36, 28, 1.1, 100, 3.0, "soldier_blue" }
};
data.roster = { "scout", "guard", "striker" };

data.rosterは出撃候補です。この一覧から数字キーとUIを作る接続は提供済みなので、個別のボタン処理を追加しません。soldier_blueを軽装兵と攻撃兵で共有しても、性能と名前は別になります。

ビルドし、3種類の動きとHPを比較します。重装兵の速度だけを12へ変えて試し、高耐久で遅いユニットをいつ使いたいか説明してください。確認後は24へ戻します。コストと待ち時間の制限は第31回で実装します。

チェックリスト

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

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