Изменения единиц и атрибутов с минимальным кодом - PullRequest
0 голосов
/ 29 декабря 2018

Я все еще изучаю Java и имею ОЧЕНЬ ОСНОВНЫЕ знания о языке программирования.Я пытаюсь создать простую Java-игру, в которой у меня есть несколько юнитов, дружественных и недоброжелательных, у каждого из которых есть ряд атрибутов, которые я хочу изменить в зависимости от способностей, которыми обладает каждый юнит.Это мои типы юнитов до сих пор;Медик, офицер, рейнджер, маленький враг и большой враг - все это классы.Каждый блок будет иметь следующие атрибуты:

static int health = 1000;
static int power = 100;
static int moves = 6;
static int movement = 8;

Я считаю, что изменения атрибутов, которые я ищу, могут быть достигнуты с помощью вызова методов, однако я хочу создать один модульный метод, который может просто нацеливать блок и влиять на изменение,Вот пример того, что я хочу сделать, основываясь на способности медика:

public static void Heal() {
    Medic.moves = Medic.moves - 2;
    (target).health = (target).health + 200;
}

В приведенном выше примере я не уверен, как достичь «целевой» функциональности.Это в основном суть моего вопроса, как я могу создать этот метод, чтобы он был модульным, чтобы мне не приходилось писать метод, который конкретно указывает имя цели в методе, как показано ниже?

public static void Heal() {
    Medic.moves = Medic.moves - 2;
    Ranger.health = Ranger.health + 200;
}

public static void Heal() {
    Medic.moves = Medic.moves - 2;
    Officer.health = Officer.health + 200;
}

public static void Heal() {
    Medic.moves = Medic.moves - 2;
    Medic.health = Medic.health + 200;
}

Большое спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Вы должны передать модуль в качестве параметра своему методу, и все ваши модули должны быть дочерними по отношению к родительскому классу.Если мы назовем родительский класс Unit, он должен выглядеть примерно так (поскольку атрибуты для всех модулей одинаковы):

public class Unit {
private int health = 1000;
private int power = 100;
private int moves = 6;
private int movement = 8;
//getters and setters
}

Так что теперь ваш метод будет выглядеть примерно так:

public void Heal(Unit unit) {
    Medic.moves = Medic.moves - 2;
    unit.setHealth(unit.getHealth + 200);
}
0 голосов
/ 29 декабря 2018

Создайте абстрактный класс Unit с вашими атрибутами (но вы НЕ должны использовать static).

Создайте конкретный класс для каждого вида Unit.

Создание методов, позволяющих выполнить действие, например Heal().

Например:

public abstract class Unit {
  private int health;
  private int power;
  private int moves;
  private int movement;

    protected Unit(int health, int power, int moves, int movement) {
      health = health;
      power = power;
      moves = moves;
      movement = movement;
    }

}

public class Medic extends Unit {

    public Medic() {
      super(1000, 100, 6, 8);
    } 

    public Medic(int health, int power, int moves, int movement) {
      super(health, power, moves, movement);
    }

    public void Heal(Unit target) {
      moves -= 2;
      target.health += 200;
    }
} 

Затем вы можете просто создать все свои юниты с конкретным типом (выможет реализовать дополнительные конструкторы, позволяющие указывать значения различных атрибутов), а затем вызывать методы в ваших экземплярах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...