diff --git a/Project/End_flag.cc b/Project/End_flag.cc new file mode 100644 index 0000000000000000000000000000000000000000..46b686f677e4029a74656763e92308e2c56f75ec --- /dev/null +++ b/Project/End_flag.cc @@ -0,0 +1,23 @@ +#include "End_flag.h" + +End_flag::End_flag(float width, float height, float x_pos, float y_pos) +:flag_pos{x_pos, y_pos}, flag_size{width, height}, flag{flag_size}, otype{"endflag"} +{ + flag.setFillColor(sf::Color::Yellow); +} + +std::string End_flag::get_otype() const +{ + return otype; +} + +sf::RectangleShape End_flag::get_shape() const +{ + return flag; +} + +void End_flag::update(sf::RenderWindow & window) +{ + flag.setPosition(flag_pos); + window.draw(flag); +} diff --git a/Project/End_flag.h b/Project/End_flag.h new file mode 100644 index 0000000000000000000000000000000000000000..adc4cd4f8e107d8285b0ed80ff9c68ca6313228d --- /dev/null +++ b/Project/End_flag.h @@ -0,0 +1,23 @@ +#ifndef END_FLAG_H +#define END_FLAG_H +#include <SFML/Graphics.hpp> + +#include <string> + +class End_flag +{ +public: + End_flag(float x_pos, float y_pos, float widht, float height); + + std::string get_otype() const; + sf::RectangleShape get_shape() const; + void update(sf::RenderWindow & window); + +private: + sf::Vector2f flag_pos{}; + sf::Vector2f flag_size{}; + sf::RectangleShape flag{}; + std::string otype{}; +}; + +#endif diff --git a/Project/End_flag.o b/Project/End_flag.o new file mode 100644 index 0000000000000000000000000000000000000000..6bb0d34fa9c93db564ecf7f5cd8cb8c09b7c7322 Binary files /dev/null and b/Project/End_flag.o differ diff --git a/Project/Makefile b/Project/Makefile index a277acb27c9ed81ec405174dfd3d47090d652121..1944c6cffd2627828b3a4c72e3b4f3c6f774bf3c 100644 --- a/Project/Makefile +++ b/Project/Makefile @@ -1,5 +1,5 @@ -game: main.o Player.o block.o indestructable_block.o destructable_block.o mystery_block.o Enemy.o power_up.o - g++ -std=c++17 -Wall main.o Player.o block.o indestructable_block.o destructable_block.o mystery_block.o Enemy.o power_up.o -o game -lsfml-graphics -lsfml-window -lsfml-system +game: main.o Player.o block.o indestructable_block.o destructable_block.o mystery_block.o Enemy.o power_up.o End_flag.o + g++ -std=c++17 -Wall main.o Player.o block.o indestructable_block.o destructable_block.o mystery_block.o Enemy.o power_up.o End_flag.o -o game -lsfml-graphics -lsfml-window -lsfml-system main.o: main.cc g++ -c -std=c++17 -g -Wall main.cc -o main.o -lsfml-graphics -lsfml-window -lsfml-system @@ -24,3 +24,6 @@ Enemy.o: Enemy.cc power_up.o: power_up.cc g++ -c -std=c++17 -g -Wall power_up.cc -o power_up.o -lsfml-graphics -lsfml-window -lsfml-system + +End_flag.o: End_flag.cc + g++ -c -std=c++17 -g -Wall End_flag.cc -o End_flag.o -lsfml-graphics -lsfml-window -lsfml-system diff --git a/Project/Player.cc b/Project/Player.cc index 70da4302eaf448f9f6454140f6d0cc9f960f9344..dbfb2a5f324a3ef24b4c789b4ba5af42d230b9fe 100644 --- a/Project/Player.cc +++ b/Project/Player.cc @@ -11,10 +11,10 @@ sf::Vector2f Player::get_location() return player_pos; } -void Player::update(sf::Clock & clock, sf::RenderWindow & window) +void Player::update(sf::Clock & clock, sf::RenderWindow & window, sf::View & view) { sf::Time delta = clock.restart(); - move(delta); + move(delta, view); player.setPosition(player_pos); } @@ -44,7 +44,7 @@ bool Player::check_collision(Block* b, std::string const& type) } velocity_y = -velocity_y; } - else if(player_pos.y <= b->get_pos().y-40) //landar på något + else if(player_pos.y <= b->get_pos().y-40) //landar på någotd draw(sf::RenderW { velocity_y = velocity; jumping = false; @@ -64,13 +64,13 @@ bool Player::check_collision(Block* b, std::string const& type) } //players movement from input -void Player::move(sf::Time & _delta) +void Player::move(sf::Time & _delta, sf::View & view) { distance = velocity * (_delta.asMicroseconds() / 1000000.0f); if(sf::Keyboard::isKeyPressed(sf::Keyboard::A) || sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { player_pos.x -= distance; - if(player_pos.x < 0) + if(player_pos.x - player_size.x/6 <= view.getCenter().x - 515.f) { player_pos.x += distance; } @@ -78,9 +78,9 @@ void Player::move(sf::Time & _delta) if(sf::Keyboard::isKeyPressed(sf::Keyboard::D) || sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { player_pos.x += distance; - if(player_pos.x > 984) + if(player_pos.x >= view.getCenter().x) { - player_pos.x -= distance; + view.move(distance, 0); } } if((sf::Keyboard::isKeyPressed(sf::Keyboard::W) || sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) && on_ground) @@ -106,3 +106,8 @@ void Player::move(sf::Time & _delta) jumping = true; } } + +sf::RectangleShape Player::get_shape() const +{ + return player; +} diff --git a/Project/Player.h b/Project/Player.h index ec87693ede2a92a511d7ad542dab8112b5954be0..ae53cf5f63119e0afe97e1f0cc26acd23d494811 100644 --- a/Project/Player.h +++ b/Project/Player.h @@ -10,12 +10,13 @@ class Player public: Player(float width, float height, float x_pos, float y_pos, float velocity); - void update(sf::Clock & clock, sf::RenderWindow & window); + void update(sf::Clock & clock, sf::RenderWindow & window, sf::View & view); bool check_collision(Block* b, std::string const& type); void draw(sf::RenderWindow & window); + sf::RectangleShape get_shape() const; private: sf::Vector2f find_direction(); - void move(sf::Time & _delta); + void move(sf::Time & _delta, sf::View & view); sf::Vector2f get_location(); sf::Vector2f player_size{}; sf::Vector2f player_pos{}; diff --git a/Project/Player.o b/Project/Player.o index 9fb905da5087cb2e5b53ab14692f944b26f4dd02..46add9b3963c4946287b6dcef557de76bbe87232 100644 Binary files a/Project/Player.o and b/Project/Player.o differ diff --git a/Project/game b/Project/game index 4463e4f4d369310f67da84740b3b95bc15cdcd5a..4ce65bdd42af0a2f7f7d9b4e7b0ea5a12e9809d7 100755 Binary files a/Project/game and b/Project/game differ diff --git a/Project/main.cc b/Project/main.cc index e1aa8e887af46137ee3cb908bc48aed31aa3198f..b415c4bd1718c03827ad96213c6c055d67ab85ce 100644 --- a/Project/main.cc +++ b/Project/main.cc @@ -5,6 +5,7 @@ #include "mystery_block.h" #include "Enemy.h" #include "power_up.h" +#include "End_flag.h" #include <vector> #include <iostream> @@ -12,8 +13,12 @@ int main() { sf::RenderWindow window{sf::VideoMode(1024,768), "Our game"}; // + sf::View view{}; + view.setCenter(515.f, 384.f); + view.reset(sf::FloatRect(0, 0, 1024, 768)); Player player{40,50,50,718, 350.0f}; //Width, height, x-pos, y-pos, movement_speed, jump_height Enemy enemy{40,50,800,718, 450.0f}; + End_flag eflag{60, 60, 1200, 718}; std::vector<Block*> blocks{}; blocks.push_back(new Indestructable_block{50, 0, 718}); //size, x-pos, y-pos. Color: Red //BEGIN @@ -35,10 +40,6 @@ int main() blocks.push_back(new Indestructable_block{50, 400, 718}); blocks.push_back(new Indestructable_block{50, 450, 718}); - //std::vector<Enemy*> enemies{}; - //enemies.push_back(new Enemy{40,50,800,718, 450.0f}); //width, height, x-pos, y-pos, movement_speed - //enemies.push_back(new Enemy{40,50,700,718, 450.0f}); - sf::Clock clock; @@ -55,8 +56,7 @@ int main() } } window.clear(); - player.update(clock, window); - //enemy.update(clock, window); + player.update(clock, window, view); for(auto& block : blocks) //Checks collision between player and blocks { @@ -69,52 +69,20 @@ int main() } } blocks.erase(remove_if(begin(blocks), end(blocks), [](Block* b){return b == nullptr;}), end(blocks)); - player.draw(window); - - /*for(auto it : blocks) //Checks collision between enemy and blocks - { - bool destruct{false}; - destruct = enemy.check_collision(it, it->get_otype(), player); - if(destruct) - { - delete it; - it = nullptr; - } - }*/ - - - for(auto& block : blocks) { block->update(window); } - /*for(auto enemy : enemies) - { - for(auto block : blocks) - { - enemy->update(clock, window, *block); - } - }*/ - window.display(); - } - /* - std::cout << blocks.size() << std::endl; - for(auto it : blocks) - { - if(it == nullptr) + + eflag.update(window); + + if(player.get_shape().getGlobalBounds().intersects(eflag.get_shape().getGlobalBounds())) { - std::cout << "nullptr" << std::endl; + std::cout << "Finished level" << std::endl; + closed = true; } + player.draw(window); + window.setView(view); + window.display(); } - blocks.erase(remove_if(begin(blocks), end(blocks), [](Block* b){return b == nullptr;}), end(blocks)); - std::cout << blocks.size() << std::endl; - for(auto it : blocks) - { - delete it; - } - */ - /*for(auto it : enemies) - { - delete it; - }*/ } diff --git a/Project/main.o b/Project/main.o index 8273f6da7256b4f79d00403c595b4fd3e4e5f206..ab3471479bb5b5cfb9cd4924b897a4393be6a600 100644 Binary files a/Project/main.o and b/Project/main.o differ