1

マルチプレイヤー テキスト ゲームを作成しており、ゲーム内のすべてのプレイヤーにインベントリが割り当てられています。インベントリは、アイテムの ID とゲーム内のアイテムの状態を含む単純な線形リンク リストです。たとえば、プレーヤー 1 が 50% の燃料を含む赤い車を持っている場合、リストでは (5, 50) として表されます。ここで、5 はゲーム内の赤い車の ID であり、50 はその特定の燃料の量です。車。

ただし、これは、ゲーム内のすべてのアイテムの情報を何らかのデータ構造に保存する必要があることを意味します。

私は次のようなものを使用することを考えました

enum itemtype {car, gun, bullet, etc};
struct itemlist {
    itemtype type;
    char* name;
    int volume, weight;
} itemlist[];

また、赤い車の ID は 5 であるため、赤い車のすべての情報は(car, "Red car", 15m^3, 2000kg)に格納されます。itemlist[5]

ただし、このゲームにはさまざまな種類のアイテムがあるため、各アイテムには独自のプロパティがあります。車は持っているでしょうし(max_speed, acceleration)、弾丸は持っているでしょう(mass, velocity, kinetic_energy). また、コードの一部は、ゲームで何かを行うために、これらの特定のプロパティにアクセスする必要があります。

つまり、これは

  • インベントリから ID を取得する
  • そのようなアイテムの特定のプロパティの配列をチェックする
  • 取得したプロパティを処理する

しかし、それぞれ特定のプロパティが異なるさまざまなカテゴリのアイテムがあるため、その方法がわかりません。

プロパティは文字列や数値など、何でもかまいませんので、構造体に配列を追加しても役に立ちません。ネストされた構造を追加することは問題ないかもしれませんが、誰かがそれを持たないアイテムからitem[5].properties.max_speedプロパティを取得しようとする可能性があるため、使用しようとするものがある可能性があり、これが安全かどうかはわかりません。max_speed

では、そのようなアイテムのリストの一般的および特定のプロパティを格納する最良の方法は何ですか?

4

1 に答える 1

2

エラー、ここで何かが欠けているかもしれませんが、これはまさにunionが行うように構築されたものではありませんか?

次の行に沿って、リスト内の各項目を共用体データ型にします。

struct itemelem {
    itemtype type;
    union {
        cartype c;
        bullettype b;
    };
};

その場合、要素の型が何でtypeあるかを識別するために使用するので、正しい共用体指定子にアクセスできます。

于 2012-04-23T01:56:14.013 に答える