gpt4 book ai didi

java - 游戏的继承/界面设计

转载 作者:搜寻专家 更新时间:2023-10-31 08:23:53 24 4
gpt4 key购买 nike

我正在设计一款游戏,但我不太了解继承结构。我通常很擅长这件事,但这个重叠太多,我无法决定所有事情。

我正在寻求为帆船建模 - 想想航海时代。因此,大概所有东西都扩展了一个 Vessel 类。

然后有几种类型的船只类型:划船(桨帆船、独木舟)、方形帆船、前后帆船,具有不同的行为。这些中的每一个都进一步分割为其他几种类型。我无法决定这应该是Vessel的一系列接口(interface)还是扩展。另请注意,可能会有一些交叉(一艘船既可以是划船的也可以是方形的)这让我想到了界面?

船舶也有不同的行为:商船、军人、私掠船、海盗。我真的不知道这应该是一个接口(interface)还是另一个类的扩展。然而,在这种情况下没有类型交叉。

最后,个别船只可以拥有几种行为。商人可能在车队中(自卫)或独立(逃跑)。 war 的人几乎总是攻击,除非被严重击败......但可以在舰队,中队或独立工作。私掠船和海盗只有在实力较弱时才会发动攻击——通常是独立的,但偶尔也会成对进行。我假设这也应该是一个接口(interface)?

我的大问题是每种类型的舰船(护卫舰、战列舰等)几乎都可以扮演这些角色中的任何一个,所以我无法构建一个简单的实体继承结构。护卫舰不能延长战舰,因为有些是私掠船。 Sloop 不能延伸方形索具,因为有些是前后索具。等等等等

如有任何想法,我们将不胜感激,我有点不知所措。谢谢

最佳答案

将“行为”部分作为接口(interface)。这将帮助您毫无问题地将不同的行为分配给不同的船只。 Strategy Pattern在这里很有帮助。简而言之,它指出可变属性和常量属性应该分开。

对于不同的 Action 方式,组合听起来是此时最合适的答案。

关于“但可以在舰队、中队或独立行动。私掠船和海盗只有在实力较弱时才会发动攻击——通常是独立行动,但偶尔也会成对行动。”部分,我猜这与继承树无关。您可以根据需要创建“组”类。

这可能对您有帮助:

enter image description here

“然后有几种类型的容器样式:...”指定了不同的可能行为。所以“可移动”接口(interface)及其子类就是为此而设计的。在“Vessel”类中,您可以拥有一个“Movable”类型的成员。由于“Movable”是一个接口(interface),任何实现它的类都可以分配给这个成员。所以 Vessel 的任何子类都可以有任何可能的行为,我们也可以在运行时更改这些行为。你也可以把它变成一个 ArrayList。 (不确定你是否真的想这样做)。但是,如果您需要对同一艘船执行多种不同的行为,则可以做到。

当您说“Ships 也有不同的行为:...”时,感觉扩展 Vessel 的单独类将满足此要求。句子“但是,在这种情况下没有类型交叉”。让生活更轻松。

对于嵌套段落“最后,个别船只可以有几种行为......”,你应该为不同的可能行为再添加一个成员。它主要是一个 ArrayList,因为一艘船将有多种攻击模式。

关于最后一段,如果你能提供更多细节,我也许可以提供更多想法。

关于java - 游戏的继承/界面设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8683651/

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