我正在编写一个 MUD 引擎,并且刚刚开始研究游戏对象模型,该模型需要可扩展。
我需要帮助主要是因为我所做的事情感觉很困惑,但我想不出其他更好的解决方案。
我有一个名为 MudObject
的类(class),另一个类名为 Container
,一个容器可以包含多个MudObjects
,但是是 MudObject
然而,它本身MudObject
我们需要知道它们包含什么。
所以它们看起来像这样:
public abstract class MudObject
{
Container containedBy;
}
public abstract class Container : MudObject
{
List<MudObject> Contains;
}
(请注意,这些只是示例,缺少一些限定符、访问修饰符、属性等)
现在这本身看起来很困惑,但让我们添加一些其他东西:
Item
是 MudObject
所有视觉元素(例如武器)都将从中继承,但是其中一些也需要是容器(例如箱子)。但是c#中没有多重继承,所以它归结为接口(interface),最好的选择是让容器成为一个接口(interface)(据我所知)但是有一个我不希望它成为接口(interface)的原因,那就是添加 MudObject
到容器将导致容器更新 MudObject
.containedBy
值。
有什么想法可以让这项工作成功,还是我陷入了让事情变得太复杂的陷阱?
如果是这样,您还有什么建议?
最佳答案
我认为你过于复杂化了。如果 MudObjects 可以包含其他 MudObjects,那么您需要的单个基类应该遵循以下原则:
public abstract class MudObject
{
MudObject containedBy; //technically Parent
List<MudObject> Contains; //children
}
这与 WinForms 和 ASP.NET 的工作方式类似。许多容器控件都是控件,并且可以包含子控件的集合。
关于c# - 游戏项目类层次结构的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/225103/