我正在制作一个简单的基于文本的类似于RPG的游戏,着重于遭遇和战斗,我正在尝试使用OOP来创建生物类型和生物的“树”,
因此,这是一些Battler的子类及其子类:
Battler
|-Player
|
|-Phantom
| |-Wisp
|
|-Undead
| |-Wraith
|
|-Elementals
|-Lightning
|-Spark Mote
这就是问题:我计划为游戏中的每个咒语都有一个方法。举两个例子,假设是Ennervate和Shockwave。我想同时提供《幽灵迷魂》,《火花尘暴冲击波》,《玩家》两者(最终至少要)和《小精灵》两者。
我可以看到一个解决方案,那就是将所有咒语都转交给Battler,但是我可以预见,由于很多结果都存储在一个文件中,因此该结局是可怕的。
有更好的方法吗?
答案 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
类,然后使每个咒语都从中继承。
您现在可以为每个生物/怪物/玩家分配一个法术列表,并在不增加过多痛苦的情况下为单个法术添加效果。
因此,玩家的咒语列表/集中将有Ennervate
和Shockwave
,其他生物也一样。