2

基本的に、プレイヤーがアイテムのインベントリとキャラクター人形 (現在どのアイテムが装備されているかを知るため) を持つ疑似 RPG ゲームを作成しています。

現在装備されているアイテムのコレクションを処理するための最良の方法は何ですか?

私が現在持っているのは、プレイヤーに装備されたアイテムの可能なすべての場所を含む EquipmentSlot 列挙型です。これは、プレイヤーが持っている各アイテムのプロパティとして設定できます。

public enum EquipmentSlot
{
    Head,
    Chest,
    Arms,
    Legs,
    Feet,
    OffHand,
    MainHand
}

次に、各列挙型をキーとして含む辞書を作成し、Player コンストラクターですべてを null に初期化します。

PlayerEquipment = new Dictionary<EquipmentSlot, Item>(7);
PlayerEquipment.Add(EquipmentSlot.Head, null);
PlayerEquipment.Add(EquipmentSlot.Chest, null);
PlayerEquipment.Add(EquipmentSlot.Arms, null);
PlayerEquipment.Add(EquipmentSlot.Legs, null);
PlayerEquipment.Add(EquipmentSlot.Feet, null);
PlayerEquipment.Add(EquipmentSlot.OffHand, null);
PlayerEquipment.Add(EquipmentSlot.MainHand, null);

しかし、これをコーディングしていると、コンストラクターに追加されているため、Player の他のメソッドで列挙としてキーにアクセスできないため、機能しないことに気付き始めています。クラスの他のメンバーが利用できるようにするために、他にどこに追加できるかわかりません。

私の辞書のアプローチはこれについて間違った方法ですか?

4

2 に答える 2

2

私はあなたが何を意味するのか分かりません:

キーはコンストラクターに追加されるため、Player の他のメソッドで列挙型としてアクセスできません。

しかし、なぜ...

public class Player
{
    public Item EquipmentHead { get; set; }
    public Item EquipmentChest { get; set; }
    public Item EquipmentArms { get; set; }
    public Item EquipmentLegs { get; set; }
    public Item EquipmentFeet { get; set; }
    public Item EquipmentOffHand { get; set; }
    public Item EquipmentMainHand { get; set; }
}

PS Dictionary の実装が間違っているとは言いません。これは、より簡単に頭を包むことができる代替手段にすぎません。

于 2012-05-24T00:47:02.273 に答える
1

ローカル変数ではなくクラス メンバーとして定義するPlayerEquipmentと、クラス内のどこからでもアクセスできます。

public class Player
{
     public Dictionary<EquipmentSlot, Item> PlayerEquipment { get; set; }

     public Player()
     {
         PlayerEquipment = new Dictionary<EquipmentSlot, Item>(7);
         PlayerEquipment.Add(EquipmentSlot.Head, null);
         // ...
     }

     // In other methods, you can use this as needed... ie:
     public void DropItem(EquipmentSlot slot)
     {
         this.PlayerEquipment[slot] = null; // Remove the item here...
     }

     //....Rest of class

enum クラスの内部を定義する場合は、他のクラスから使用するときに完全に修飾する必要があることに注意してくださいPlayer.EquipmentSlot.Head。ただし、クラスの外部で定義されている場合は、そのまま使用できますEquipmentSlot.Head(同じ名前空間または適切な using 句が存在すると仮定します)。

于 2012-05-24T00:53:59.853 に答える