void QtTDContext::resetMap() { removeAllEnemies(); clearTowers(); setCredits(creditsStart); setInterest(interestStart, interestIncrease); resetLives(livesStart); resetBonus(); resetScore(); resetWaves(); gameTime = 0; //mainApp.resetMap(); }
// Initializes everything and then starts the game by setting the gameSuspend void GameScene::startGame(void) { CCLog("startGame"); score = 0; resetClouds(); resetPlatforms(); resetBird(); resetBonus(); gameSuspended = false; }
void GameScene::step(float dt) { // CCLog("Game::step"); // Return if game suspended if(gameSuspended) return; // Get the bird sprite CCSprite *bird = (CCSprite*)getChildByTag(kBird); // Update the player x position based on velocity and delta time bird_pos.x += bird_vel.x * dt; // Flip the player based on it's x velocity and current looking direction if(bird_vel.x < -30.0f && birdLookingRight) { birdLookingRight = false; bird->setScaleX(-1.0f); } else if (bird_vel.x > 30.0f && !birdLookingRight) { birdLookingRight = true; bird->setScaleX(1.0f); } // Calculate the max and min x values for the bird // based on the screen and bird widths CCSize bird_size = bird->getContentSize(); float max_x = (float)CCDirector::sharedDirector()->getWinSize().width - bird_size.width/2; float min_x = bird_size.width/2; // Limit the bird position based on max and min values allowed if(bird_pos.x>max_x) bird_pos.x = max_x; if(bird_pos.x<min_x) bird_pos.x = min_x; // Update the bird velocity based on acceleration and time bird_vel.y += bird_acc.y * dt; // Update the bird y positin based on velocity and time bird_pos.y += bird_vel.y * dt; //////////////////////////////////////////////////////////////////////////// // Handle the bonus scoring CCSprite *bonus = (CCSprite*)getChildByTag(kBonusStartTag+currentBonusType); // If bonus is visible then see if the bird is within range to get the bonus if(bonus->isVisible() ) { CCPoint bonus_pos = bonus->getPosition(); float range = 20.0f; // If the player is within range of the bonus value then award the prize if(bird_pos.x > bonus_pos.x - range && bird_pos.x < bonus_pos.x + range && bird_pos.y > bonus_pos.y - range && bird_pos.y < bonus_pos.y + range ) { // Update score based on bonus switch(currentBonusType) { case kBonus5: score += 5000; break; case kBonus10: score += 10000; break; case kBonus50: score += 50000; break; case kBonus100: score += 100000; break; } // Build the score string to display char scoreStr[10] = {0}; sprintf(scoreStr, "%d", score); CCLabelBMFont* scoreLabel = (CCLabelBMFont*) getChildByTag(kScoreLabel); scoreLabel->setString(scoreStr); // Highlight the score with some actions to celebrate the bonus win CCActionInterval* a1 = CCScaleTo::create(0.2f, 1.5f, 0.8f); CCActionInterval* a2 = CCScaleTo::create(0.2f, 1.0f, 1.0f); scoreLabel->runAction(CCSequence::create(a1, a2, a1, a2, a1, a2, NULL)); // Reset the bonus to another platform resetBonus(); } } // If the bird has stopped moving then make it jump from the platform it is on int t; if(bird_vel.y < 0) { t = kPlatformsStartTag; // Search through all the platforms and compare the birds position with the platfor position for(t; t < kPlatformsStartTag + kNumPlatforms; t++) { CCSprite *platform = (CCSprite*)getChildByTag(t); CCSize platform_size = platform->getContentSize(); CCPoint platform_pos = platform->getPosition(); max_x = platform_pos.x - platform_size.width/2 - 10; min_x = platform_pos.x + platform_size.width/2 + 10; float min_y = platform_pos.y + (platform_size.height+bird_size.height)/2 - kPlatformTopPadding; if(bird_pos.x > max_x && bird_pos.x < min_x && bird_pos.y > platform_pos.y && bird_pos.y < min_y) { jump(); break; // Can only jump from one platform at a time to break out of the loop } } // If the bird has fallen below the screen then game over if(bird_pos.y < - bird_size.height/2) { // [self showHighscores]; <== NEED TO IMPLEMENT THE HIGHTSCORE resetBird(); // Highscore not implmented yet so just keep on going. } } else if ( bird_pos.y > ((float)CCDirector::sharedDirector()->getWinSize().height / 2)) { // If bird position is greater than the middle of the screen then move the platforms // the difference between the bird y position and middle point of the screen float delta = bird_pos.y - ((float)CCDirector::sharedDirector()->getWinSize().height / 2); // Set the bird y position to the middle of the screen bird_pos.y = (float)CCDirector::sharedDirector()->getWinSize().height / 2; // Move the current platform y by the delta amount currentPlatformY -= delta; // Move the clouds vertically and reset if necessary t = kCloudsStartTag; for (t; t < kCloudsStartTag + kNumClouds; t++) { CCSprite *cloud = (CCSprite*) getChildByTag(t); CCPoint pos = cloud->getPosition(); // Calculate new position for cloud pos.y -= delta * cloud->getScaleY() * 0.8f; // If the cloud is off the screen then need to reset this cloud else set its new position if (pos.y < -cloud->getContentSize().height/2) { currentCloudTag = t; resetCloud(); } else { // Update the new y position for the cloud. cloud->setPosition(pos); } } // Move the platforms vertically and reset if necessary t = kPlatformsStartTag; for (t; t < kPlatformsStartTag + kNumPlatforms; t++) { CCSprite *platform = (CCSprite*)getChildByTag(t); CCPoint pos = platform->getPosition(); // Calculate new position for platform pos = ccp(pos.x, pos.y - delta); // If the platform is off the screen then reset the platform else set its new position if(pos.y < - platform->getContentSize().height/2) { currentPlatformTag = t; resetPlatform(); } else { platform->setPosition(pos); } } // If the bonus is visible then adjust it's y position if(bonus->isVisible()) { CCPoint pos = bonus->getPosition(); // Calculate new position of bonus pos.y -= delta; // If the bonus is off the screen then reset the bonus else set its new position if(pos.y < -bonus->getContentSize().height/2 ) { resetBonus(); } else { bonus->setPosition(pos); } } // Update score based on how much the bird has moved score += (int)delta; // Display the new score value char scoreStr[10] = {0}; sprintf(scoreStr, "%d", score); CCLabelBMFont* scoreLabel = (CCLabelBMFont*) getChildByTag(kScoreLabel); scoreLabel->setString(scoreStr); } // Set the birds position bird->setPosition(bird_pos); }