diff options
| author | aleksav013 <aleksav013@gmail.com> | 2021-05-24 17:16:28 +0200 |
|---|---|---|
| committer | aleksav013 <aleksav013@gmail.com> | 2021-05-28 20:16:53 +0200 |
| commit | 5b64f79245b21b7b8c2e10647b4b24d355b19a79 (patch) | |
| tree | 155f7c25d765fb15b8cde139c63c17cd7bbaa747 /main.cpp | |
| parent | 3a95e77fd88560c0d0d8aa95647716ceedb1845e (diff) | |
Adding UI; Two more types of enemies
Diffstat (limited to 'main.cpp')
| -rw-r--r-- | main.cpp | 212 |
1 files changed, 186 insertions, 26 deletions
@@ -21,10 +21,9 @@ Entity::Entity(sf::Vector2f pozicija, sf::Vector2f velicina,sf::Color boja) telo.setFillColor(boja); telo.setOrigin(sf::Vector2f(telo.getSize().x/2,telo.getSize().y/2)); x=pozicija.x; - y=pozicija.y; -} -class Enemy:public Entity -{ + y=pozicija.y; +} +class Enemy:public Entity { public: bool ziv=1; Enemy():Entity() {} @@ -35,18 +34,64 @@ Enemy::Enemy(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja):Entity( void Enemy::kaigracu(float igracx,float igracy,float dt) { float k=(igracy-y)/(igracx-x); - float r=100*dt; + 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=300; + int stomprad=270; float stomptime; Player():Entity() {} @@ -63,30 +108,43 @@ class Game private: float dt; sf::Clock sat; - float time; + float time,time2,time3; + Player igrac; - std::vector<Enemy> neprijatelj; + std::vector<Enemy> nep; + std::vector<Enemy2> nep2; + std::vector<Enemy3> nep3; + int visina,sirina; sf::RenderWindow prozor; + sf::CircleShape krug; + sf::RectangleShape health,healthblank,stomp,stompblank; + void events(); void keyboard(); void run(); void draw(); void stompmain(); + void updateui(); + void updatedt(); public: Game(); void loop(); }; Game::Game() { - time=5; + time=8; + time2=14; + time3=10; prozor.create(sf::VideoMode(1024,1024),"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++) neprijatelj.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<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<10;i++) nep2.push_back(Enemy2(sf::Vector2f(Global::rng()%sirina,Global::rng()%visina),sf::Vector2f(50.0f,50.0f),sf::Color::Blue)); + for(int i=0;i<5;i++) nep3.push_back(Enemy3(sf::Vector2f(Global::rng()%sirina,Global::rng()%visina),sf::Vector2f(50.0f,50.0f),sf::Color::Yellow)); igrac.x=(float)prozor.getSize().x/2; igrac.y=(float)prozor.getSize().y/2; @@ -95,17 +153,54 @@ Game::Game() 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(sirina*2.0/3,0); + stompblank.setSize(sf::Vector2f(sirina/3.0,50.0)); + stompblank.setFillColor(sf::Color::White); + stompblank.setPosition(sirina*2.0/3,0); +} +void Game::updatedt() +{ + dt=sat.restart().asMicroseconds()/1000000.0; +} +void Game::updateui() +{ + health.setSize(sf::Vector2f(sirina*igrac.health/300.0,50.0)); + stomp.setSize(sf::Vector2f(sirina*(5-igrac.stomptime)/15.0,50.0)); } void Game::stompmain() { igrac.stomptime=5; krug.setPosition(igrac.x,igrac.y); - for(int i=0;i<neprijatelj.size();i++) if(neprijatelj[i].ziv) + for(int i=0;i<nep.size();i++) if(nep[i].ziv) { - if(neprijatelj[i].telo.getGlobalBounds().intersects(krug.getGlobalBounds())) + if(nep[i].telo.getGlobalBounds().intersects(krug.getGlobalBounds())) { igrac.xp+=5; - neprijatelj[i].ziv=0; + nep[i].ziv=0; + } + } + for(int i=0;i<nep2.size();i++) if(nep2[i].ziv) + { + if(nep2[i].telo.getGlobalBounds().intersects(krug.getGlobalBounds())) + { + igrac.xp+=5; + nep2[i].ziv=0; + } + } + for(int i=0;i<nep3.size();i++) if(nep3[i].ziv) + { + if(nep3[i].telo.getGlobalBounds().intersects(krug.getGlobalBounds())) + { + igrac.xp+=5; + nep3[i].ziv=0; } } } @@ -144,13 +239,26 @@ void Game::draw() prozor.clear(); if(igrac.stomptime>4.6) prozor.draw(krug); prozor.draw(igrac.telo); - for(int i=0;i<neprijatelj.size();i++) if(neprijatelj[i].ziv) prozor.draw(neprijatelj[i].telo); + for(int i=0;i<nep.size();i++) if(nep[i].ziv) prozor.draw(nep[i].telo); + for(int i=0;i<nep2.size();i++) if(nep2[i].ziv) prozor.draw(nep2[i].telo); + for(int i=0;i<nep3.size();i++) if(nep3[i].ziv) prozor.draw(nep3[i].telo); +//UserInterface + prozor.draw(healthblank); + prozor.draw(health); + prozor.draw(stompblank); + prozor.draw(stomp); + prozor.display(); } void Game::run() { - dt=sat.restart().asMicroseconds()/1000000.0; + //update + updateui(); + updatedt(); + if(igrac.stomptime>0) igrac.stomptime-=dt; std::cout<<"fps: "<<1.0/dt<<std::endl; + + //game over if(igrac.health<=0) { prozor.close(); @@ -158,29 +266,81 @@ void Game::run() return; } + //izracunajpoz + for(int i=0;i<nep2.size();i++) nep2[i].izracunajpoz(); + //izracunaj poz i brzinu + for(int i=0;i<nep3.size();i++) + { + if(nep3[i].x<0||nep3[i].x>sirina) 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; if(time<0) { time=8; - for(int i=0;i<neprijatelj.size();i++) if(!neprijatelj[i].ziv) + for(int i=0;i<nep.size();i++) if(!nep[i].ziv) { - neprijatelj[i].ziv=1; - neprijatelj[i].x=Global::rng()%sirina; - neprijatelj[i].y=Global::rng()%visina; + nep[i].ziv=1; + nep[i].x=Global::rng()%sirina; + nep[i].y=Global::rng()%visina; + } + } + if(time2<0) + { + time2=14; + for(int i=0;i<nep2.size();i++) if(!nep2[i].ziv) + { + nep2[i].ziv=1; + nep2[i].x=Global::rng()%sirina; + nep2[i].y=Global::rng()%visina; + } + } + if(time3<0) + { + time3=10; + for(int i=0;i<nep3.size();i++) if(!nep3[i].ziv) + { + nep3[i].ziv=1; + nep3[i].x=Global::rng()%sirina; + nep3[i].y=Global::rng()%visina; } } - if(igrac.stomptime>0) igrac.stomptime-=dt; igrac.telo.setPosition(igrac.x,igrac.y); - for(int i=0;i<neprijatelj.size();i++) if(neprijatelj[i].ziv) + //colliding with player + for(int i=0;i<nep.size();i++) if(nep[i].ziv) + { + nep[i].kaigracu(igrac.x,igrac.y,dt); + nep[i].telo.setPosition(nep[i].x,nep[i].y); + if(nep[i].telo.getGlobalBounds().intersects(igrac.telo.getGlobalBounds())) + { + nep[i].ziv=0; + igrac.health-=Global::rng()%4+1; // 1-4 dmg + } + } + for(int i=0;i<nep2.size();i++) if(nep2[i].ziv) + { + nep2[i].brzina(igrac.x,igrac.y,dt); + nep2[i].telo.setPosition(nep2[i].x,nep2[i].y); + if(nep2[i].telo.getGlobalBounds().intersects(igrac.telo.getGlobalBounds())) + { + nep2[i].ziv=0; + igrac.health-=Global::rng()%8+1; // 1-8 dmg + } + } + for(int i=0;i<nep3.size();i++) if(nep3[i].ziv) { - neprijatelj[i].kaigracu(igrac.x,igrac.y,dt); - neprijatelj[i].telo.setPosition(neprijatelj[i].x,neprijatelj[i].y); - if(neprijatelj[i].telo.getGlobalBounds().intersects(igrac.telo.getGlobalBounds())) + nep3[i].telo.setPosition(nep3[i].x,nep3[i].y); + if(nep3[i].telo.getGlobalBounds().intersects(igrac.telo.getGlobalBounds())) { - neprijatelj[i].ziv=0; - igrac.health-=Global::rng()%4+1; + nep3[i].ziv=0; + igrac.health-=Global::rng()%12+1; // 1-12 dmg } } + //debug info std::cout<<"Health: "<<igrac.health<<", skor: "<<igrac.xp<<std::endl; std::cout<<"Do sledeceg stompa: "<<igrac.stomptime<<std::endl; } |
