Java-метод влияет на все остальные экземпляры объекта - PullRequest
0 голосов
/ 09 мая 2018

Итак, я создаю объектно-ориентированное представление видеоигры Fortnite для проекта. Допустим, игрок пьет щит, тогда личный щит этого игрока должен подняться на 25. Однако у меня есть проблема, когда, если экземпляр игрока выпивает щит, каждый другой экземпляр игрока на карте также получает усиление щита. Это работает в обоих направлениях: получение урона и другие виды лечения.

ПРОБЛЕМА:

    System.out.println(broseidon.getCharacter());
    System.out.println(ninja.getCharacter());
    broseidon.getCharacter().heal(miniShield);
    System.out.println(broseidon.getCharacter());
    System.out.println(ninja.getCharacter());

ВЫВОД:

Health: 100, Shield: 0
Health: 100, Shield: 0
Drank minishield
Health: 100, Shield: 25
Health: 100, Shield: 25

Я проверил статические переменные. Не уверен, что не так. Вот методы, которые я использую. Каждый экземпляр учетной записи имеет только один экземпляр PlayerCharacter.

public class Account{
...
    protected PlayerCharacter getCharacter() {
            return pc;
        }
}

public class PlayerCharacter{
...
//HEAL method
    public void heal(HealingItem hi) {
        switch(hi.getType().toLowerCase()) {
        case "bandages":
            if(this.getHealth() < 75) {
                this.setHealth(75);
                System.out.println("Used bandages to heal");
            }else {
                System.out.println("Alert: Bandages cannot be used past 75 health.");
            }
            break;
        case "medkit":
            this.setHealth(100);
            System.out.println("Used medkit to heal");
            break;
        case "minishield":
            if(this.getShield() < 50) {
                this.setShield(this.getShield() + 25);
                System.out.println("Drank minishield");
            }else {
                System.out.println("Alert: miniShield cannot be used past 50 shield.");
            }
            break;
        case "bigshield":
            if((this.getShield() - 50) < 50) {
                this.setShield(100);
                System.out.println("Drank big shield");
            }else {
                this.setShield(this.getShield() + 50);
                System.out.println("Drank big shield");
            }
            break;
        case "chugjug":
            this.setHealth(100);
            this.setShield(100);
            System.out.println("Drank Chug Jug");
            break;
        }
    }
}

Если есть еще методы / переменные, о которых вы хотите узнать больше, пожалуйста, дайте мне знать. Я думал, что «это» будет работать только для конкретного экземпляра называется. Теперь я в замешательстве.

EDIT: Вот пример создания учетных записей (каждому назначен один и только один PlayerObject с использованием шаблона проектирования Singleton). Использование .heal () показано выше в этом методе: broseidon.getCharacter () заживают (miniShield).

Account broseidon = new Account("Broseidon", true);
        Account ninja = new Account("Ninja", true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...