Итак, я создаю объектно-ориентированное представление видеоигры 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);