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 回答