我有下面的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);
}问题是,a GameObject有时可以以不同的方式使用。例如,游戏武器的主要用途是攻击目标,但如果我想重新加载怎么办?我如何让我的字符界面重新加载或注意重新加载是一种选择?
发布于 2017-05-05 21:23:44
我将使用以下方法。
我要声明接口:
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类,扩展这个类,使其具有FirearmWeaponEvent、MeleeWeaponEvent等。
使您的游戏字符类(Es) events,然后在您的游戏字符类有一个方法processEvent(WeaponEvent event),并采取相应的事件,您已经收到。
https://stackoverflow.com/questions/43806746
复制相似问题