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 関数がループ ステートメントで同じ値を返すことがあります。私は2つの形状に対して同じ位置を持っています。

図形を別の位置に表示したい。

誰でも私を助けることができますか?

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 に答える