在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;rowMove
srand(time(NULL));
从每个函数中移出,并将其放置在
main()
的开头。它对随机序列进行重新种子设定。
board
是一个由四个元素组成的一维数组,类型为
int[4]
。您正在洗牌的是那些元素。换句话说,您可以移动整行,但不能移动行内的元素。使其成为
int*flat=&board[0][0];随机洗牌(flat,flat+4*4)
@igor非常感谢你。我怀疑有这样的解决方案,但我就是想不出来。我知道哪里出了问题。谢谢你提供的信息和示例。@WeatherVane在读了这篇文章之后,我有点想这么做。如果我不这样编码,启动nrs在大多数情况下都是一样的,这就是一些我不想经常发生的事情。在进一步思考之后:我怀疑我会用它来创建一个类,因为我有更多的函数要添加到这个类中。当你这样编写代码时,启动nrs.from
rand()
在大多数情况下都是相同的,因为种子值是秒数,您可以调用
srand()
在第一次调用后立即再次调用。这会将随机序列重置为相同的初始值,导致
a
b
具有
2
4
,或
4
2
,尽管它们很少都是
2
4
(不是非常随机的)如果两次调用之间的秒数恰好是滴答滴答的。我建议您仔细阅读
srand()
的使用。