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