现在我正在尝试编写一个关于日本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
}
答案 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;
}
}