прямо сейчас Я пытаюсь написать простую Java-программу о японском механизме игры RPG. У меня возникли проблемы с использованием расходных элементов, то есть элементов, которые изменяют определенный статус, либо от переменной HP, либо от MP в классе «character». Вот примерный код класса «Пункт» прямо сейчас:дизайн расходных материалов в игре RPG java
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), он проверяет категорию, используя несколько операторов if. Если возвращается категория 1, я буду использовать значение, возвращаемое из use() соответствующего подкласса Items, и добавьте значение к игроку 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
}
Вы могли бы дать использование метода игрока в качестве аргумента: используйте (Player p), а затем в использовании класса Potion (Player p) {p.HP + = 50} таким образом вам не понадобятся многие if-предложения. С другой стороны, функция использования теперь привязана к игроку. Если другим объектам также необходимо «использовать» зелье, я бы создал новый класс Character eg и define use (Character c). Затем игрок наследует от персонажа. Тогда метод потребления будет выглядеть так, как это потребляет (Элементы e) {e.use (this)} независимо от типа Items. Btw конвенции он должен быть Item, а не Items :) – Michael
@Michael приятно. очень приятно: D спасибо – Rei