Here an additional answer using the same concept as already described.
Making use of compile time defined constexpr
"pictures" and drawing them on the screen.
Basically nothing more to explain:
#include <iostream>
#include <array>
#include <random>
constexpr size_t NumberOfRows = 7u;
constexpr size_t NumberOfColumns = 9u;
constexpr size_t NumberOfFaces = 6u;
constexpr std::array<std::array<std::array<char, NumberOfColumns>, NumberOfRows>, NumberOfFaces> diceImage{ {
{{
{'+','-','-','-','-','-','-','-','+'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'|',' ',' ',' ','o',' ',' ',' ','|'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'+','-','-','-','-','-','-','-','+'},
}},
{{
{'+','-','-','-','-','-','-','-','+'},
{'|','o',' ',' ',' ',' ',' ',' ','|'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'|',' ',' ',' ',' ',' ',' ','o','|'},
{'+','-','-','-','-','-','-','-','+'},
}},
{{
{'+','-','-','-','-','-','-','-','+'},
{'|','o',' ',' ',' ',' ',' ',' ','|'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'|',' ',' ',' ','o',' ',' ',' ','|'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'|',' ',' ',' ',' ',' ',' ','o','|'},
{'+','-','-','-','-','-','-','-','+'},
}},
{{
{'+','-','-','-','-','-','-','-','+'},
{'|','o',' ',' ',' ',' ',' ','o','|'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'|','o',' ',' ',' ',' ',' ','o','|'},
{'+','-','-','-','-','-','-','-','+'},
}},
{{
{'+','-','-','-','-','-','-','-','+'},
{'|','o',' ',' ',' ',' ',' ','o','|'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'|',' ',' ',' ','o',' ',' ',' ','|'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'|','o',' ',' ',' ',' ',' ','o','|'},
{'+','-','-','-','-','-','-','-','+'},
}},
{{
{'+','-','-','-','-','-','-','-','+'},
{'|','o',' ',' ',' ',' ',' ','o','|'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'|','o',' ',' ',' ',' ',' ','o','|'},
{'|',' ',' ',' ',' ',' ',' ',' ','|'},
{'|','o',' ',' ',' ',' ',' ','o','|'},
{'+','-','-','-','-','-','-','-','+'},
}},
}};
constexpr size_t NumberOfDices = 5u;
int main() {
std::random_device randomDevice;
std::mt19937 diceResultGenerator(randomDevice());
std::uniform_int_distribution<> diceResult(1, 6);
std::array<int, NumberOfDices> result{};
// Roll dices several times
constexpr size_t NumberOfDiceRolls = 3u;
for (size_t roll{}; roll < NumberOfDiceRolls; ++roll) {
// Roll the dices
std::cout << "\nResult: ";
for (size_t diceIndex{}; diceIndex < NumberOfDices; ++diceIndex) {
result[diceIndex] = diceResult(diceResultGenerator);
std::cout << result[diceIndex] << ' ';
}
std::cout << "\n\n";
// Paint result
for (size_t row{}; row < NumberOfRows; ++row) {
for (size_t diceIndex{}; diceIndex < NumberOfDices; ++diceIndex) {
for (size_t column{}; column < NumberOfColumns; ++column)
std::cout << diceImage[result[diceIndex]-1][row][column];
std::cout << '\t';
}
std::cout << '\n';
}
std::cout << "\n\n\n";
}
}
Potential output:
Result: 3 6 6 3 5
+-------+ +-------+ +-------+ +-------+ +-------+
|o | |o o| |o o| |o | |o o|
| | | | | | | | | |
| o | |o o| |o o| | o | | o |
| | | | | | | | | |
| o| |o o| |o o| | o| |o o|
+-------+ +-------+ +-------+ +-------+ +-------+
Result: 3 2 2 6 2
+-------+ +-------+ +-------+ +-------+ +-------+
|o | |o | |o | |o o| |o |
| | | | | | | | | |
| o | | | | | |o o| | |
| | | | | | | | | |
| o| | o| | o| |o o| | o|
+-------+ +-------+ +-------+ +-------+ +-------+
Result: 1 6 5 2 2
+-------+ +-------+ +-------+ +-------+ +-------+
| | |o o| |o o| |o | |o |
| | | | | | | | | |
| o | |o o| | o | | | | |
| | | | | | | | | |
| | |o o| |o o| | o| | o|
+-------+ +-------+ +-------+ +-------+ +-------+