gpt4 book ai didi

java - RTS 游戏中对象的多态性和类层次结构问题

转载 作者:搜寻专家 更新时间:2023-11-01 02:09:38 25 4
gpt4 key购买 nike

我正在用 Java 编写 RTS 游戏,遇到了一些多态性问题。为了描述我的问题,我将列出游戏中的一些对象/类:(我将在括号内说明它们中的每一个应该能够做什么)

  • 坦克(可以移动,可以攻击)
  • 塔(可以攻击)
  • 工厂(可以 build 坦克)
  • 树(可以种植)
  • 老虎(可以移动,可以攻击,可以养殖)

在我看来,实现它的理想方式是为每个独特的能力创建一个类,即可移动、可攻击、可耕种、可 build 。这是所有列出的对象都具有的不同能力。它们都是一个游戏对象(层次结构中的最高类,所有对象都有公共(public)数据)。

Movable 包含移动对象的所有代码(计算速度、方向、新位置等)。 Attackable 包含用于跟踪目标、射击、更新射击等的代码。其他能力类别也是如此。

所以在我看来,这将是完美的:

public class Tank extends Movable, Attackable, GameObject {}
public class Tiger extends Movable, Attackable, Farmable, GameObject {}

显然,Java 不允许扩展多个类。而且我不知道如何使用接口(interface)来解决我的多态性和类层次结构问题。

有什么想法吗?目标当然不是​​重复游戏中多个对象共享的代码。

最佳答案

Movable, Attackable 是对象的多种可能行为,所以最好是接口(interface)

至于这些行为的实现——为了解决重复代码的问题,你可以为每个行为创建单独的类——我们将它们命名为服务,例如。 移动服务攻击服务

然后,您可以将这些服务注入(inject)您正在创建的对象(例如 new Tank(myMoveService) )或将对象传递给这些服务,例如。 MoveService.instance().move(myTank)

您可以通过调用委托(delegate)方法为每个类运行一些自定义代码。

例子

interface Movable { public void onMove(); }

class Tank implements Movable {
public void onMove() {
//tank moved!
}
}

class MoveService {
public void move(Movable m) {
// do what you need to do to move
// invoke custom code by running a delegate method
m.onMove();
}
}

关于java - RTS 游戏中对象的多态性和类层次结构问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20645425/

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