#ifndef RNG_HPP
#define RNG_HPP
#include<random>
class RNG
{
private:
std::random_device rd;
std::mt19937 gen;
public:
RNG();
int gerar(int minimo, int maximo);
~RNG() = default;
};
#endif //RNG_HPP
#include "../include/rng.hpp"
RNG::RNG():gen(rd())
{
}
int RNG::gerar(int minimo = 0, int maximo = 1)
{
std::uniform_int_distribution<>dist(minimo,maximo);
return dist(gen);
}
// arquivo dado.hpp
#ifndef DADO_HPP
#define DADO_HPP
#include "rng.hpp"
#include<memory>
class DadoStrategy
{
protected:
RNG rng;
public:
virtual int rolar() = 0;
virtual ~DadoStrategy(){}
};
class D4: public DadoStrategy{
int rolar() override{
return rng.gerar(1,4);
}
};
class D6: public DadoStrategy{
int rolar() override{
return rng.gerar(1,6);
}
};
class D8: public DadoStrategy{
int rolar() override{
return rng.gerar(1,8);
}
};
class D10: public DadoStrategy{
int rolar() override{
return rng.gerar(1,10);
}
};
class D12: public DadoStrategy{
int rolar() override{
return rng.gerar(1,12);
}
};
class D20: public DadoStrategy{
int rolar() override{
return rng.gerar(1,20);
}
};
class D30: public DadoStrategy{
int rolar() override{
return rng.gerar(1,30);
}
};
class D100: public DadoStrategy{
int rolar() override{
return rng.gerar(1,100);
}
};
class Dado
{
private:
std::shared_ptr<DadoStrategy> dadoStrategy;
public:
void setStrategy(std::shared_ptr<DadoStrategy> novoDado)
{
dadoStrategy = novoDado;
}
int executarRolamento(int vezes)
{
int resultado = 0;
if(dadoStrategy)
{
for(int i = 0; i < vezes; ++i)
{
dadoStrategy.rolar():
}
}else{
return 0;
}
}
};
#endif //DADO_HPP
#include "../include/dado.hpp"