播放器属性接口

Interfaces for Player Attributes

代表玩家每个属性的界面是否合适class?这有问题吗?

随着属性被添加到模型中,接口也会导致声明过长。

public class Player : INamed, IEnergy, IInventory, IMana, ...
{
    public string Name { get; set; }
    public int Energy { get; set; }
    public int Mana { get; set; }
    public Inventory Backpack { get; }
    ...

}

对我来说,这会告诉我并非所有玩家都有名字、能量等。对于基本游戏,所有单位通常都有某种名称和一系列生命值,表示玩家可以造成多少伤害单位占用

如果所有你游戏中的单位具有相似的属性但不同值(也许牧师比士兵能承受更少的伤害,但可以移动得更快,因为它没有装甲),你可以定义一个接口来指定你的单位的行为,因此你可以有这样的东西:

public interface IBaseUnit 
{
     int HitPoints
     ..
}

然后,每个特定的单元都会有自己的实现。话虽如此,我认为这些单元在大多数情况下都会以类似的方式运行,因此,使用抽象 class 而不是层次结构顶部的接口可能更有效。

在我看来,您需要的是 class 层次结构,而不是一堆接口。与其构建不同角色可以拥有的大型 "properties" 池,不如建议您使用具体单元继承自的一些基本抽象 class 对某种层次结构进行建模。

基本思路:

abstract class Character
{
    String name
    int hitpoints;
    IList<Item> inventory;
}

abstract class Spellcaster : Character
{
    int manapoints;
    IList<Spell> knownSpells;
}

class Mage : Spellcaster
{
    // Mage specific stuff
}

class Necromancer : Spellcaster
{
    // Necromancer specific stuff
}

等等。显然,您建模的 classes 将取决于您制作的游戏类型。