c# - 游戏项目类层次结构的建议

标签 c# oop hierarchy mud

我正在编写一个 MUD 引擎,并且刚刚开始研究游戏对象模型,该模型需要可扩展。

我需要帮助主要是因为我所做的事情感觉很困惑,但我想不出其他更好的解决方案。

我有一个名为 MudObject 的类(class),另一个类名为 Container ,一个容器可以包含多个MudObjects ,但是是 MudObject然而,它本身MudObject我们需要知道它们包含什么。

所以它们看起来像这样:

public abstract class MudObject
{
    Container containedBy;
}

public abstract class Container : MudObject
{
    List<MudObject> Contains;
}

(请注意,这些只是示例,缺少一些限定符、访问修饰符、属性等)

现在这本身看起来很困惑,但让我们添加一些其他东西:

ItemMudObject所有视觉元素(例如武器)都将从中继承,但是其中一些也需要是容器(例如箱子)。但是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/

相关文章:

c# - 如何计算 C# 中的日期是否晚于 6 个月的生日

java - 如何同时提供两个接口(interface)(一个 "public"和一个 "extended")?

Python 对象保留以前的数据?

c# - 平面数据到分层模型 C#

c# - 如何在 Visual Studio 中启用“编辑并继续”

c# - EF Code-First 继承单个基类以实现简单的历史性

c# - ClickOnce 的“应用程序身份未设置”

perl - 使用 Moose 进行对象组合的最佳方法是什么?

excel-formula - 使用 Excel 公式将层次结构树转换为父/子表

c# - 创建分层类结构,遍历数据表,然后添加父子并返回对象