Dado RPG usando strategy

10 views
Skip to first unread message

Deivid Kleiton de Lima

unread,
Apr 7, 2025, 8:38:19 AMApr 7
to ccppb...@googlegroups.com
#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"
Reply all
Reply to author
Forward
0 new messages