我正在编写一个 MUD 引擎,我刚刚开始研究需要可扩展的游戏对象模型。
我需要帮助主要是因为我所做的事情感觉很混乱,但我想不出另一种更好的解决方案。
我有一个名为 的类MudObject
,另一个名为的类Container
,一个容器可以包含多个MudObjects
,但它MudObject
本身就是一个,但是MudObject
需要知道它们包含在什么中。
所以它们看起来像这样:
public abstract class MudObject
{
Container containedBy;
}
public abstract class Container : MudObject
{
List<MudObject> Contains;
}
(请注意,这些只是示例,一些限定符和访问修饰符、属性等被遗漏了)
现在这本身看起来很混乱,但让我们添加一些其他的东西:
Item
是一个MudObject
所有视觉物品(例如武器)都将从中继承的,但是其中一些也需要是容器(例如箱子)。但是在c#中没有多重继承之类的,所以归结为接口,最好的选择是使容器成为接口(据我所知)但是我不希望它是有原因的,那就是向容器中添加一个MudObject
将导致容器更新MudObject
s.containedBy
值。
有什么想法可以完成这项工作,还是我陷入了让事情变得过于复杂的陷阱?
如果是这样,你还有什么建议?