Как заставить объект принимать генерировать разные параметры для разных типов

#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. Пример: Паук, Грифон и Дракон произошли бы от Монстра, который, в свою очередь, происходит от Существа. В противном случае вам нужно создать совершенно новый слой данных, чтобы просто назначить разные энергии каждому перечислению.