Esempio n. 1
0
void GameScene::setLevel(int level) {
    m_level = level;
    qDebug() << "Starting level" << level;

    lastSpecialSpawnTime = 0;
    setTimeFactor(normalTimeFactor);

    foreach(QGraphicsItem *item, items()) {
        if(Particle* particle = qgraphicsitem_cast<Particle*>(item)) {
            removeItem(particle);
            delete particle; // Delete the particle completely. Should (hopefully) not be referenced anywhere else.
        }
    }

    if(gameMode() == ModeClassic && level == 1) {

        setRemainingPositiveCharges(20);
        setRemainingNegativeCharges(20);

        setLevelTime(27);
    } else if(gameMode() == ModeClassic) {
        setLevelTime(baseTime + (int)(timeIncrement * level));
        setRemainingPositiveCharges(baseChargeNum + (int)(incrementChargeNum * level));
        setRemainingNegativeCharges(baseChargeNum + (int)(incrementChargeNum * level));
    } else if(gameMode() == ModeParty) {
        setLevelTime(baseTimeParty + (int)(timeIncrementParty * level));
        setRemainingPositiveCharges(baseChargeNumPositiveParty + (int)(incrementChargeNumParty * level));
        setRemainingNegativeCharges(baseChargeNumNegativeParty + (int)(incrementChargeNumParty * level));
        specialParticles()->clear();
        if(level == 14) {
            specialParticles()->append(Particle::ParticleTransfer);
        }
        setRemainingSpecialCharges(specialParticles()->count());
    } else {
        qWarning() << "Some unknown mode is set!";
    }

    // set text of remaining charges
    updateRemainingChargeText();

    // add player
    player = new Particle(this);
#ifndef BENCHMARK
    addItem(player);
#endif
    player->setCharge(playerCharge * (1 + levelChargeFactor * pow((double)level,2)));
    player->setParticleType(Particle::ParticlePlayer);
    if(gameMode() == ModeClassic && level == 1) {
        player->setPosition(QVector2D(gameRectF().width() * 0.9,gameRectF().height() * 0.9));
    } else {
        player->setPosition(QVector2D(gameRectF().width() / 2,gameRectF().height() / 2));
    }

    // add enemies
    addEnemies();

    // Notify everyone about the level change
    emit levelChanged(level);
}
Esempio n. 2
0
//NEED TO FIX:
//CONDITION WILL ALWAYS BE 1 IT CAUSE INFINITY LOOP
void meun(int playerChoose)
{
	int condition = 1;

		switch (playerChoose)
		{
		case 1:
			condition = gameMode();
			//start game
			break;
		case 2:
			//open record mode
			condition = leaderboardMode();
			break;
		case 3:
			//option
			condition = optionMode();
			break;
		case 4:
			//exit program
			condition = exitMode();
			break;
		default:
			condition = 1;
			break;
		}
}
Esempio n. 3
0
void GameScene::advance() {
    if(gameState() == GameRunning) {
        currentTime = time.elapsed();
        if(firstStep) {
            m_dt = 0;
            firstStep = false;
        } else {
            m_dt = timeFactor() * (currentTime - lastFrameTime) / 1000.0;
        }
        if(m_dt > 0.01) {
            m_dt = 0.01;
        }

        if(gameMode() == ModeParty) {
            checkAddSpecialParticle();
        }
#ifdef BENCHMARK
        dtSum += realDt;
        if(frameNumber == 99) {
            qDebug() << "FPS: " << frameNumber / dtSum;
            dtSum = 0;
            frameNumber = 0;
        }
        frameNumber++;
#endif
        QGraphicsScene::advance();
        lastFrameTime = currentTime;
    }
}
Esempio n. 4
0
void GameScene::updateLevelTime() {
    setLevelTime(levelTime() - 1);
    if(levelTime() < 1) {
        setLevelUpgrade(true);
        setGameState(GamePaused);
        setLevel(m_level + 1);
        if(highestLevel() < level()) {
            setHighestLevel(level());
        }
        if(gameMode() == GameScene::ModeClassic) {
            if(settings.value("highestLevel", 1).toInt() < level()) {
                settings.setValue("highestLevel", level());
            }
        } else {
            if(settings.value("highestLevelParty", 1).toInt() < level()) {
                settings.setValue("highestLevelParty", level());
            }
        }
#ifdef OS_IS_ANDROID
        qDebug() << "Force syncing settings";
        settings.sync();
#endif
    }
}
Esempio n. 5
0
void GameScene::addEnemies() {
    /*
     Available regions. The player starts in the center, and all the "touching" regions are not allowed for enemies. Only the edges are available to the enemies.
     _____________
     |1 |11|7 |3 |
     |5_|__|__|9_|
     |10|__|__|2_|
     |4_|8_|12|6_|

     */
    int areaNumber = 1;
    int numberOfEnemies = 1;
    qreal enemyChargeLevel = enemyCharge * (1 + levelChargeFactor * pow((double)level(),2));
    if(gameMode() == ModeClassic) {
        numberOfEnemies = level();
    } else if(gameMode() == ModeParty) {
        numberOfEnemies = 3 + level();
    }
    for(int i=0; i<numberOfEnemies; i++) { // 1 new enemy per level
        Particle *enemy = new Particle(this);
        addItem(enemy);
        // should the particle spawn at the topleft, topright, bottomleft or bottomright?
        int left = 0;
        int top = 0;
        switch(areaNumber) {
        case 1:
            left = 0;
            top = 0;
            break;
        case 2:
            left = 3;
            top = 2;
            break;
        case 3:
            left = 3;
            top = 0;
            break;
        case 4:
            left = 0;
            top = 3;
            break;
        case 5:
            left = 0;
            top = 1;
            break;
        case 6:
            left = 3;
            top = 3;
            break;
        case 7:
            left = 2;
            top = 0;
            break;
        case 8:
            left = 1;
            top = 3;
            break;
        case 9:
            left = 3;
            top = 1;
            break;
        case 10:
            left = 0;
            top = 2;
            break;
        case 11:
            left = 1;
            top = 0;
            break;
        case 12:
            left = 2;
            top = 3;
            break;
        }

        // make sure that no enemies spawn in the middle region (close to the player)
        QRectF spawnRect(gameRectF().left() + gameRectF().width()/4.0 * left,
                         gameRectF().top() + gameRectF().height()/4.0 * top,
                         gameRectF().width()/4.0,
                         gameRectF().height()/4.0);
        // now, let's find a random position within this region
        qreal xrand = (qreal)qrand()/(qreal)RAND_MAX;
        qreal yrand = (qreal)qrand()/(qreal)RAND_MAX;
        enemy->setPosition(QVector2D(spawnRect.left() + xrand*spawnRect.width(), spawnRect.top() + yrand*spawnRect.height()));
        enemy->setParticleType(Particle::ParticleEnemy);
        if(gameMode() == ModeClassic) {
            if(level() < 7) {
                enemy->setSticky(true);
            } else if(level() < 15) {
                enemy->setElectroSticky(true);
            }
        } else {
            enemy->setSticky(false);
            enemy->setElectroSticky(false);
        }
        enemy->setMass(26.0);
        enemy->setCharge(enemyChargeLevel);
        areaNumber++;
        if(areaNumber > 12) {
            areaNumber = 1;
        }
    }
}