gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:37:09 25 4
gpt4 key购买 nike

我正在编写一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com