Формы узла тела с динамическим положением

Я хочу отображать фигуры с динамическим положением.

Ex ..

     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

Решение

Вы не можете использовать случайным образом таким образом. Может возвращать одинаковые значения (так работает случайный). Что вам нужно 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.
1

Другие решения

Если вам нужны уникальные случайные числа, вам нужно реализовать их … Вы можете запомнить все предыдущие числа и проверить, является ли следующее число уникальным, но его недетерминированный алгоритм. Или используйте лучший алгоритм, такой как алгоритм Кнута-Фишера-Йейтса: Уникальные (неповторяющиеся) случайные числа в O (1)?

0

По вопросам рекламы [email protected]