RPG游戏java中的消耗品设计

时间:2014-12-02 14:13:27

标签: java oop

现在我正在尝试编写一个关于日本RPG游戏机制的简单Java程序。 我在实施消耗品的使用方面遇到了麻烦,也就是说,改变特定状态的项目,可以是变量HP或MP中的字符'类。这是一个粗略的代码类'项目'现在:

abstract class Items{
int stock;

public int checkCategory();
public int use();
}

class HPitems extends Items{

public int checkCategory(){
return 1; // this only means that category '1' heals HP, not MP
}

}

class Potion extends HPitems{

public int use(){
stock--;
return 50; //this means potion heals 50 HP
}

}

所以我相信你现在得到了这个想法,我打算让类MPitems扩展返回类别2的项目。每当我的玩家对象消耗一个项目时,使用消耗(项目e),它将使用多个检查类别如果声明。如果返回类别1,我将使用相应Items子类的use()返回的值,并将值添加到播放器HP。我不认为现在有任何问题,但是如果有的话许多项目类别,例如提供另一种状态效果的项目,我认为它不会有效。有更好的方法吗?

顺便说一句,如果你需要它,这就是玩家类:

public class Player{
int HP;
int MP;

public void consume(Items e){
if(e.checkCategory() == 1){
    this.HP = this.HP+e.use();
else{
    this.MP = this.MP+e.use();
}
}

} // consume

}

1 个答案:

答案 0 :(得分:1)

不使用e.checkCategory,而是通过调度使用更自然的方法

class Player {
    int hp; 
    int mp;

    void use(Potion p) {
        p.use(this);
    }
}

interface Potion {
    void use(Player p);
}

class HPPotion implements Potion {
    public void use(Player p) {
        p.hp += 50;
    }
}

class MPPotion implements Potion {
    public void use(Player p) {
        p.mp += 50;
    }
}