Java游戏对象设计

Java游戏对象设计,java,oop,Java,Oop,所以我在一个简单的RTS设计上遇到了麻烦 基本上,我想要一个模型和一个控制器,在那里人们可以编程他们自己的AI来玩游戏,所以我需要某种形式的界面,它位于模型和控制器之间,允许玩家控制他们的单位,而不必在单位中“设置”诸如单位统计之类的东西 因此,为了减少代码重复使用,我将使用层次结构来创建一个在OO中执行不同操作的单元: 玩家拥有的对象->具有属性的对象(生命值、攻击)->可以攻击的对象->可以移动的对象->单位 所以一个单位是一个对象:是玩家拥有的,有属性,可以攻击,可以移动 我的问题是:如何

所以我在一个简单的RTS设计上遇到了麻烦

基本上,我想要一个模型和一个控制器,在那里人们可以编程他们自己的AI来玩游戏,所以我需要某种形式的界面,它位于模型和控制器之间,允许玩家控制他们的单位,而不必在单位中“设置”诸如单位统计之类的东西

因此,为了减少代码重复使用,我将使用层次结构来创建一个在OO中执行不同操作的单元:

玩家拥有的对象->具有属性的对象(生命值、攻击)->可以攻击的对象->可以移动的对象->单位

所以一个单位是一个对象:是玩家拥有的,有属性,可以攻击,可以移动

我的问题是:如何创建某种形式的接口来处理所有这些继承?因此,如果对象继承了“具有统计信息的对象”以及单元的其他“属性”,则接口将返回统计信息。这种遗传有可能吗?或者我应该用另一种方式来做

我希望这是有道理的!
谢谢你的问题,我想你有这样的问题:

public interface Unit extends Owned, StatsProvider, Attacking, Moveable {
  // ...
}
以及一个具体的实现,比如

public class Knight implements Unit {
  // ...
}
现在,举例来说,如果我们想移动玩家的所有可移动对象,我们可以说

List<Owned> playerOwnedObjects = getObjectsFor("Carl");  // you know what I mean...
for (Owned playerOwnedObject:playerOwnedObjects) {
  if (playerOwnedObject instanceof Moveable) {
    ((Moveable) playerOwnedObject).moveTo(getTargetLocation());
  }
}
List playerOwnedObjects=getObjectsFor(“Carl”);//你知道我的意思。。。
for(拥有的playerOwnedObject:playerOwnedObjects){
if(可移动对象的playerOwnedObject实例){
((可移动)playerOwnedObject.moveTo(getTargetLocation());
}
}

希望我没有误解你的问题…

我认为你不需要等级制度

设置具有统计信息的对象的方式继承自可攻击的对象。这意味着每一个拥有属性的对象都可以攻击-这就是你的意思吗?一个纯粹的防御对象呢

我认为您有许多功能接口,某些对象实现了其中的某些功能,因此:

 Monster implements Attacker, Mover, StatProvider, HurtReceiver

 TreasureChest implements Attacker, StatProvider, Movable, HurtReceiver

 Map implements Movable

听起来像是个危险的宝箱!是的,你真的不想满足这些内容;-)是的,我最终使用了与此非常相似的东西,从我的游戏循环处理方式(并尝试从不重复使用代码)我最终使用了抽象处理程序->AttackHandler,MoveHandler,这些处理程序被附加到对象上(因此每当对象被循环更新时都会更新),效果很好!