表示播放器类的每个属性的接口是否合适?这有问题吗?
随着属性被添加到模型中,接口也将导致长声明。
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; }
...
}
答案 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
}
等等。显然,你建模的课程将取决于你正在制作的游戏类型。