Skip to content
第01回 全体構成と目標

3 / 4 パラメーターとギミック ​

このステップの目的

性能の定義と、ゲームの動作や進行を決める仕組み

2Dオートシューターとパラメーター ​

2Dオートシューターは、敵の猛攻を避けつつ反撃するゲームです。
同じゲームシステムであっても、プレイヤーや敵、武装の性能の調整次第でゲームの難易度や戦略、ひいてはゲーム性が大きく変わります。

こうしたパラメーターは数値で定義し、後から調整できるように作るのがゲームプログラミングの基本です。
例えば、武装の威力や発射間隔、弾速などは攻撃の挙動に影響します。
敵の出現頻度、移動速度、HPなどは、ゲームの難易度や戦略に影響します。

プレイヤー・敵・武装の性能を決める定義 ​

基本の定数はGameTuning.h、武装の段階別性能はWeapon.cppの定義テーブルで管理しています。

Weapon::Statsは攻撃性能をまとめています。

Source/AutoShooter/Objects/Weapon.h(コメント省略)cpp
struct Stats
{
    int damage = 0;
    float interval = 0;
    int count = 0;
    float speed = 0;
    float spread = 0;
    float radius = 0;
    int penetration = 0;
    float duration = 0;
};

damageは威力、intervalは発射間隔、countは一度に生成する弾数です。
これらを変更することで、武装の性能を調整できます。

自動攻撃・敵の行動・当たり判定と被弾 ​

通常の攻撃は最も近い敵を標的にし、自動で発射されます。
攻撃にはクールダウンの時間が設定されており、経過するまで次の攻撃は発生しません。

敵の移動、攻撃の命中、接触による被弾と無敵時間などは、それぞれの更新・判定処理で扱っています。

経験値・強化選択とゲーム状態の切り替え ​

強化選択中はメニュー上の選択が完了するまでゲームを一時停止します。

Source/AutoShooter/GameModel.cpp(Updateの抜粋)cpp
case State::Upgrade:
    if (input.selection >= 0)
        ChooseUpgrade(input.selection);

    return;

ウェーブの定義と成長の機会 ​

EnemyWaves.cppでは開始秒、出現間隔、敵の種類別の数・HP・移動速度を定義しています。
次の行は、150秒から0.5秒間隔で追尾敵8体と突進敵4体を出現させる終盤の設定です。

Source/AutoShooter/Tuning/EnemyWaves.cpp(Wavesの抜粋)cpp
{ 150, 0.50f, {{
    { Enemy::Type::Chaser, 8, 90, 140 },
    { Enemy::Type::Dasher, 4, 140, 110 }
}} }

制限時間・勝敗・リセットのルール ​

プレイヤーのHPが0になるとゲームオーバー、180秒生存するとクリアです。
秒数の設定は、好みに応じて調整してください。

Source/AutoShooter/Tuning/GameTuning.h(抜粋)cpp
constexpr float PlaySeconds = 180;

また、ステージごとに制限時間を変更したり、制限時間内に敵を一定数撃破できないとゲームオーバーにするなど、様々なルールが考えられます。
是非、自分なりのルールを考えて実装してみてください。

チェックリスト
  • 数値の調整で変わる性能と、処理で決まる仕組みの区別
  • 武装の成長とウェーブの関係