2014-11-14 2 views
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); 
     } 
}; 

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

enemy.attack(); 

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

enemy.attack(player->get_xstrength) 

с методом:

void get_strength() { 
    return stength 
}; 

Если я расширить класс фигуру с большим количеством значений, таких как, сопротивления, уровня, статуса и т.д. I должен пробовать много методов get и set.

+0

да, вы можете это сделать. использование 'get_xstrength' вернет силу игрока к клизму, и вы можете напасть на него. Но вам также нужно использовать 'set_xstrength()', чтобы установить силу игрока после атаки противника. вам нужно передать объект игрока для этого. – ha9u63ar

+0

Я не понимаю проблему. –

ответ

0

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

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

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

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

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

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

+0

Hey thx ddriver, который сработал отлично, как я уже говорил, до тех пор, как я запрограммировал в C++. Но я использовал метод «void attack (figure * target)» вместо «void attack (figure & target)», – E1M1

Смежные вопросы