游戏对象和代码结构

时间:2017-05-05 13:50:23

标签: java oop interface abstract-class

我有以下GameObject interface

public interface GameObject {
     void viewDetails();    
}

字符Interface

interface Character{   
    void pickUp(Weapon weapon);
    void use(Weapon weapon);
}

abstract武器class

public abstract class Weapon implements GameObject {

  //left out constructor to focus on methods

   @Override
   public abstract void viewDetails();
   public abstract void attack(Enemy enemyObj);
   //Could be bullets, could be a mystical item.
   public abstract void replenish(ReplenishItem rpItem);
}

问题在于, GameObject有时可以以不同的方式使用。 例如,游戏武器的主要用途是攻击目标,但如果我想重新加载怎么办?如何让我的角色界面重新加载或提防重载是一个选项?

1 个答案:

答案 0 :(得分:0)

我会使用以下方法。

我会声明接口:

javax.ws.rs.core.Response

然后实现类,如下所示:

Response

然后,我会声明这些接口:

interface MeleeWeapon {
    void hit();
    void cut();
}

interface FirearmWeapon {
   void fire();
   void reload();
}

interface MagicWeapon {
   void throw();
   void apply();
   void recharge();
}

而且,我会声明字符类:

class Knife implements MeleeWeapon {
     public void hit() {

     } 

     public void cut() {

     } 
}

class Dagger implements MeleeWeapon {
     public void hit() {

     } 

     public void cut() {

     }     
}

class GarandRifle implements FirearmWeapon {
     public void fire() {

     } 

     public void reload() {

     }     
}

class Fireball implements MagicWeapon {
     public void throw() {

     } 

     public void apply() {

     }     

     public void recharge() {

     }     
}

这种方法让我们以后可以毫不费力地添加新的武器和角色。

interface MeleeWeaponUser { void use(MeleeWeapon weapon); } interface FirearmWeaponUser { void use(FirearmWeapon weapon); } interface MagicWeaponUser { void use(MagicWeapon weapon); } 方法中,如果武器分配器中没有更多弹药,您可以拨打class Peasant implements MeleeWeaponUser { public void use(MeleeWeapon weapon) { } } class Marine implements MeleeWeaponUser, FirearmWeaponUser { public void use(FirearmWeapon weapon) { } public void use(MeleeWeapon weapon) { } } class Sorcerer implements MeleeWeaponUser, MagicWeaponUser { public void use(MeleeWeapon weapon) { } public void use(MagicWeapon weapon) { } }

但是如果你的游戏角色收到来自外部的信号,例如重新加载枪支,即使有足够的弹药开火,也可以实施use()方法。

创建一个reload()类,将此类扩展为Event->ListenerWeaponEvent等。

制作游戏角色类as a listener to WeaponEvent events,然后在游戏角色类中使用方法FirearmWeaponEvent,并根据您收到的事件采取相应行动。