#include #include #include #include #include #include "Die.h" using namespace std; DieDynamic::DieDynamic(unsigned int faces, int seed) { recording = false; if (seed < 0) { random_device rd; seed = rd(); } generator = new mt19937(seed); if (faces > 1) { sides = faces; } else { cerr << "Error: Invalid number of sides: " << faces << ", setting sides to be 6" << endl; sides = 6; } } DieDynamic::~DieDynamic() { if (recording) { outFile.close(); } } int DieDynamic::Roll() { uniform_int_distribution distrib(1, sides); int result{distrib(*generator)}; if (recording) { outFile << result << " "; outFile.flush(); } return result; } void DieDynamic::Record(string fileName) { if (not recording) { outFile.open(fileName); if (!outFile) { cerr << " Fail to open recording file " << endl; } recording = true; } } DieStatic::DieStatic(string fileName) { inFile.open(fileName); if (not inFile) { throw runtime_error("Die Class unable to open input file "+fileName); } } int DieStatic::Roll() { int rv; inFile >> rv; if (!inFile) { throw range_error("Die Static Class out of data in input file"); } return rv; }