播放器属性的接口

时间:2015-04-27 15:13:58

标签: c# interface

表示播放器类的每个属性的接口是否合适?这有问题吗?

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

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; }
    ...

}

2 个答案:

答案 0 :(得分:0)

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

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

public interface IBaseUnit 
{
     int HitPoints
     ..
}

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

答案 1 :(得分:0)

在我看来,你需要的是一个类层次结构,而不是一堆接口。而不是建立一个大型的"属性"不同的角色可以拥有,建议您建立某种层次结构,并使用具体单位继承的基础抽象类。

一个基本想法:

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
}

等等。显然,你建模的课程将取决于你正在制作的游戏类型。