在c+中,在二维数组中的两个维度上随机化元素+; 我正在学习程序,我想复制一个我觉得好玩的C++游戏(基本上只是为了学习。所以如果我把问题弄错了,请原谅我)。
现在我有一个关于随机二维数组的问题。问题是,我管理它的一部分,以使其工作,但我只是没有理由我可以使它完全工作 守则:在c+中,在二维数组中的两个维度上随机化元素+; 我正在学习程序,我想复制一个我觉得好玩的C++游戏(基本上只是为了学习。所以如果我把问题弄错了,请原谅我)。,c++,random,multidimensional-array,C++,Random,Multidimensional Array,现在我有一个关于随机二维数组的问题。问题是,我管理它的一部分,以使其工作,但我只是没有理由我可以使它完全工作 守则: // Random generate and return nr 2 or 4 on calling this function. int startValue1(){ srand(time(NULL)); int arrayStart[2] = {2, 4}; int randIndex = rand() % 2; return array
// Random generate and return nr 2 or 4 on calling this function.
int startValue1(){
srand(time(NULL));
int arrayStart[2] = {2, 4};
int randIndex = rand() % 2;
return arrayStart[randIndex];
}
// Random generate and return nr 4 or 2 on calling this function.
int startValue2(){
srand(time(NULL));
int arrayStart[2] = {4, 2};
int randIndex = rand() % 2;
return arrayStart[randIndex];
}
int tester(){
//generate 2 start values and assign to variables
int a = startValue1();
int b = startValue2();
//initialize 2 dimentional array and add the 2 starting numbers.
int board[4][4] = {{a,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,b}
};
// print out the board in console to check/test the function(S).
for(int row = 0; row<4; row++){
for (int column = 0; column<4; column++){
cout << board[row][column] << " ";
}
cout << endl << endl;
}
cout << endl;
//Randomize the elements in the 2 dimentional array.
random_shuffle(board, board +4) ;
//print out the array to console after the board is randomised (for testing/checking only)
for(int row = 0; row<4; row++){
for (int column = 0; column<4; column++){
cout << board[row][column] << " ";
}
cout << endl << endl;
}
}
//调用此函数时随机生成并返回nr 2或4。
int startValue1(){
srand(时间(空));
int arrayStart[2]={2,4};
int randIndex=rand()%2;
返回arrayStart[randIndex];
}
//随机生成并在调用此函数时返回nr4或2。
int startValue2(){
srand(时间(空));
int arrayStart[2]={4,2};
int randIndex=rand()%2;
返回arrayStart[randIndex];
}
int测试仪(){
//生成2个起始值并分配给变量
int a=起始值1();
int b=起始值2();
//初始化二维数组并添加两个起始数字。
int板[4][4]={{a,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,b}
};
//在控制台中打印电路板,以检查/测试功能。
对于(int row=0;rowMovesrand(time(NULL));
从每个函数中移出,并将其放置在main()
的开头。它对随机序列进行重新种子设定。board
是一个由四个元素组成的一维数组,类型为int[4]
。您正在洗牌的是那些元素。换句话说,您可以移动整行,但不能移动行内的元素。使其成为int*flat=&board[0][0];随机洗牌(flat,flat+4*4)
@igor非常感谢你。我怀疑有这样的解决方案,但我就是想不出来。我知道哪里出了问题。谢谢你提供的信息和示例。@WeatherVane在读了这篇文章之后,我有点想这么做。如果我不这样编码,启动nrs在大多数情况下都是一样的,这就是一些我不想经常发生的事情。在进一步思考之后:我怀疑我会用它来创建一个类,因为我有更多的函数要添加到这个类中。当你这样编写代码时,启动nrs.fromrand()
在大多数情况下都是相同的,因为种子值是秒数,您可以调用srand()
在第一次调用后立即再次调用。这会将随机序列重置为相同的初始值,导致a
和b
具有2
和4
,或4
和2
,尽管它们很少都是2
或4
(不是非常随机的)如果两次调用之间的秒数恰好是滴答滴答的。我建议您仔细阅读srand()
的使用。