骰子滚动模拟器C ++

时间:2016-01-13 19:24:50

标签: c++ arrays probability dice

在课堂上,我们收到了一个编写C ++程序的作业,该程序模拟滚动骰子(或多个)。很简单,我做的非常简单,甚至可以同时滚动超过1个模具并计算滚动数量的次数(2-12,正如您在底部的代码中看到的那样)。但是老师给了我们另一个任务。使程序滚动用户输入的骰子数量,骰子根据用户输入的数量,用户想要掷骰子的次数,以及能够hold持有的数量。骰子,就像游戏Yahtzee。

我的同学和我真的很困惑如何做到这一点,老师给我们的暗示创造了" hold"函数涉及数组。我们很困惑,因为我们所拥有的唯一数组示例是我们在课堂上做的例子,我们制作的原始Dice模拟器作为示例并滚动两个骰子等。

以下是我目前的代码。我知道并非所有变量都有目的,我尝试使用Arrays复制我的代码下面的示例,我知道我做得不对,所以请放轻松我。我没有要求你为我做任务,我只需要一些关于下一步该做什么以及我做错了什么的指导。带注释标签的代码是我提到的原始Dice模拟器,上面是我正在做的工作。任何帮助表示赞赏。

srand (time(NULL));
int dicenumber,diceroll,sides,rolls,rolling;
//Be able to hold, ask how many dice to roll, how many sides per die, and how many rolls
cout<<"\033[1;36m How many dice would you like to roll? \033[0m \n";
cin>>dicenumber;
cout<<"\033[1;36m How many sides per die? \033[0m \n";
cin>>sides;
cout<<"\033[1;36m How many times do you want to roll? \033[0m \n";
cin>>rolls;

//Sets total rolls to 0
for (rolling=0;rolling<rolls;rolling++)
    diceroll=rand()%sides+1;
    cout<<diceroll;




//Initialize variables and randomness
//srand (time(NULL));
//int COUNTER,ROLLS,TOTALS[13];

        //Set totals to 0
//for (COUNTER=0;COUNTER<13;COUNTER++)
//TOTALS[COUNTER]=0;

        //Simulate 1,000,000 dice rolls
//for (ROLLS=0;ROLLS<1000;ROLLS++)
    //TOTALS[rand()%6+1+rand()%6+1]++;

        //Output the totals
//for (COUNTER=1;COUNTER<13;COUNTER++)
    //cout<<COUNTER<<" = \033[1;36m"<<TOTALS[COUNTER]<<"\033[0m \n";

2 个答案:

答案 0 :(得分:0)

您可以使用std::vector<int>int[DICE_COUNT]甚至std::vector<Die>,创建Die课程。有很多方法可以做到这一点,但基本上把数组/向量看作存储多个骰子的当前状态,然后可以在以后调用它。

答案 1 :(得分:0)

如果您对用户可以选择的骰子数量没有上限(或者更确切地说没有假设&#39;上限),那么为了存储结果,您需要分配根据用户输入的数组,可以这样完成:

int *results = new int[dicenumber];
for(int i = 0; i < dicenumber; i++){
    // rolling the dice and storing the values...
    *(results+i) = rand() % sides + 1;
}// end for loop

// viewing the results...
for(int i = 0; i < dicenumber; i++){
    cout << *(results+i) << endl;
}
...
// end of program; free the memory when you're done
delete[] results;

在上述情况下,您使用指针*results指向内存中的特定地址,其中使用new关键字分配空间来存储模具的结果劳斯莱斯。在这种情况下,我们已经分配了一个等于骰子数int倍的空间。随着for循环的每次迭代,我们都在递增指针,从而通过我们的数组进行索引。

但是,如果你刚刚被引入数组,我发现你的教授很可能不会考虑指针算法。将结果存储在静态数组中要容易得多(或者至少更直观);下面是一个例子:

int results[32]; // allocated an array of size sizeof(int)*32, so space for 32 ints!
for(int i = 0; i < dicenumber; i++){
    // indexing through the array and assigning our roll...
    results[i] = rand() % sides + 1;
}// end for loop

// viewing the results...
for(int i = 0; i < dicenumber; i++){
    cout << results[i] << endl;
}// end for loop

无论哪种方式,是的,数组是存储程序结果的简单方法。正如另一个答案所暗示的那样,您确实可以使用std::vector<int>或其他自定义类/结构的向量来存储结果,但坦率地说,除了静态数组之外的任何东西都是过度的(至少对于编程课程而言......)