2

我想显示具有动态位置的形状。

前任..

     A      B      C     D
     D      A      B     E
     E      B      D     A

这里的编码:

string names[] = {
"AB",
"ABC",
"ABCZ",
"ABCDEDF",

};

void HelloWorld::addShapes(HelloWorld* game)
{
name = names[arc4random()%4];
......

.....

CCPoint pos1[8];
for (int i = 0; i< TempNumOne; i++)
{
    pos1[i]=CCPoint(disx, disy);
}


for (int a=0; a<TempNumOne; a++)
{
    Filename[a]=FileMeasure[a];
    int temp= arc4random()%TempNumOne;
    ......
    bodyDef.position.Set(pos1[temp].x/32.0f, pos1[temp].y/32.0f);
    .....

    switch (Filename[a])
    {
        case 'A':
        {
           ......
        }
        case 'B':
        {
            ......
        }
        etc.....
     }

除动态位置外,所有逻辑都工作正常。

有时 arc4random 函数在循环语句中返回相同的值。我对两种形状有相同的位置。

我想显示不同位置的形状。

任何人都可以帮助我吗?

4

2 回答 2

1

你不能那样使用随机。它可能返回相同的值(这就是随机的工作方式)。你需要的是random_shuffle

std::string[] names = {"A", "B", "C"};
std::random_shuffle(std::begin(names), std::end(names));
//now names are in random order. just iterate over them.
于 2013-11-12T07:47:04.670 回答
0

如果你想要唯一的随机数,你需要实现它......你可以记住所有以前的数字并检查下一个数字是否是唯一的,但它的非确定性算法。或者使用更好的算法,如 Knuth-Fisher-Yates 算法:O(1) 中的唯一(非重复)随机数?

于 2013-11-12T07:45:33.240 回答