クラス プロジェクトで人気のあるスペース シューティング ゲームをプログラムしようとしていますが、モジュールのインスタンス化で問題が発生しました。現在、発射体の動きをエンコードするモジュールがあり、それらの配列を作成して「アクティブ化」します。
船がユーザーが望むだけ多くの発射物を発射するようにします。発射物は単純に砲身から現れ、画面を上に移動します。
これは、各発射体の単純な内部ステート マシンに変換されます。
- 停止:
- ユーザーがショットを発射したい場合は、このモジュールをアクティブにします
- 初期化:
- 砲身に合わせて発射位置を設定。発射体のモーションをゼロ以外に設定します。
- 動く:
- 衝突検出ユニットが(敵または壁との)衝突を検出した場合、モジュールを無効にして停止に進みます
- それ以外の場合は、所定のピクセル量だけ位置をステップするだけです
ステート マシンを適切にプログラムしましたが、現在、ユーザーが発砲すると、発砲は画面の端まで進み、発砲中は別の発砲を行うことができません。
理想的には、アクティブにする「利用可能な」発射体モジュールを調べて見つけることができるある種の辞書があり、そのモジュールが再び起動できるようになったときにステートマシンが更新します。
したがって、プロセスは次のようになります。
- ユーザーが発射物を発射したい
- 何か...有効になっていない発射体配列内の要素を見つけて有効にします
- ショットが実行され、現在のモジュールが破壊されるまで、そのモジュールが別のショットを撮ることを禁止します。
これを行うと考えられる 1 つの方法は、発射物配列から「有効な」ビットを読み取ることです。これは、現在起動しているワンホット エンコーディングになります。
0110 0011 - Projectiles 1, 2, 6, and 7 are in use
次に、それらのビットを取得し、それらに対して何かを実行し、数値 3 を取得します。これは、利用可能な最小の発射体モジュールのインデックスに対応します。数値 3 は、ユーザー入力ステート マシンが発射物モジュールの配列にインデックスを付けるための出力であり、「アクティブ化」信号が送信されます。