Advertisement
Guest User

SFML Be steady!

a guest
Feb 5th, 2014
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.38 KB | None | 0 0
  1. /*
  2. YOUR FUTURE IS CREATED BY WHAT YOU DO TODAY NOT TOMORROW!
  3. */
  4.  
  5. #include <SFML/Graphics.hpp>
  6. #include <SFML/Audio.hpp>
  7. #include <fstream>
  8. #include <string>
  9. #include <cctype>
  10. #include <vector>
  11. #include <sstream>
  12. #include <cmath>
  13.  
  14. std::vector<std::vector<sf::Vector2i>> map;
  15. std::vector<std::vector<int>> colmap;
  16. sf::Texture tileTexture;
  17. sf::Sprite tiles;
  18.  
  19. class Player
  20. {
  21. public:
  22.     sf::RectangleShape rect;
  23.     float bottom, left, right, top;
  24.  
  25.     Player(sf::Vector2f position, sf::Vector2f size, sf::Color color)
  26.     {
  27.         rect.setPosition(position);
  28.         rect.setSize(size);
  29.         rect.setFillColor(color);
  30.     }
  31.  
  32.     /*
  33.     //collision for circles - distance based collision
  34.     bool collision(Player p)
  35.     {
  36.         if(sqrt(pow(circle.getPosition().x - p.circle.getPosition().x, 2)
  37.             + pow(circle.getPosition().y - p.circle.getPosition().y ,2)) >=
  38.             circle.getRadius() + p.circle.getRadius())
  39.         {
  40.             return false;
  41.         }
  42.         return true;
  43.     }*/
  44.  
  45.     void Update()
  46.     {
  47.         bottom = rect.getPosition().y + rect.getSize().y;
  48.         left = rect.getPosition().x;
  49.         right = rect.getPosition().x + rect.getSize().x;
  50.         top = rect.getPosition().y;
  51.     }
  52. };
  53.  
  54. void LoadMap (const char *filename)
  55. {
  56.     //loading maps 
  57.     std::ifstream mapfile(filename);
  58.     std::vector<sf::Vector2i> tempMap;
  59.     map.clear();
  60.  
  61.     if(mapfile.is_open())
  62.     {
  63.         std::string tileLocation;
  64.         mapfile >> tileLocation;
  65.         tileTexture.loadFromFile(tileLocation);
  66.         tiles.setTexture(tileTexture);
  67.  
  68.         while(!mapfile.eof())
  69.         {
  70.             std::string str, value;
  71.             std::getline(mapfile, str);
  72.             std::stringstream stream(str);
  73.  
  74.             while(std::getline(stream, value, ' '))
  75.             {
  76.                 if(value.length() > 0)
  77.                 {
  78.                     std::string xx = value.substr(0, value.find(',')).c_str();
  79.                     std::string yy = value.substr(value.find(',') + 1).c_str();
  80.  
  81.                     unsigned int x, y, i, j;
  82.  
  83.                     for(i = 0; i < xx.length(); i++)
  84.                     {
  85.                         if(!isdigit(xx[i]))
  86.                             break;
  87.                     }
  88.                     for(j = 0; j < yy.length(); j++)
  89.                     {
  90.                         if(!isdigit(yy[j]))
  91.                             break;
  92.                     }
  93.  
  94.                     x = (i == xx.length()) ? atoi(xx.c_str()) : -1;
  95.                     y = (j == yy.length()) ? atoi(yy.c_str()) : -1;
  96.  
  97.                     tempMap.push_back(sf::Vector2i(x, y));
  98.                 }
  99.             }
  100.  
  101.             if(tempMap.size() > 0)
  102.             {
  103.                 map.push_back(tempMap);
  104.                 tempMap.clear();
  105.             }
  106.         }
  107.     }
  108.     //////////////
  109. }
  110.  
  111. void LoadColMap(const char*filename)
  112. {
  113.     std::ifstream openfile(filename);
  114.     std::vector<int> tempMap;
  115.     colmap.clear();
  116.  
  117.     if(openfile.is_open())
  118.     {
  119.         while(!openfile.eof())
  120.         {
  121.             std::string str, value;
  122.             std::getline(openfile, str);
  123.             std::stringstream stream(str);
  124.  
  125.             while(std::getline(stream, value, ' '))
  126.             {
  127.                 if(value.length() > 0)
  128.                 {
  129.                     int a = atoi(value.c_str());
  130.                     tempMap.push_back(a);
  131.                 }
  132.             }
  133.  
  134.             colmap.push_back(tempMap);
  135.             tempMap.clear();
  136.         }
  137.     }
  138. }
  139.  
  140. struct GUI
  141. {
  142.     //play
  143.     sf::Texture play_button_tex;
  144.     sf::Sprite play_button_spr;
  145.     sf::Texture play_button_mover_tex;
  146.     sf::Sprite play_button_mover_spr;
  147.     //options
  148.     sf::Texture options_button_tex;
  149.     sf::Sprite options_button_spr;
  150.     sf::Texture options_button_mover_tex;
  151.     sf::Sprite options_button_mover_spr;
  152.     sf::Texture options_menu_tex;
  153.     sf::Sprite options_menu_spr;
  154.    
  155.     sf::Texture opt_stopmusic_tex;
  156.     sf::Sprite opt_stopmusic_spr;
  157.     sf::Texture opt_stopmusic_mover_tex;
  158.     sf::Sprite opt_stopmusic_mover_spr;
  159.  
  160.     sf::Texture opt_fullscreen_tex;
  161.     sf::Sprite opt_fullscreen_spr;
  162.     sf::Texture opt_fullscreen_mover_tex;
  163.     sf::Sprite opt_fullscreen_mover_spr;
  164.     //back
  165.     sf::Texture back_button_tex;
  166.     sf::Sprite back_button_spr;
  167.     sf::Texture back_button_mover_tex;
  168.     sf::Sprite back_button_mover_spr;
  169.     //exit
  170.     sf::Texture exit_button_tex;
  171.     sf::Sprite exit_button_spr;
  172.     sf::Texture exit_button_mover_tex;
  173.     sf::Sprite exit_button_mover_spr;
  174. }gui;
  175.  
  176. struct Game
  177. {
  178.     bool started;
  179.     bool options_menu;
  180.     bool fullscreen;
  181.     bool mute;
  182.     sf::Texture menutex;
  183.     sf::Sprite menuspr;
  184.     sf::SoundBuffer click_sndBuffer;
  185.     sf::Sound click_snd;
  186.     sf::Music menu_music;
  187. }game;
  188.  
  189. int main()
  190. {
  191.     Player player(sf::Vector2f(10, 10), sf::Vector2f(20, 20), sf::Color::Blue);
  192.  
  193.     sf::Vector2i screenDimensions(800,600);
  194.     game.started=false;
  195.     game.options_menu=false;
  196.     game.fullscreen=false;
  197.  
  198.     sf::RenderWindow window(sf::VideoMode(screenDimensions.x, screenDimensions.y), "Be Steady!",sf::Style::Close);
  199.  
  200.     //LOADING FILES
  201.     //maps
  202.     LoadMap("Data/Maps/map1.txt");
  203.     LoadColMap("Data/Maps/collision_map1.txt");
  204.     //bg
  205.     game.menutex.loadFromFile("Data/Images/menubg.png");
  206.     game.menuspr.setTexture(game.menutex);
  207.     //sounds & music
  208.     game.click_sndBuffer.loadFromFile("Data/Music/click.wav");
  209.     game.click_snd.setBuffer(game.click_sndBuffer);
  210.     game.menu_music.openFromFile("Data/Music/UrbanStar-Lost.ogg");
  211.     game.menu_music.play();
  212.     game.menu_music.setLoop(true);
  213.     game.menu_music.setVolume(100);
  214.     //play button
  215.     gui.play_button_tex.loadFromFile("Data/Images/play.png");
  216.     gui.play_button_spr.setTexture(gui.play_button_tex);
  217.     gui.play_button_spr.setPosition(310,280);
  218.     gui.play_button_mover_tex.loadFromFile("Data/Images/play_mover.png");
  219.     gui.play_button_mover_spr.setTexture(gui.play_button_mover_tex);
  220.     gui.play_button_mover_spr.setPosition(310,280);
  221.     //options button and menu
  222.     gui.options_button_tex.loadFromFile("Data/Images/options.png");
  223.     gui.options_button_spr.setTexture(gui.options_button_tex);
  224.     gui.options_button_spr.setPosition(250,365);
  225.     gui.options_button_mover_tex.loadFromFile("Data/Images/options_mover.png");
  226.     gui.options_button_mover_spr.setTexture(gui.options_button_mover_tex);
  227.     gui.options_button_mover_spr.setPosition(250,365);
  228.     gui.options_menu_tex.loadFromFile("Data/Images/options_menu.png");
  229.     gui.options_menu_spr.setTexture(gui.options_menu_tex);
  230.     gui.opt_stopmusic_tex.loadFromFile("Data/Images/stop_music.png");
  231.     gui.opt_stopmusic_spr.setTexture(gui.opt_stopmusic_tex);
  232.     gui.opt_stopmusic_spr.setPosition(100, 420);
  233.     gui.opt_stopmusic_mover_tex.loadFromFile("Data/Images/stop_music_mover.png");
  234.     gui.opt_stopmusic_mover_spr.setTexture(gui.opt_stopmusic_mover_tex);
  235.     gui.opt_stopmusic_mover_spr.setPosition(100, 420);///////
  236.     gui.opt_fullscreen_tex.loadFromFile("Data/Images/fullscreen.png");
  237.     gui.opt_fullscreen_spr.setTexture(gui.opt_fullscreen_tex);
  238.     gui.opt_fullscreen_spr.setPosition(500,420);
  239.     gui.opt_fullscreen_mover_tex.loadFromFile("Data/Images/fullscreen_mover.png");
  240.     gui.opt_fullscreen_mover_spr.setTexture(gui.opt_fullscreen_mover_tex);
  241.     gui.opt_fullscreen_mover_spr.setPosition(500,420);//////
  242.     //back button
  243.     gui.back_button_tex.loadFromFile("Data/Images/back.png");
  244.     gui.back_button_spr.setTexture(gui.back_button_tex);
  245.     gui.back_button_spr.setPosition(690,550);
  246.     gui.back_button_mover_tex.loadFromFile("Data/Images/back_mover.png");
  247.     gui.back_button_mover_spr.setTexture(gui.back_button_mover_tex);
  248.     gui.back_button_mover_spr.setPosition(690,550);
  249.  
  250.     //exit button
  251.     gui.exit_button_tex.loadFromFile("Data/Images/exit.png");
  252.     gui.exit_button_spr.setTexture(gui.exit_button_tex);
  253.     gui.exit_button_spr.setPosition(310,450);
  254.     gui.exit_button_mover_tex.loadFromFile("Data/Images/exit_mover.png");
  255.     gui.exit_button_mover_spr.setTexture(gui.exit_button_mover_tex);
  256.     gui.exit_button_mover_spr.setPosition(310,450);
  257.     /////////////
  258.    
  259.     //game loop
  260.     while (window.isOpen())
  261.     {
  262.         sf::Event Event;
  263.        
  264.         sf::Vector2i mousePosition = sf::Mouse::getPosition(window);//mouse position
  265.  
  266.         while (window.pollEvent(Event))
  267.         {
  268.             switch(Event.type)
  269.             {
  270.             case sf::Event::Closed:
  271.                 window.close();
  272.                 break;
  273.             }
  274.         }
  275.         if(true) LoadMap("Data/Maps/map1.txt"); //loading map in real time
  276.  
  277.         // If game doesnt started
  278.         if(!game.started)
  279.         {
  280.             //SHOWING MAIN MENU
  281.             window.clear();
  282.             window.setMouseCursorVisible(true);
  283.             if(!game.options_menu)
  284.             {
  285.                 window.draw(game.menuspr);
  286.                 //PLAY
  287.                 if(mousePosition.x > 310 && mousePosition.x < 477 && mousePosition.y > 280 && mousePosition.y < 342)
  288.                 {
  289.                     if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
  290.                         game.started = true,game.click_snd.play();
  291.                     window.draw(gui.play_button_mover_spr);
  292.                 }
  293.                 else
  294.                     window.draw(gui.play_button_spr);//x=310, y=280
  295.  
  296.                 //OPTIONS
  297.                 if(mousePosition.x > 250 && mousePosition.x < 534 && mousePosition.y > 365 && mousePosition.y < 426)
  298.                 {
  299.                     if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
  300.                         game.options_menu = true,game.click_snd.play();
  301.                     window.draw(gui.options_button_mover_spr);
  302.                 }
  303.                 else
  304.                     window.draw(gui.options_button_spr);//x=250, y=365
  305.                
  306.                 //EXIT
  307.                 if(mousePosition.x > 310 && mousePosition.x < 464 && mousePosition.y > 450 && mousePosition.y < 511)
  308.                 {
  309.                     if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
  310.                         window.close();
  311.                     window.draw(gui.exit_button_mover_spr);
  312.                 }
  313.                 else
  314.                 window.draw(gui.exit_button_spr);//x=310, y=450
  315.             }
  316.             else
  317.             {
  318.                 //OPTIONS MENU
  319.                 window.draw(gui.options_menu_spr);
  320.  
  321.                 //Mute button
  322.                 if(mousePosition.x > 100 && mousePosition.x < 292 && mousePosition.y > 420 && mousePosition.y < 464)
  323.                 {
  324.                     if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
  325.                     {
  326.                         if(game.click_snd.getVolume() > 0)
  327.                         {
  328.                             game.click_snd.setVolume(0);
  329.                             game.menu_music.stop();
  330.                         }
  331.                         else if(game.click_snd.getVolume() == 0)
  332.                         {
  333.                             game.menu_music.play();
  334.                             game.click_snd.setVolume(100);
  335.                         }
  336.                     }
  337.                     window.draw(gui.opt_stopmusic_mover_spr);
  338.                 }
  339.                 else
  340.                     window.draw(gui.opt_stopmusic_spr);
  341.  
  342.                 //Full screen button
  343.                 if(mousePosition.x > 500 && mousePosition.x < 692 && mousePosition.y > 420 && mousePosition.y < 464)
  344.                 {
  345.                     if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
  346.                     {
  347.                         game.click_snd.play();
  348.                         if (game.fullscreen == false)
  349.                         {
  350.                             window.create(sf::VideoMode(screenDimensions.x, screenDimensions.y), "Be Steady!", sf::Style::Fullscreen);
  351.                             game.fullscreen = true;
  352.                         }
  353.                         else
  354.                         {
  355.                             window.create(sf::VideoMode(screenDimensions.x, screenDimensions.y), "Be Steady!", !sf::Style::Resize | sf::Style::Close);
  356.                             game.fullscreen = false;
  357.                         }
  358.                     }
  359.                     window.draw(gui.opt_fullscreen_mover_spr);
  360.                 }
  361.                 else
  362.                     window.draw(gui.opt_fullscreen_spr);
  363.  
  364.                 //Back button
  365.                 if(mousePosition.x > 690 && mousePosition.x < 796 && mousePosition.y > 550 && mousePosition.y < 595)
  366.                 {
  367.                     window.draw(gui.back_button_mover_spr);
  368.                     if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
  369.                         game.options_menu = false,game.click_snd.play();
  370.                 }
  371.                 else
  372.                     window.draw(gui.back_button_spr);
  373.             }
  374.         }
  375.         ////////
  376.  
  377.         //If game started
  378.         if(game.started)
  379.         {
  380.             //Game has started
  381.             window.setMouseCursorVisible(false);
  382.             //stop music and clear the screen
  383.             window.clear();
  384.             game.menu_music.stop();
  385.  
  386.             //exit the game, back to main menu
  387.             //pause menu still in progress
  388.             if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
  389.             {
  390.                 game.started = false;
  391.                 game.menu_music.play();
  392.                 player.rect.setPosition(10,10);
  393.             }
  394.  
  395.             player.Update();
  396.             //setting player pos on mouse coords
  397.             player.rect.setPosition(mousePosition.x, mousePosition.y);
  398.  
  399.             player.rect.setFillColor(sf::Color::Blue);
  400.            
  401.             //checking for collision with tile map
  402.             for(unsigned int i = 0; i < colmap.size(); i++)
  403.             {
  404.                 for(unsigned int j = 0; j < colmap[i].size(); j++)
  405.                 {
  406.                     if(colmap[i][j] == 1)
  407.                     {
  408.                         int bottom, top, left, right;
  409.                         bottom = i * 32 + 32;
  410.                         top = i * 32;
  411.                         right = j * 32 + 32;
  412.                         left = j * 32;
  413.  
  414.                         if(player.right < left || player.left > right || player.top > bottom || player.bottom < top)
  415.                         {
  416.                             //here is no collision
  417.                         }
  418.                         else
  419.                         {
  420.                             //if collision make player red
  421.                             player.rect.setFillColor(sf::Color::Red);
  422.                             break;
  423.                         }
  424.                     }
  425.                 }
  426.             }
  427.  
  428.             //drawing tilemap
  429.             for(unsigned int i = 0; i < map.size(); i++)
  430.             {
  431.                 for(unsigned int j = 0; j < map[i].size(); j++)
  432.                 {
  433.                     if(map[i][j].x != -1 && map[i][j].y != -1)
  434.                     {
  435.                         tiles.setPosition((float)j * 32, (float)i * 32);
  436.                         tiles.setTextureRect(sf::IntRect(map[i][j].x * 32, map[i][j].y * 32, 32, 32));
  437.                         window.draw(tiles);
  438.                     }
  439.                 }
  440.             }
  441.             ////
  442.             window.draw(player.rect);
  443.         }
  444.         //
  445.         window.display();
  446.     }
  447.  
  448.     //bye bye
  449.     return 0;
  450. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement