int main(void)
{
    int done=0;
    srand(time(NULL));
    initXWindows();
    init_opengl();
    //declare game object
    Game game;

    game.numberDefenseMissiles=0;
    
    //JG
    game.nparticles=MAX_PARTICLES;
    game.numberDefenseMissiles=0;

    // JBC 5/19/16
    // added globally accesible defMissileSpeed so that we can 
    // change it dynamically
    game.defMissileSpeed = 10;

    initStruc(&game);
    //Structures sh;

    //Changed call for function prototype 5-17-16 -DT
    createEMissiles(&game, 0, 0);
    initRadar(&game);
    initUFO(&game);
    initHighScores(&game);
    //JR - Menu Object Shapes and Locations
    drawMenu(&game);
    drawSettings(&game);
    game.sounds.loadAudio();
    //start animation
    while (!done) {
        int state = gameState(&game);
        while (XPending(dpy)) {
            XEvent e;
            XNextEvent(dpy, &e);
            check_mouse(&e, &game);
            done = check_keys(&e, &game);
        }
        if (state == 1) {
            render_menu(&game);
        } else if (state == 2) {        	
    		drawSettings(&game);
            render_settings(&game);
        } else if (state == 3) {
            render_newgame(&game);
        } else if (state == 0 || state == 5) {
            if (lvlState(&game) < 0) {
                movement(&game);
                render(&game);
            } 
            if (lvlState(&game) == 1) {
                levelEnd(&game);
            }
        } else {
            render_gameover(&game);
        }
        glXSwapBuffers(dpy, win);
    }
    cleanupXWindows();
    return 0;
}
Пример #2
0
////////////////////////////////////////////////////////////
/// 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;
}