Java как получить доступ к методам, используя экземпляр из другого класса


Я пытаюсь написать небольшую игру, чтобы помочь с моими навыками Java. У меня есть класс под названием "Зомби" и "игрок", и я создал экземпляры этих классов следующим образом:

Zombie zombie = new Zombie(50, "Infected Zombie", "Slash");
Player defaultPlayer = new Player(100, "Default Player");

Далее я запросил пользовательский ввод для стиля атаки игрока:

System.out.println("Which attack style would you like to use?");
        defaultPlayer.printAttackStyles();
        int option = scanner.nextInt();
        scanner.nextLine();
        switch(option) {
            case 0:
                System.out.println("You backed out of the fight.");
                break;
            case 1:
                System.out.println("Punching...");
                defaultPlayer.attack(1);
                break;
            case 2:
                System.out.println("Kicking...");
                defaultPlayer.attack(2);
                break;
            case 3:
                System.out.println("Headbutting...");
                defaultPlayer.attack(3);
                break;
            case 4:
                System.out.println("Tackling...");
                defaultPlayer.attack(4);
                break;
            default:
                System.out.println("Not a valid attack style");
        }

В моем классе "игрок" у меня есть метод под названием Атака, который наносит определенное количество урона в зависимости от стиля атаки:

public int attack(int attackStyle) {
        int damage = 0;

        switch(attackStyle) {
            case 0:
                damage = 0;
                break;
            case 1:
                damage = random.nextInt(20) + 1;
                zombie.removeHealth(damage);
                break;
            case 2:
                damage = random.nextInt(25) + 1;
                zombie.removeHealth(damage);
                break;
            case 3:
                damage = random.nextInt(30) + 1;
                zombie.removeHealth(damage);
                this.health -= random.nextInt(5) + 1;
                break;
            case 4:
                damage = random.nextInt(45) + 1;
                zombie.removeHealth(damage);
                this.health -= random.nextInt(10) + 1;
                break;
        }

        return damage;
    }

В каждом случае метода атаки у меня есть строка кода, которая говорит

zombie.removeHealth(damage);

Так как экземпляр объявлен только в основном классе как я могу получить доступ к этому экземпляру, чтобы получить доступ к методу removeHealth () в классе zombie? Извините, если этот вопрос простой, но я не могу понять этого.

2 2

2 ответа:

В методе attack вам нужно добавить еще 1 аргумент, который может быть использован для передачи вашего экземпляра класса Zombie в метод attack. Сделайте свою подпись метода как public int attack (int attackStyle, Zombie zombie)

Теперь в блоке switch при вызове defaultPlayer.attack pass значение int, как вы проходили ранее и экземпляр вашего класса зомби, как это

DefaultPlayer.атака (ваше значение int, зомби)

Это передаст экземпляр зомби методу атаки тогда вы сможете такой же есть экземпляр зомби для вызова removeHealth(повреждения) способ.

Надеюсь, что это решит ваш запрос.

Передайте ссылку зомби в методе атаки? вот так: defaultPlayer.attack(3, zombie ); теперь внутри метода атаки вы можете использовать ссылку зомби и вызывать методы на нем.