提供单独的类通用方法

时间:2018-07-03 12:49:14

标签: java

我正在制作一个简单的基于文本的类似于RPG的游戏,着重于遭遇和战斗,我正在尝试使用OOP来创建生物类型和生物的“树”,

因此,这是一些Battler的子类及其子类:

Battler
|-Player
|
|-Phantom
| |-Wisp
|
|-Undead
| |-Wraith
|
|-Elementals
  |-Lightning
    |-Spark Mote

这就是问题:我计划为游戏中的每个咒语都有一个方法。举两个例子,假设是Ennervate和Shockwave。我想同时提供《幽灵迷魂》,《火花尘暴冲击波》,《玩家》两者(最终至少要)和《小精灵》两者。

我可以看到一个解决方案,那就是将所有咒语都转交给Battler,但是我可以预见,由于很多结果都存储在一个文件中,因此该结局是可怕的。

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

答案可能是:那就不要使用方法。

相反:创建某种表示“共享”功能的类,并让您的基类包含此类对象的列表。

换句话说:这里您需要大量的灵活性,而多态性并没有太大帮助。特别是考虑到您的情况:迟早您可能会考虑获得功能的方法。含义:您的对象不仅具有许多不同的方法,而且有时您希望它们被“启用”,有时则不希望。

如:

class Spell {
  whatever ...
}

public abstract class Battler {
  private final List<Spell> spells = new ArrayList<>();

  ...

  public void addSpell(Spell newSpell) { spells.add(spell); }

  public List<Spell> getSpells() ...

答案 1 :(得分:0)

我不知道您如何实现这些咒语,但是据我所知,一种简单的方法是声明一个Spell类,然后使每个咒语都从中继承。

您现在可以为每个生物/怪物/玩家分配一个法术列表,并在不增加过多痛苦的情况下为单个法术添加效果。

因此,玩家的咒语列表/集中将有EnnervateShockwave,其他生物也一样。