int GameScene::addNewEnemyByLevel(int lvl){ float dropTime = 1 + ((lvl-1)/4); auto wSize = Director::getInstance()->getWinSize(); int quantity = GameScene::hardControlForNumByLvl(lvl); int start = 0; int end = 8; int total = abs(end - start); if (quantity >total) { CCLOG("随机数错误"); } int sequence[total]; //存放随机数的数组 int output[quantity]; //最终生成的不重复一系列随机数 //将sequence 初始化 for (int i = 0; i < total; i++) { sequence[i] = start+i; } //随机数种子 timeval psv; gettimeofday(&psv, NULL); unsigned seed = (unsigned)psv.tv_sec*1000 + (unsigned)psv.tv_usec/1000; srand(seed); for (int i = 0; i < quantity; i++) { Enemy * obj = Enemy::create(); int weight = GameScene::hardControlForCountByLvl(lvl); obj->setEnemyWeight(weight); log("zhongzi:%d",(end-start+1)+start); int num = CCRANDOM_0_1()*end;//在指定范围下产生随机数 output[i] = sequence[num];//将产生的随机数存储 sequence[num] = sequence[end-1];//将最后个下标的值填充到随机产生的下标中 end--;//在指定范围 向前移 Sprite *em = obj->createEnemy(); auto width = em->getContentSize().width; float f = output[i]*width+width*.5f; em->setPosition(f, wSize.height+80); // log("--%d--%.2f- %.2f-",output[i],f,width); this->addChild(em,i+100); GameScene::startDrop(20/dropTime+5*(weight-1), em, false); curWave.pushBack(obj); curEnWave.pushBack(em); } return waveCount; }