Доступ к двум экземплярам

0

Я хочу запрограммировать небольшую игру в C++.

Я хочу написать метод "атака", который устанавливает состояния фигуры после атаки. У меня есть два игрока и враг. Класс выглядит так:

class figure {
   private:
       string name;
       int    hp;
       int    strength;
       int    defense;

  public:
       void attack(int xstrength) {
       // This method gets the Input values of the player and should calculate 
       // and set the new hp stats of the enemy after an attack, sort of

         hp = hp - (xstrength - defense);
       }
};

Но как я могу назвать этот метод? Нужно ли мне программировать отдельный метод, который получает только значение srength экземпляра?, потому что я не могу вызвать экземпляры таким образом:

enemy.attack(); 

Потому что мне нужно ввести силу экземпляра игрока. Или я могу получить только одно значение экземпляра, например

enemy.attack(player->get_xstrength)

с помощью метода:

void get_strength() {
    return stength
};

Если я увеличиваю число классов с такими значениями, как сопротивление, уровень, состояние и т.д., Я должен запрограммировать множество методов get и set.

  • 0
    Да, ты можешь сделать это. использование get_xstrength вернет силу игроку энмеи, и вы сможете атаковать его. Но вам также нужно использовать set_xstrength() чтобы установить силу игрока после атаки врага. для этого вам нужно передать объект игрока.
  • 0
    Я не понимаю проблемы.
Теги:
copy
instances

1 ответ

0

Вместо этого ваш метод должен быть:

void attack(figure & target) {
   target.hp -= strength - target.defense;
}

Таким образом вы указываете цель, на которую набрасываются цифры, и которая может дать вам доступ к атакованным свойствам фигуры. Тогда ты можешь:

figure player, enemy;
enemy.attack(player);

Также обратите внимание, что вам нужно будет иметь какой-то метод, который устанавливает эти свойства, которые являются частными и не заданы в конструкторе, поэтому в классе, поскольку он прямо сейчас, невозможно установить эти значения, то есть они будут представление памяти мусора или в лучшем случае - нули, в зависимости от реализации компилятора.

И последнее, но не менее важное: вы также можете сделать проверку после целевого вычисления hp, чтобы увидеть, жив ли этот показатель, т.е. if (target.hp <= 0)...//"target" is dead

  • 0
    Привет, спасибо, это отлично сработало, как я уже говорил, прошло много времени с тех пор, как я программировал на c ++. Но я сделал такой метод, как «void attack (figure * target)» вместо «void attack (figure & target)»

Ещё вопросы

Сообщество Overcoder
Наверх
Меню