我有以下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有时可以以不同的方式使用。 例如,游戏武器的主要用途是攻击目标,但如果我想重新加载怎么办?如何让我的角色界面重新加载或提防重载是一个选项?
答案 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->Listener
,WeaponEvent
等。
制作游戏角色类as a listener to WeaponEvent
events,然后在游戏角色类中使用方法FirearmWeaponEvent
,并根据您收到的事件采取相应行动。