C++ 具有动态位置的身体节点形状

C++ 具有动态位置的身体节点形状,c++,random,box2d,cocos2d-x,arc4random,C++,Random,Box2d,Cocos2d X,Arc4random,我想显示具有动态位置的形状 例 A B C D D A B E E B D A 以下是编码: string names[] = { "AB", "ABC", "ABCZ", "ABCDEDF", }) void HelloWorld::addShapes(HelloWorld*游戏) { name=名称[arc4random()%4]; ...... ..... CCPoint

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

     A      B      C     D
     D      A      B     E
     E      B      D     A
以下是编码:

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

void HelloWorld::addShapes(HelloWorld*游戏)
{
name=名称[arc4random()%4];
......
.....
CCPoint pos1[8];
for(int i=0;i对于(int a=0;a如果你想要唯一的随机数,你需要实现它…你可以记住以前所有的数,检查下一个数是否唯一,但它是非确定性算法。或者使用更好的算法,如Knuth Fisher-Yates算法:

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


为什么您需要指向游戏的指针?这与此不同?也请尽量不要像在交换机中那样重用代码。行“game->addBodyNode(nodehead,1);nodehead->retain()”你应该改用后切换。这是一个坏的编程习惯,因为你的代码更长,更难阅读。这并不能解决你的问题,但能让你的代码更干净,更可读。@Wezsieto:我已经记下了你的观点。非常感谢。“std::random_shuffle(pos1,pos1+count)”是Sffffle语法支持的目标C++。@ VANARAJAN:它不是目标C++语法。<代码> STD::开始/结束<代码>返回容器特定迭代器,这只是数组中的指针。这就是为什么您的版本工作。
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.....
     }
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.