Skip to content

第12回 独自要素の追加

前回: 第11回 参照・ポインタ・寿命 / 次回: 第13回 デバッグ・調整・発表

今回の授業内容

  • 追加したい要素を小さな仕様に分解する
  • 変更するファイルと責務を事前に決める
  • 30分から60分で実装できる範囲へ絞る
  • デバッグ表示で追加要素を確認する
  • 既存の責務を崩さずに拡張する

今回の開始状態

第11回終了時点では、基本の2Dシューティングゲームが動きます。
今回の終了時点では、自分で決めた小さな要素を1つ追加します。

完成版の仕様にない要素を追加する回ですが、無制限に広げる回ではありません。
既存の構造を使って、管理できる範囲で拡張します。

追加候補

種類主に変更する場所
プレイヤー移動速度アップ、無敵時間の表示変更PlayerGame
斜め弾、2方向ショット、連射速度変更BulletGame
速い敵、横に揺れる敵、HPのある敵EnemyGame
スコア連続撃破ボーナス、残り時間ボーナスGame
演出エフェクトの色変更、被弾演出EffectPlayer

最初は「敵を増やす」ではなく、「横に揺れる敵を1種類追加する」のように、確認できる単位へ小さくします。

設計メモを書く

実装前に、次の内容を短く書きます。

項目書く内容
追加する機能何を増やすか
プレイヤーから見える変化画面上で何が変わるか
変更するファイルどこを触るか
新しく追加する値変数、定数、列挙値など
成功条件何ができれば完成か
失敗しそうな点衝突、初期化、上限など

設計メモを書いてからコードを変更します。
途中で仕様を大きく変えたくなった場合は、まずメモを更新します。

実装例: 弾の連射速度を変更する

小さな拡張の例として、ショット間隔を調整できる値にします。

cpp
static constexpr int normalShotInterval = 8;
static constexpr int fastShotInterval = 4;
int shotInterval = normalShotInterval;

ショット後の待ち時間に、固定値ではなくshotIntervalを使います。

cpp
player.OnShoot(shotInterval);

この程度の変更でも、追加した値、変更した関数、操作感の確認が必要です。

動作確認

  1. 追加した要素が画面上で確認できることを確認する
  2. タイトルから開始しても正しく動くことを確認する
  3. リトライ後も追加要素が初期化されることを確認する
  4. クリア、ゲームオーバー、再開の流れが壊れていないことを確認する
  5. デバッグ表示に必要な値を一時的に出して確認する

よくある問題

  • 変更箇所が増えすぎた場合は、追加仕様を小さくする
  • リトライ後に値が戻らない場合は、StartGame()や各クラスのReset()を確認する
  • 既存クラスの責務に合わない処理を入れた場合は、どのクラスが担当すべきか見直す

今回の完成条件

  • 独自要素の設計メモを書ける
  • 変更するファイルと理由を説明できる
  • 小さな拡張を実装できる
  • 追加後の動作確認手順を説明できる

まとめ

今回は、完成した基本ゲームに独自要素を追加しました。
次回は、不具合修正、調整、提出、発表の準備を行います。