Appearance
第12回 独自要素の追加
前回: 第11回 参照・ポインタ・寿命 / 次回: 第13回 デバッグ・調整・発表
今回の授業内容
- 追加したい要素を小さな仕様に分解する
- 変更するファイルと責務を事前に決める
- 30分から60分で実装できる範囲へ絞る
- デバッグ表示で追加要素を確認する
- 既存の責務を崩さずに拡張する
今回の開始状態
第11回終了時点では、基本の2Dシューティングゲームが動きます。
今回の終了時点では、自分で決めた小さな要素を1つ追加します。
完成版の仕様にない要素を追加する回ですが、無制限に広げる回ではありません。
既存の構造を使って、管理できる範囲で拡張します。
追加候補
| 種類 | 例 | 主に変更する場所 |
|---|---|---|
| プレイヤー | 移動速度アップ、無敵時間の表示変更 | Player、Game |
| 弾 | 斜め弾、2方向ショット、連射速度変更 | Bullet、Game |
| 敵 | 速い敵、横に揺れる敵、HPのある敵 | Enemy、Game |
| スコア | 連続撃破ボーナス、残り時間ボーナス | Game |
| 演出 | エフェクトの色変更、被弾演出 | Effect、Player |
最初は「敵を増やす」ではなく、「横に揺れる敵を1種類追加する」のように、確認できる単位へ小さくします。
設計メモを書く
実装前に、次の内容を短く書きます。
| 項目 | 書く内容 |
|---|---|
| 追加する機能 | 何を増やすか |
| プレイヤーから見える変化 | 画面上で何が変わるか |
| 変更するファイル | どこを触るか |
| 新しく追加する値 | 変数、定数、列挙値など |
| 成功条件 | 何ができれば完成か |
| 失敗しそうな点 | 衝突、初期化、上限など |
設計メモを書いてからコードを変更します。
途中で仕様を大きく変えたくなった場合は、まずメモを更新します。
実装例: 弾の連射速度を変更する
小さな拡張の例として、ショット間隔を調整できる値にします。
cpp
static constexpr int normalShotInterval = 8;
static constexpr int fastShotInterval = 4;
int shotInterval = normalShotInterval;ショット後の待ち時間に、固定値ではなくshotIntervalを使います。
cpp
player.OnShoot(shotInterval);この程度の変更でも、追加した値、変更した関数、操作感の確認が必要です。
動作確認
- 追加した要素が画面上で確認できることを確認する
- タイトルから開始しても正しく動くことを確認する
- リトライ後も追加要素が初期化されることを確認する
- クリア、ゲームオーバー、再開の流れが壊れていないことを確認する
- デバッグ表示に必要な値を一時的に出して確認する
よくある問題
- 変更箇所が増えすぎた場合は、追加仕様を小さくする
- リトライ後に値が戻らない場合は、
StartGame()や各クラスのReset()を確認する - 既存クラスの責務に合わない処理を入れた場合は、どのクラスが担当すべきか見直す
今回の完成条件
- 独自要素の設計メモを書ける
- 変更するファイルと理由を説明できる
- 小さな拡張を実装できる
- 追加後の動作確認手順を説明できる
まとめ
今回は、完成した基本ゲームに独自要素を追加しました。
次回は、不具合修正、調整、提出、発表の準備を行います。