Я хочу запрограммировать небольшую игру в 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.
Вместо этого ваш метод должен быть:
void attack(figure & target) {
target.hp -= strength - target.defense;
}
Таким образом вы указываете цель, на которую набрасываются цифры, и которая может дать вам доступ к атакованным свойствам фигуры. Тогда ты можешь:
figure player, enemy;
enemy.attack(player);
Также обратите внимание, что вам нужно будет иметь какой-то метод, который устанавливает эти свойства, которые являются частными и не заданы в конструкторе, поэтому в классе, поскольку он прямо сейчас, невозможно установить эти значения, то есть они будут представление памяти мусора или в лучшем случае - нули, в зависимости от реализации компилятора.
И последнее, но не менее важное: вы также можете сделать проверку после целевого вычисления hp, чтобы увидеть, жив ли этот показатель, т.е. if (target.hp <= 0)...//"target" is dead
get_xstrength
вернет силу игроку энмеи, и вы сможете атаковать его. Но вам также нужно использоватьset_xstrength()
чтобы установить силу игрока после атаки врага. для этого вам нужно передать объект игрока.