#include #include #include #define seseku(a,b) a.getGlobalBounds().intersects(b.getGlobalBounds()) class Global { public: static std::mt19937 rng; }; std::mt19937 Global::rng = std::mt19937(time(0)); class Entity { public: float x,y; sf::RectangleShape telo; Entity() {} Entity(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja); }; Entity::Entity(sf::Vector2f pozicija, sf::Vector2f velicina,sf::Color boja) { telo.setSize(velicina); telo.setFillColor(boja); telo.setOrigin(sf::Vector2f(telo.getSize().x/2,telo.getSize().y/2)); x=pozicija.x; y=pozicija.y; } class Powerup:public Entity { public: bool ziv=1; Powerup():Entity() {} Powerup(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja); }; Powerup::Powerup(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja):Entity(pozicija,velicina,boja) { } class Enemy:public Entity { public: bool ziv=1; Enemy():Entity() {} Enemy(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja); void kaigracu(float igracx,float igracy,float dt); }; Enemy::Enemy(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja):Entity(pozicija,velicina,boja) {} void Enemy::kaigracu(float igracx,float igracy,float dt) { float k=(igracy-y)/(igracx-x); float r=100.0*dt; float dx=r/std::sqrt(1+k*k); if(igracx-x<0) dx=-dx; float dy=k*dx; x+=dx; y+=dy; } class Enemy2:public Entity { private: float vx,vy; public: bool ziv=1; Enemy2():Entity() {} Enemy2(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja); void brzina(float igracx,float igracy,float dt); void izracunajpoz(); }; Enemy2::Enemy2(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja):Entity(pozicija,velicina,boja) { vx=vy=0; } void Enemy2::brzina(float igracx,float igracy,float dt) { float k=(igracy-y)/(igracx-x); float r=10.0*dt; float dx=r/std::sqrt(1+k*k); if(igracx-x<0) dx=-dx; float dy=k*dx; vx+=dx; vy+=dy; } void Enemy2::izracunajpoz() { x+=vx; y+=vy; } class Enemy3:public Entity { public: float vx,vy; bool ziv=1; Enemy3():Entity() {} Enemy3(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja); void izracunajpoz(); }; Enemy3::Enemy3(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja):Entity(pozicija,velicina,boja) { vx=vy=10.0; } void Enemy3::izracunajpoz() { x+=vx; y+=vy; } class Player:public Entity { public: int health,xp; int stomprad=270; float stomptime; Player():Entity() {} Player(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja); void updatest(float dt); }; Player::Player(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja):Entity(pozicija,velicina,boja) { health=100; stomptime=0; xp=0; } void Player::updatest(float dt) { if(stomptime>0) stomptime-=dt; else stomptime=0; } class Game { private: sf::Font font; sf::Texture tekstura,neprijatelj; float dt; sf::Clock sat; float time,time2,time3,time4; Player igrac; std::vector nep; std::vector nep2; std::vector nep3; std::vector pow; int visina,sirina; sf::RenderWindow prozor; sf::CircleShape krug; sf::RectangleShape health,healthblank,stomp,stompblank; sf::Text healthtext,stomptext,fps; void events(); void keyboard(); void run(); void draw(); void stompmain(); void updateui(); void updatedt(); public: Game(); void loop(); }; Game::Game() { time=8; time2=14; time3=10; time4=20; prozor.create(sf::VideoMode::getFullscreenModes()[0],"RPG igra"); visina=prozor.getSize().y; sirina=prozor.getSize().x; prozor.setFramerateLimit(60); igrac = Player(sf::Vector2f((float)sirina/2,(float)visina/2),sf::Vector2f(100.0f,100.0f),sf::Color::White); for(int i=0;i<20;i++) nep.push_back(Enemy(sf::Vector2f(Global::rng()%sirina,Global::rng()%visina),sf::Vector2f(50.0f,50.0f),sf::Color::Red)); for(int i=0;i<7;i++) nep2.push_back(Enemy2(sf::Vector2f(Global::rng()%sirina,Global::rng()%visina),sf::Vector2f(50.0f,50.0f),sf::Color::Cyan));//(253,106,2))); for(int i=0;i<4;i++) nep3.push_back(Enemy3(sf::Vector2f(Global::rng()%sirina,Global::rng()%visina),sf::Vector2f(50.0f,50.0f),sf::Color::Yellow)); pow.push_back(Powerup(sf::Vector2f(Global::rng()%sirina,Global::rng()%visina),sf::Vector2f(50.0f,50.0f),sf::Color::White)); igrac.x=(float)prozor.getSize().x/2; igrac.y=(float)prozor.getSize().y/2; krug.setRadius(igrac.stomprad); krug.setFillColor(sf::Color::Black); krug.setOutlineThickness(10); krug.setOutlineColor(sf::Color::White); krug.setOrigin(krug.getRadius(),krug.getRadius()); health.setSize(sf::Vector2f(sirina/3.0,50.0)); health.setFillColor(sf::Color::Red); healthblank.setSize(sf::Vector2f(sirina/3.0,50.0)); healthblank.setFillColor(sf::Color::White); stomp.setSize(sf::Vector2f(sirina/3.0,50.0)); stomp.setFillColor(sf::Color::Blue); stomp.setPosition(0,50); stompblank.setSize(sf::Vector2f(sirina/3.0,50.0)); stompblank.setFillColor(sf::Color::White); stompblank.setPosition(0,50); if(!font.loadFromFile("LiberationMono-Regular.ttf")) { std::cout<<"Font not found\n"; } healthtext.setFont(font); healthtext.setString("Health"); healthtext.setCharacterSize(24); healthtext.setFillColor(sf::Color::Black); stomptext.setFont(font); stomptext.setString("Stomp"); stomptext.setCharacterSize(24); stomptext.setPosition(0,50); stomptext.setFillColor(sf::Color::Black); fps.setFont(font); fps.setCharacterSize(24); fps.setFillColor(sf::Color::White); fps.setPosition(sirina*5.0/6,0); if(!tekstura.loadFromFile("healing.png")) { std::cout<<"Texture not found\n"; } if(!neprijatelj.loadFromFile("nep.png")) { std::cout<<"Texture not found\n"; } for(int i=0;i0) igrac.y-=dist; if(sf::Keyboard::isKeyPressed(sf::Keyboard::A)&&igrac.x>0) igrac.x-=dist; if(sf::Keyboard::isKeyPressed(sf::Keyboard::S)&&igrac.y4.6) prozor.draw(krug); prozor.draw(igrac.telo); for(int i=0;isirina) nep3[i].vx=-nep3[i].vx; if(nep3[i].y<0||nep3[i].y>visina) nep3[i].vy=-nep3[i].vy; nep3[i].izracunajpoz(); } //respawn time-=dt; time2-=dt; time3-=dt; time4-=dt; if(time<0) { time=8; for(int i=0;i