void GameManager::idle(){ _positionBefore = _frog->getPosition(); _tact = glutGet(GLUT_ELAPSED_TIME); _delta = _tact - _tant; update(_delta); _tant = _tact; testCollisions(_positionBefore); timeLess(); if(!_key_pressed) { giveSpeedTimberlog(); } }
ExplosionEntity::ExplosionEntity(float x, float y, int damage) : SpriteEntity(ImageManager::getInstance().getImage(IMAGE_EXPLOSION64), x, y, 100, 100) { type = ENTITY_EXPLOSION; frame = 0; imagesProLine = 14; lifetime = 1.0f; spin = 900.0f; this->damage = damage; sprite.setOrigin(50, 50); testCollisions(); }
//////////////////////////////////////////////////////////// /// Entry point of application /// /// \return Application exit code /// //////////////////////////////////////////////////////////// int main() { srand((unsigned)time(0)); bool spaceIsPressed = false; bool finishedEnteringName = false; bool savedToFile = false; sf::Clock clock; float currentTime, deathTime = 0.0f; sf::String whatever; whatever.SetPosition(300, 300); sf::String youMadeIt("You made it to the high score list! Enter your name:"); youMadeIt.SetPosition(300, 275); std::string inputString; initHighScores(highScoreList); sf::String highScoreString(convertScoresToString(highScoreList)); bool gameOver = false; sf::Music backgroundMusic; if ( !backgroundMusic.OpenFromFile("Music/02 - Salt In The Wounds.ogg")) return -9; backgroundMusic.Play(); // Create the main rendering window sf::RenderWindow App(sf::VideoMode(1280, 720, 32), "Space Invaders!"); App.UseVerticalSync(true); // Load the sprite image from a file sf::Image PlayerImage; if (!PlayerImage.LoadFromFile("Images/player.psd")) return EXIT_FAILURE; sf::Sprite Player(PlayerImage); Player.SetPosition(200.f, 100.f); Player.SetCenter(32.f, 32.f); sf::Image BackgroundImage; if ( !BackgroundImage.LoadFromFile("Images/space.psd")) return -1; sf::Sprite Background(BackgroundImage); std::vector<sf::Sprite> missiles; sf::Image MissileImage; if ( !MissileImage.LoadFromFile("Images/Missle.psd")) return -1; std::vector<Enemy> enemies; if ( !EnemyImage.LoadFromFile("Images/Bad Guy!.psd")) return -2; createWave(enemies); std::vector<sf::Sprite> enemyMissiles; if ( !EnemyMissileSprite.LoadFromFile("Images/BadGuyMissile.psd") ) return -3; sf::String help("Use WASD to move and change your direction.\nUse the arrow keys to move without changing your direction.\nPress space to fire."); help.SetSize(16.0f); help.SetColor(sf::Color::Red); help.SetPosition(848, 0); // Start game loop while (App.IsOpened()) { // Process events sf::Event Event; while (App.GetEvent(Event)) { // Close window : exit if (Event.Type == sf::Event::Closed) App.Close(); if (Event.Key.Code == sf::Key::F1) { sf::Image Screen = App.Capture(); Screen.SaveToFile("screenshot.png"); } if ( gameOver && score > getLastScore(highScoreList)) { if (Event.Type == sf::Event::TextEntered) { char c = Event.Text.Unicode; if (c == 8)//8 is backspace { if (inputString.size() > 0)//check that there is something to delete { inputString.erase(inputString.end() - 1);//delete the last character } } else if (c < 128 && c > 31)//pretty much anything you want should be between 31 and 128 { inputString.push_back(c); } } whatever.SetText(inputString); } } // Get elapsed time float ElapsedTime = App.GetFrameTime(); currentTime = clock.GetElapsedTime(); if ( !gameOver ) { // Move the sprite if ((App.GetInput().IsKeyDown(sf::Key::A) || App.GetInput().IsKeyDown(sf::Key::Left)) && Player.GetPosition().x > 32) { Player.Move(-250 * ElapsedTime, 0); } if ((App.GetInput().IsKeyDown(sf::Key::D) || App.GetInput().IsKeyDown(sf::Key::Right)) && Player.GetPosition().x < 300) { Player.Move( 250 * ElapsedTime, 0); } if ((App.GetInput().IsKeyDown(sf::Key::W) || App.GetInput().IsKeyDown(sf::Key::Up)) && Player.GetPosition().y > 32) { Player.Move(0, -250 * ElapsedTime); } if ((App.GetInput().IsKeyDown(sf::Key::S) || App.GetInput().IsKeyDown(sf::Key::Down)) && Player.GetPosition().y < 688) { Player.Move(0, 250 * ElapsedTime); } //rotate the sprite if (App.GetInput().IsKeyDown(sf::Key::A)) { Player.SetRotation(180); } if (App.GetInput().IsKeyDown(sf::Key::D) ) { Player.SetRotation(0); } if (App.GetInput().IsKeyDown(sf::Key::W) ) { Player.SetRotation(90); } if (App.GetInput().IsKeyDown(sf::Key::S) ) { Player.SetRotation(270); } if ( !App.GetInput().IsKeyDown(sf::Key::Space) ) { spaceIsPressed = false; } if ( App.GetInput().IsKeyDown(sf::Key::Space) && !spaceIsPressed) { sf::Sprite Missile(MissileImage); Missile.SetPosition(Player.GetPosition()); Missile.SetRotation(Player.GetRotation()); missiles.push_back(Missile); spaceIsPressed = true; } makeEnemiesShoot(enemies, enemyMissiles); moveMissiles(missiles, ElapsedTime); moveEnemyMissiles(enemyMissiles, ElapsedTime); checkMissiles(missiles); checkMissiles(enemyMissiles); if ( !enemiesInPlace ) moveEnemiesIn(enemies, ElapsedTime); testCollisions(enemies, missiles); if ( checkCollisions(Player, enemyMissiles) ) { // Player has been hit! Clear the screen of missiles, reset his position, and decrease the lives lives--; enemyMissiles.clear(); Player.SetPosition(200.0f, 32.0f); deathTime = clock.GetElapsedTime(); if ( lives < 0 ) gameOver = true; } if ( getAliveEnemies(enemies) == 0 ) createWave(enemies); } else { if ( App.GetInput().IsKeyDown(sf::Key::Escape) ) App.Close(); if ( App.GetInput().IsKeyDown(sf::Key::Return)) finishedEnteringName = true; } std::string sStats; std::stringstream out; out<< "Lives: "; if ( lives < 0) out<< "Dead"; else out<< lives; out << " Score: " << score; sStats = out.str(); sf::String StringStats(sStats); StringStats.SetPosition(10,680); // Clear screen App.Clear(); // Display sprite in our window App.Draw(Background); for ( unsigned int i = 0; i < missiles.size(); i++ ) App.Draw(missiles.at(i)); if ( !gameOver ) App.Draw(Player); for ( unsigned int i = 0; i < enemies.size(); i++) if ( enemies.at(i).isAlive() ) App.Draw(enemies.at(i).getSprite()); for ( unsigned int i = 0; i < enemyMissiles.size(); i++ ) App.Draw(enemyMissiles.at(i)); App.Draw(StringStats); App.Draw(help); if ( currentTime - deathTime < 1.0f && clock.GetElapsedTime() > 1.0f) { sf::String deathInfo("You've been killed!"); deathInfo.SetPosition(360, 0); App.Draw(deathInfo); } if ( gameOver ) { sf::String gameOverString("Game Over! You lose! Press Esc to quit."); std::string scoreMsg; if ( score == 0 ) scoreMsg = "Wow you suck"; else if ( score < 750 ) { scoreMsg = "You're getting there! Better luck next time."; } else { scoreMsg = "You died, but you died after killing a lot of people. Good job!"; } sf::String ScoreMsg(scoreMsg); gameOverString.SetPosition(350, 600); ScoreMsg.SetPosition(350, 625); App.Draw(gameOverString); App.Draw(ScoreMsg); App.Draw(highScoreString); if ( score > getLastScore(highScoreList) && !finishedEnteringName ) { App.Draw(youMadeIt); App.Draw(whatever); } if ( finishedEnteringName && !savedToFile) { if ( score > getLastScore(highScoreList)) { for ( unsigned int i = 0; i < highScoreList.size(); i++ ) { Score temp = highScoreList.at(i); if ( score > temp.Getscore()) { //add the new score before this one Score newScore(inputString, score); highScoreList.insert(highScoreList.begin()+i, newScore); highScoreList.erase(highScoreList.end()-1); break; } } saveScoresToFile(highScoreList); highScoreString.SetText(convertScoresToString(highScoreList)); savedToFile = true; } } } // Display window contents on screen App.Display(); } return EXIT_SUCCESS; }