Beispiel #1
0
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;
}