用于桌面RPG的buff和debuff系统

时间:2017-08-02 15:52:20

标签: java

我正在用Java创建一个RPG角色表,想想DnD和类似的。

理想情况下,我想要一个类似于此的类:

Modifier modifier = new Modifier(bonusValue, listOfAffectedSkills);
modifier.giveTo(character);
modifier.removeFrom(character);

Modifier[] modifiers = character.getModifiers();
Modifier[] skillModifiers = character.getSkill().getModifiers();

但是,我不知道如何以我可以实现方法giveTo和removeFrom的方式传递listOfAffectedSkills,特别是因为该角色可能具有同一类的许多技能,这应该只影响其中的一小部分。 / p>

2 个答案:

答案 0 :(得分:0)

Pepple应该在downvoting之前发表评论...我相信大多数的downvotes是因为我们不知道你的角色类是如何工作的,也不知道你的修饰符,也不知道你的技能。

个人而言,我宁愿拥有character.give(modifier)new Modifier(bonusValue,MODIFIER.name_of_skill)。技能应该是动态的(一个charcater中的HashMap<String nameOfSkill,Skill s>,并且你应该以相同的方式获得一个奖励修饰符的内部地图。每次你获得一个技能修饰符,你搜索你是否有一个具有相同技能的奖励修饰符名称,然后返回技能修饰符及其奖励修饰符。

答案 1 :(得分:0)

我猜你应该将listOfAffectedSkills实现为

List<ModifiableSkills>

(你也可以让它支持“访客模式”,这将使其更具扩展性,但是现在我们在下面会做什么)。

所以你会:

改性剂:

public class Modifier {
  private int statBonus;
  private int saveBonus;
  private int armorBonus;

  // TODO: constructor, etc

  public int getStatBonus() {
    return statBonus;
  }

  public int getSaveBonus() {
    return saveBonus;
  }

  public int getArmorBonus() {
    return armorBonus;
  }
}

ModifiableSkills(支持使用Modifier修改的界面):

public interface ModifiableSkills {
    void modify(Modifier modifier);
}

实现使用修改器修改自身能力的示例技能,您可以使用其他一般应用的技能类型:

public class WarriorSkills implements ModifiableSkills {
    private int str;
    private int armor;
    private int save;

    void modify(Modifier modifier) {
        str += modifier.getStatBonus();
        armor += modifier.getArmorBonus();
        save += modifier.getSaveBonus();
    }
}

这应该让你开始。