如何在SDL中生成一次随机集?

时间:2016-01-22 02:17:45

标签: c++ sdl render

我正在使用SDL,我创建了一个函数,它将创建一组随机的片段并渲染它们。但是,当我运行程序时,它将不断在10×10网格上呈现一组新的随机片段。我想知道我是如何得到它所以渲染一次,不再生成一个新的集合,但仍然能够编辑位置。

void generatelocation(int loc[10][10]){
    for (int n = 0; n < 10; n++){
        for(int m = 0; m<10; m++){
            loc[n][m] = rand()%6;
        }
    }
    int redcount = 0;
    int orangecount = 0;
    int yellowcount = 0;
    int greencount = 0;
    int bluecount = 0;
    int purplecount = 0;
    for (int n = 0; n < 10; n++){
        for(int m = 0; m<10; m++){
            switch (loc[n][m]){
                case 0:
                    redcount++;
                    break;
                case 1:
                    orangecount++;
                    break;
                case 2:
                    yellowcount++;
                    break;
                case 3:
                    greencount++;
                    break;
                case 4:
                    bluecount++;
                    break;
                case 5:
                    purplecount++;
                    break;
                default:
                    break;
            }
        }
    }
    if (redcount < 2 or orangecount < 2 or yellowcount < 1 or greencount < 1 or bluecount < 1 or purplecount < 1){
        generatelocation(loc);
    }
}
void piecerender(){
    int loc[10][10];
    generatelocation(loc);
    for (int n = 0; n < 10; n++){
        for(int m = 0; m<10; m++){
            switch (loc[n][m]){
                case 0:
                    gRedTexture.render(248+48*n, 128+48*m);
                    break;
                case 1:
                    gOrangeTexture.render(248+48*n, 128+48*m);
                    break;
                case 2:
                    gYellowTexture.render(248+48*n, 128+48*m);
                    break;
                case 3:
                    gGreenTexture.render(248+48*n, 128+48*m);
                    break;
                case 4:
                    gBlueTexture.render(248+48*n, 128+48*m);
                    break;
                case 5:
                    gPurpleTexture.render(248+48*n, 128+48*m);
                    break;
                default:
                    break;
            }
        }
    }
}

这是我生成集合的函数,我把它放在主循环中。

2 个答案:

答案 0 :(得分:0)

在您的位置生成和渲染功能之外创建数组“loc”。刚才你每次渲染时都会创建一个新数组(每秒多次)。您可以创建一次数组,然后将其传递给位置生成函数,该函数可以更改存储在数组中的值,然后传递给渲染函数。这也会减少程序的内存使用。

答案 1 :(得分:0)

我可能误解了这个问题,但你为什么不创建一个具有生成函数的类和另一个编辑位置的函数?您的执行代码将是:

    set.generate();
    set.render();
    set.editLocation();

简单地说,将功能分开是一个问题吗?