-5

クラス プロジェクトで人気のあるスペース シューティング ゲームをプログラムしようとしていますが、モジュールのインスタンス化で問題が発生しました。現在、発射体の動きをエンコードするモジュールがあり、それらの配列を作成して「アクティブ化」します。

船がユーザーが望むだけ多くの発射物を発射するようにします。発射物は単純に砲身から現れ、画面を上に移動します。

これは、各発射体の単純な内部ステート マシンに変換されます。

  1. 停止:
    • ユーザーがショットを発射したい場合は、このモジュールをアクティブにします
  2. 初期化:
    • 砲身に合わせて発射位置を設定。発射体のモーションをゼロ以外に設定します。
  3. 動く:
    • 衝突検出ユニットが(敵または壁との)衝突を検出した場合、モジュールを無効にして停止に進みます
    • それ以外の場合は、所定のピクセル量だけ位置をステップするだけです

ステート マシンを適切にプログラムしましたが、現在、ユーザーが発砲すると、発砲は画面の端まで進み、発砲中は別の発砲を行うことができません。

理想的には、アクティブにする「利用可能な」発射体モジュールを調べて見つけることができるある種の辞書があり、そのモジュールが再び起動できるようになったときにステートマシンが更新します。

したがって、プロセスは次のようになります。

  1. ユーザーが発射物を発射したい
  2. 何か...有効になっていない発射体配列内の要素を見つけて有効にします
  3. ショットが実行され、現在のモジュールが破壊されるまで、そのモジュールが別のショットを撮ることを禁止します。

これを行うと考えられる 1 つの方法は、発射物配列から「有効な」ビットを読み取ることです。これは、現在起動しているワンホット エンコーディングになります。

0110 0011 - Projectiles 1, 2, 6, and 7 are in use

次に、それらのビットを取得し、それらに対して何かを実行し、数値 3 を取得します。これは、利用可能な最小の発射体モジュールのインデックスに対応します。数値 3 は、ユーザー入力ステート マシンが発射物モジュールの配列にインデックスを付けるための出力であり、「アクティブ化」信号が送信されます。

4

1 に答える 1

1

ハードウェアを動的にインスタンス化することはできません。Verilog/SystemVerilog を記述して、ハードウェアの構築方法を記述します。異なる時間にアクティブにする必要がある機能がある場合は、それをステート マシンに組み込むか、異なる出力を選択するマルチプレクサを使用する必要があります。

于 2016-11-22T21:57:19.330 に答える