#c
Вопрос:
Название, возможно, сбивает с толку, но я действительно не знал, как выразить это лучше.
У меня есть класс Монстров, который наследует базовые значения от класса Существ, но я хочу иметь возможность генерировать разных монстров на основе значений, которые у меня есть в перечислении Монстров. Код, который я предоставил, не работает, но это моя попытка, и я думаю, что я довольно близок, но не могу ее закончить.
Предположим, что у Паука может быть энергия от 1-3, а у Дракона может быть энергия от 10-20. Как я могу сделать так, чтобы для разных типов монстров он генерировал разное количество энергии?
#include <iostream>
#include <random>
#include <chrono>
using namespace std;
enum Monsters
{
Spider,
Griffon,
Dragon
};
class Creature
{
public:
Creature() {}
Creature(int lifes, int damage)
{
this->lifes = lifes;
this->damage = damage;
}
virtual ~Creature() {}
protected:
int lifes;
int damage;
};
template <class T>
class Monster() : public Creature()
{
public:
Monster() : Creature() {}
Monster(int lifes, int damage, int energy) : Creature(lifes, damage)
{
maxPower = rand() % 10;
minPower = rand() % maxPower;
energy = rand() % maxPower minPower;
}
virtual void stats()
{
cout << "Lifes left: " << this->lifes << endl;
cout << "Damage: " << this->damage << endl;
cout << "Energy: " << this->energy << endl;
}
protected:
int energy;
private:
int minPower;
int maxPower;
};
int main()
{
Monster<Dragon> *dragonOne = new Dragon(5, 10, 10);
dragonOne->stats();
return 0;
}
Пожалуйста, запросите дополнительную информацию или отредактируйте этот пост соответствующим образом, если это необходимо.
Комментарии:
1. Совет: Используйте списки конструкторов . Также не используйте
this->x
, простоx
отлично, если нет конфликтующей локальной переменной.2. ПРЕДУПРЕЖДЕНИЕ : Использование
rand()
может быть весьма проблематичным , и вам настоятельно рекомендуется использовать соответствующий генератор случайных чисел в стандартной библиотеке , который выдает высококачественные случайные значения. Использованиеtime(NULL)
в качестве случайного числа приведет к одинаковым результатам, если оно будет запущено в одну и ту же секунду, а на многих платформахrand()
оно вообще не является случайным.3. Я новичок в C и просто хочу убедиться, что указываю на правильную переменную, но это правильная точка. Спасибо.
4. Можете ли вы объяснить «не работает» в более технических терминах? Какие именно ошибки вы получаете?
5. Вместо смешивания наследования и шаблонов у вас могут быть классы, производные от Monster. Пример: Паук, Грифон и Дракон произошли бы от Монстра, который, в свою очередь, происходит от Существа. В противном случае вам нужно создать совершенно новый слой данных, чтобы просто назначить разные энергии каждому перечислению.