Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- YOUR FUTURE IS CREATED BY WHAT YOU DO TODAY NOT TOMORROW!
- */
- #include <SFML/Graphics.hpp>
- #include <SFML/Audio.hpp>
- #include <fstream>
- #include <string>
- #include <cctype>
- #include <vector>
- #include <sstream>
- #include <cmath>
- std::vector<std::vector<sf::Vector2i>> map;
- std::vector<std::vector<int>> colmap;
- sf::Texture tileTexture;
- sf::Sprite tiles;
- class Player
- {
- public:
- sf::RectangleShape rect;
- float bottom, left, right, top;
- Player(sf::Vector2f position, sf::Vector2f size, sf::Color color)
- {
- rect.setPosition(position);
- rect.setSize(size);
- rect.setFillColor(color);
- }
- /*
- //collision for circles - distance based collision
- bool collision(Player p)
- {
- if(sqrt(pow(circle.getPosition().x - p.circle.getPosition().x, 2)
- + pow(circle.getPosition().y - p.circle.getPosition().y ,2)) >=
- circle.getRadius() + p.circle.getRadius())
- {
- return false;
- }
- return true;
- }*/
- void Update()
- {
- bottom = rect.getPosition().y + rect.getSize().y;
- left = rect.getPosition().x;
- right = rect.getPosition().x + rect.getSize().x;
- top = rect.getPosition().y;
- }
- };
- void LoadMap (const char *filename)
- {
- //loading maps
- std::ifstream mapfile(filename);
- std::vector<sf::Vector2i> tempMap;
- map.clear();
- if(mapfile.is_open())
- {
- std::string tileLocation;
- mapfile >> tileLocation;
- tileTexture.loadFromFile(tileLocation);
- tiles.setTexture(tileTexture);
- while(!mapfile.eof())
- {
- std::string str, value;
- std::getline(mapfile, str);
- std::stringstream stream(str);
- while(std::getline(stream, value, ' '))
- {
- if(value.length() > 0)
- {
- std::string xx = value.substr(0, value.find(',')).c_str();
- std::string yy = value.substr(value.find(',') + 1).c_str();
- unsigned int x, y, i, j;
- for(i = 0; i < xx.length(); i++)
- {
- if(!isdigit(xx[i]))
- break;
- }
- for(j = 0; j < yy.length(); j++)
- {
- if(!isdigit(yy[j]))
- break;
- }
- x = (i == xx.length()) ? atoi(xx.c_str()) : -1;
- y = (j == yy.length()) ? atoi(yy.c_str()) : -1;
- tempMap.push_back(sf::Vector2i(x, y));
- }
- }
- if(tempMap.size() > 0)
- {
- map.push_back(tempMap);
- tempMap.clear();
- }
- }
- }
- //////////////
- }
- void LoadColMap(const char*filename)
- {
- std::ifstream openfile(filename);
- std::vector<int> tempMap;
- colmap.clear();
- if(openfile.is_open())
- {
- while(!openfile.eof())
- {
- std::string str, value;
- std::getline(openfile, str);
- std::stringstream stream(str);
- while(std::getline(stream, value, ' '))
- {
- if(value.length() > 0)
- {
- int a = atoi(value.c_str());
- tempMap.push_back(a);
- }
- }
- colmap.push_back(tempMap);
- tempMap.clear();
- }
- }
- }
- struct GUI
- {
- //play
- sf::Texture play_button_tex;
- sf::Sprite play_button_spr;
- sf::Texture play_button_mover_tex;
- sf::Sprite play_button_mover_spr;
- //options
- sf::Texture options_button_tex;
- sf::Sprite options_button_spr;
- sf::Texture options_button_mover_tex;
- sf::Sprite options_button_mover_spr;
- sf::Texture options_menu_tex;
- sf::Sprite options_menu_spr;
- sf::Texture opt_stopmusic_tex;
- sf::Sprite opt_stopmusic_spr;
- sf::Texture opt_stopmusic_mover_tex;
- sf::Sprite opt_stopmusic_mover_spr;
- sf::Texture opt_fullscreen_tex;
- sf::Sprite opt_fullscreen_spr;
- sf::Texture opt_fullscreen_mover_tex;
- sf::Sprite opt_fullscreen_mover_spr;
- //back
- sf::Texture back_button_tex;
- sf::Sprite back_button_spr;
- sf::Texture back_button_mover_tex;
- sf::Sprite back_button_mover_spr;
- //exit
- sf::Texture exit_button_tex;
- sf::Sprite exit_button_spr;
- sf::Texture exit_button_mover_tex;
- sf::Sprite exit_button_mover_spr;
- }gui;
- struct Game
- {
- bool started;
- bool options_menu;
- bool fullscreen;
- bool mute;
- sf::Texture menutex;
- sf::Sprite menuspr;
- sf::SoundBuffer click_sndBuffer;
- sf::Sound click_snd;
- sf::Music menu_music;
- }game;
- int main()
- {
- Player player(sf::Vector2f(10, 10), sf::Vector2f(20, 20), sf::Color::Blue);
- sf::Vector2i screenDimensions(800,600);
- game.started=false;
- game.options_menu=false;
- game.fullscreen=false;
- sf::RenderWindow window(sf::VideoMode(screenDimensions.x, screenDimensions.y), "Be Steady!",sf::Style::Close);
- //LOADING FILES
- //maps
- LoadMap("Data/Maps/map1.txt");
- LoadColMap("Data/Maps/collision_map1.txt");
- //bg
- game.menutex.loadFromFile("Data/Images/menubg.png");
- game.menuspr.setTexture(game.menutex);
- //sounds & music
- game.click_sndBuffer.loadFromFile("Data/Music/click.wav");
- game.click_snd.setBuffer(game.click_sndBuffer);
- game.menu_music.openFromFile("Data/Music/UrbanStar-Lost.ogg");
- game.menu_music.play();
- game.menu_music.setLoop(true);
- game.menu_music.setVolume(100);
- //play button
- gui.play_button_tex.loadFromFile("Data/Images/play.png");
- gui.play_button_spr.setTexture(gui.play_button_tex);
- gui.play_button_spr.setPosition(310,280);
- gui.play_button_mover_tex.loadFromFile("Data/Images/play_mover.png");
- gui.play_button_mover_spr.setTexture(gui.play_button_mover_tex);
- gui.play_button_mover_spr.setPosition(310,280);
- //options button and menu
- gui.options_button_tex.loadFromFile("Data/Images/options.png");
- gui.options_button_spr.setTexture(gui.options_button_tex);
- gui.options_button_spr.setPosition(250,365);
- gui.options_button_mover_tex.loadFromFile("Data/Images/options_mover.png");
- gui.options_button_mover_spr.setTexture(gui.options_button_mover_tex);
- gui.options_button_mover_spr.setPosition(250,365);
- gui.options_menu_tex.loadFromFile("Data/Images/options_menu.png");
- gui.options_menu_spr.setTexture(gui.options_menu_tex);
- gui.opt_stopmusic_tex.loadFromFile("Data/Images/stop_music.png");
- gui.opt_stopmusic_spr.setTexture(gui.opt_stopmusic_tex);
- gui.opt_stopmusic_spr.setPosition(100, 420);
- gui.opt_stopmusic_mover_tex.loadFromFile("Data/Images/stop_music_mover.png");
- gui.opt_stopmusic_mover_spr.setTexture(gui.opt_stopmusic_mover_tex);
- gui.opt_stopmusic_mover_spr.setPosition(100, 420);///////
- gui.opt_fullscreen_tex.loadFromFile("Data/Images/fullscreen.png");
- gui.opt_fullscreen_spr.setTexture(gui.opt_fullscreen_tex);
- gui.opt_fullscreen_spr.setPosition(500,420);
- gui.opt_fullscreen_mover_tex.loadFromFile("Data/Images/fullscreen_mover.png");
- gui.opt_fullscreen_mover_spr.setTexture(gui.opt_fullscreen_mover_tex);
- gui.opt_fullscreen_mover_spr.setPosition(500,420);//////
- //back button
- gui.back_button_tex.loadFromFile("Data/Images/back.png");
- gui.back_button_spr.setTexture(gui.back_button_tex);
- gui.back_button_spr.setPosition(690,550);
- gui.back_button_mover_tex.loadFromFile("Data/Images/back_mover.png");
- gui.back_button_mover_spr.setTexture(gui.back_button_mover_tex);
- gui.back_button_mover_spr.setPosition(690,550);
- //exit button
- gui.exit_button_tex.loadFromFile("Data/Images/exit.png");
- gui.exit_button_spr.setTexture(gui.exit_button_tex);
- gui.exit_button_spr.setPosition(310,450);
- gui.exit_button_mover_tex.loadFromFile("Data/Images/exit_mover.png");
- gui.exit_button_mover_spr.setTexture(gui.exit_button_mover_tex);
- gui.exit_button_mover_spr.setPosition(310,450);
- /////////////
- //game loop
- while (window.isOpen())
- {
- sf::Event Event;
- sf::Vector2i mousePosition = sf::Mouse::getPosition(window);//mouse position
- while (window.pollEvent(Event))
- {
- switch(Event.type)
- {
- case sf::Event::Closed:
- window.close();
- break;
- }
- }
- if(true) LoadMap("Data/Maps/map1.txt"); //loading map in real time
- // If game doesnt started
- if(!game.started)
- {
- //SHOWING MAIN MENU
- window.clear();
- window.setMouseCursorVisible(true);
- if(!game.options_menu)
- {
- window.draw(game.menuspr);
- //PLAY
- if(mousePosition.x > 310 && mousePosition.x < 477 && mousePosition.y > 280 && mousePosition.y < 342)
- {
- if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
- game.started = true,game.click_snd.play();
- window.draw(gui.play_button_mover_spr);
- }
- else
- window.draw(gui.play_button_spr);//x=310, y=280
- //OPTIONS
- if(mousePosition.x > 250 && mousePosition.x < 534 && mousePosition.y > 365 && mousePosition.y < 426)
- {
- if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
- game.options_menu = true,game.click_snd.play();
- window.draw(gui.options_button_mover_spr);
- }
- else
- window.draw(gui.options_button_spr);//x=250, y=365
- //EXIT
- if(mousePosition.x > 310 && mousePosition.x < 464 && mousePosition.y > 450 && mousePosition.y < 511)
- {
- if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
- window.close();
- window.draw(gui.exit_button_mover_spr);
- }
- else
- window.draw(gui.exit_button_spr);//x=310, y=450
- }
- else
- {
- //OPTIONS MENU
- window.draw(gui.options_menu_spr);
- //Mute button
- if(mousePosition.x > 100 && mousePosition.x < 292 && mousePosition.y > 420 && mousePosition.y < 464)
- {
- if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
- {
- if(game.click_snd.getVolume() > 0)
- {
- game.click_snd.setVolume(0);
- game.menu_music.stop();
- }
- else if(game.click_snd.getVolume() == 0)
- {
- game.menu_music.play();
- game.click_snd.setVolume(100);
- }
- }
- window.draw(gui.opt_stopmusic_mover_spr);
- }
- else
- window.draw(gui.opt_stopmusic_spr);
- //Full screen button
- if(mousePosition.x > 500 && mousePosition.x < 692 && mousePosition.y > 420 && mousePosition.y < 464)
- {
- if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
- {
- game.click_snd.play();
- if (game.fullscreen == false)
- {
- window.create(sf::VideoMode(screenDimensions.x, screenDimensions.y), "Be Steady!", sf::Style::Fullscreen);
- game.fullscreen = true;
- }
- else
- {
- window.create(sf::VideoMode(screenDimensions.x, screenDimensions.y), "Be Steady!", !sf::Style::Resize | sf::Style::Close);
- game.fullscreen = false;
- }
- }
- window.draw(gui.opt_fullscreen_mover_spr);
- }
- else
- window.draw(gui.opt_fullscreen_spr);
- //Back button
- if(mousePosition.x > 690 && mousePosition.x < 796 && mousePosition.y > 550 && mousePosition.y < 595)
- {
- window.draw(gui.back_button_mover_spr);
- if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
- game.options_menu = false,game.click_snd.play();
- }
- else
- window.draw(gui.back_button_spr);
- }
- }
- ////////
- //If game started
- if(game.started)
- {
- //Game has started
- window.setMouseCursorVisible(false);
- //stop music and clear the screen
- window.clear();
- game.menu_music.stop();
- //exit the game, back to main menu
- //pause menu still in progress
- if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
- {
- game.started = false;
- game.menu_music.play();
- player.rect.setPosition(10,10);
- }
- player.Update();
- //setting player pos on mouse coords
- player.rect.setPosition(mousePosition.x, mousePosition.y);
- player.rect.setFillColor(sf::Color::Blue);
- //checking for collision with tile map
- for(unsigned int i = 0; i < colmap.size(); i++)
- {
- for(unsigned int j = 0; j < colmap[i].size(); j++)
- {
- if(colmap[i][j] == 1)
- {
- int bottom, top, left, right;
- bottom = i * 32 + 32;
- top = i * 32;
- right = j * 32 + 32;
- left = j * 32;
- if(player.right < left || player.left > right || player.top > bottom || player.bottom < top)
- {
- //here is no collision
- }
- else
- {
- //if collision make player red
- player.rect.setFillColor(sf::Color::Red);
- break;
- }
- }
- }
- }
- //drawing tilemap
- for(unsigned int i = 0; i < map.size(); i++)
- {
- for(unsigned int j = 0; j < map[i].size(); j++)
- {
- if(map[i][j].x != -1 && map[i][j].y != -1)
- {
- tiles.setPosition((float)j * 32, (float)i * 32);
- tiles.setTextureRect(sf::IntRect(map[i][j].x * 32, map[i][j].y * 32, 32, 32));
- window.draw(tiles);
- }
- }
- }
- ////
- window.draw(player.rect);
- }
- //
- window.display();
- }
- //bye bye
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement