From 438c1fcc3a834f2863d2462301d3f1d8feee09d2 Mon Sep 17 00:00:00 2001 From: aleksav013 Date: Thu, 27 May 2021 18:29:11 +0200 Subject: Organizing code and assets --- LiberationMono-Regular.ttf | Bin 319368 -> 0 bytes assets/fonts/LiberationMono-Regular.ttf | Bin 0 -> 319368 bytes assets/images/healing.png | Bin 0 -> 3384 bytes assets/images/nep.png | Bin 0 -> 12225 bytes healing.png | Bin 3384 -> 0 bytes main.cpp | 165 +++++++++++++++++--------------- nep.png | Bin 12225 -> 0 bytes 7 files changed, 86 insertions(+), 79 deletions(-) delete mode 100644 LiberationMono-Regular.ttf create mode 100644 assets/fonts/LiberationMono-Regular.ttf create mode 100644 assets/images/healing.png create mode 100644 assets/images/nep.png delete mode 100644 healing.png delete mode 100644 nep.png diff --git a/LiberationMono-Regular.ttf b/LiberationMono-Regular.ttf deleted file mode 100644 index ce880df..0000000 Binary files a/LiberationMono-Regular.ttf and /dev/null differ diff --git a/assets/fonts/LiberationMono-Regular.ttf b/assets/fonts/LiberationMono-Regular.ttf new file mode 100644 index 0000000..ce880df Binary files /dev/null and b/assets/fonts/LiberationMono-Regular.ttf differ diff --git a/assets/images/healing.png b/assets/images/healing.png new file mode 100644 index 0000000..f1ca041 Binary files /dev/null and b/assets/images/healing.png differ diff --git a/assets/images/nep.png b/assets/images/nep.png new file mode 100644 index 0000000..da20c4a Binary files /dev/null and b/assets/images/nep.png differ diff --git a/healing.png b/healing.png deleted file mode 100644 index f1ca041..0000000 Binary files a/healing.png and /dev/null differ diff --git a/main.cpp b/main.cpp index ff326c2..1d83fc6 100644 --- a/main.cpp +++ b/main.cpp @@ -11,9 +11,12 @@ std::mt19937 Global::rng = std::mt19937(time(0)); class Entity { public: + int ziv=1; 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); + void respawn(int sirina,int visina); +}; Entity::Entity(sf::Vector2f pozicija, sf::Vector2f velicina,sf::Color boja) { telo.setSize(velicina); @@ -22,47 +25,59 @@ Entity::Entity(sf::Vector2f pozicija, sf::Vector2f velicina,sf::Color boja) x=pozicija.x; y=pozicija.y; } +void Entity::respawn(int sirina,int visina) +{ + if(!ziv) + { + x=Global::rng()%sirina; + y=Global::rng()%visina; + ziv=1; + } +} class Powerup:public Entity { public: - bool ziv=1; + static float time; Powerup():Entity() {} Powerup(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja); }; +float Powerup::time=20; Powerup::Powerup(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja):Entity(pozicija,velicina,boja) { } -class Enemy:public Entity +class Enemy1:public Entity { public: - bool ziv=1; - Enemy():Entity() {} - Enemy(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja); + static float time; + Enemy1():Entity() {} + Enemy1(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 Enemy1::time=8; +Enemy1::Enemy1(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja):Entity(pozicija,velicina,boja) {} +void Enemy1::kaigracu(float igracx,float igracy,float dt) { float k=(igracy-y)/(igracx-x); - float r=100.0*dt; + float r=150.0; float dx=r/std::sqrt(1+k*k); if(igracx-x<0) dx=-dx; float dy=k*dx; - x+=dx; - y+=dy; + x+=dx*dt; + y+=dy*dt; } class Enemy2:public Entity { private: float vx,vy; public: - bool ziv=1; + static float time; Enemy2():Entity() {} Enemy2(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja); void brzina(float igracx,float igracy,float dt); - void izracunajpoz(); + void izracunajpoz(float igracx,float igracy,float dt); }; +float Enemy2::time=14; Enemy2::Enemy2(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja):Entity(pozicija,velicina,boja) { vx=vy=0; @@ -70,35 +85,44 @@ Enemy2::Enemy2(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja):Entit void Enemy2::brzina(float igracx,float igracy,float dt) { float k=(igracy-y)/(igracx-x); - float r=10.0*dt; + float r=200.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() +void Enemy2::izracunajpoz(float igracx,float igracy,float dt) { - x+=vx; - y+=vy; + if((x+vx-igracx)*(x+vx-igracx)+(y+vy-igracy)*(y+vy-igracy)<(x-igracx)*(x-igracx)+(y-igracy)*(y-igracy)) + { + x+=vx*dt*3; + y+=vy*dt*3; + } + else + { + x+=vx*dt; + y+=vy*dt; + } } class Enemy3:public Entity { public: + static float time; float vx,vy; - bool ziv=1; Enemy3():Entity() {} Enemy3(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja); - void izracunajpoz(); + void izracunajpoz(float dt); }; +float Enemy3::time=10; Enemy3::Enemy3(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja):Entity(pozicija,velicina,boja) { - vx=vy=10.0; + vx=vy=500.0; } -void Enemy3::izracunajpoz() +void Enemy3::izracunajpoz(float dt) { - x+=vx; - y+=vy; + x+=vx*dt; + y+=vy*dt; } class Player:public Entity { @@ -126,13 +150,12 @@ class Game { private: sf::Font font; - sf::Texture tekstura,neprijatelj; + sf::Texture healthtex,neprijatelj; float dt; - sf::Clock sat; - float time,time2,time3,time4; + sf::Clock sat,time; Player igrac; - std::vector nep; + std::vector nep; std::vector nep2; std::vector nep3; std::vector pow; @@ -143,7 +166,7 @@ class Game sf::CircleShape krug; sf::RectangleShape health,healthblank,stomp,stompblank; - sf::Text healthtext,stomptext,fps; + sf::Text healthtext,stomptext,fps,score; void events(); void keyboard(); @@ -158,16 +181,12 @@ class Game }; 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<20;i++) nep.push_back(Enemy1(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)); @@ -192,7 +211,7 @@ Game::Game() stompblank.setFillColor(sf::Color::White); stompblank.setPosition(0,50); - if(!font.loadFromFile("LiberationMono-Regular.ttf")) + if(!font.loadFromFile("assets/fonts/LiberationMono-Regular.ttf")) { std::cout<<"Font not found\n"; } @@ -205,20 +224,26 @@ Game::Game() 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); + score.setFont(font); + score.setCharacterSize(24); + score.setFillColor(sf::Color::White); + score.setPosition(sirina*5.0/6,50); - if(!tekstura.loadFromFile("healing.png")) + + if(!healthtex.loadFromFile("assets/images/healing.png")) { std::cout<<"Texture not found\n"; } - if(!neprijatelj.loadFromFile("nep.png")) + if(!neprijatelj.loadFromFile("assets/images/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.y0) igrac.y-=dist; + if((sf::Keyboard::isKeyPressed(sf::Keyboard::A)||sf::Keyboard::isKeyPressed(sf::Keyboard::Left))&&igrac.x>0) igrac.x-=dist; + if((sf::Keyboard::isKeyPressed(sf::Keyboard::S)||sf::Keyboard::isKeyPressed(sf::Keyboard::Down))&&igrac.ysirina) nep3[i].vx=-nep3[i].vx; if(nep3[i].y<0||nep3[i].y>visina) nep3[i].vy=-nep3[i].vy; - nep3[i].izracunajpoz(); + nep3[i].izracunajpoz(dt); } //respawn - time-=dt; - time2-=dt; - time3-=dt; - time4-=dt; - if(time<0) + Enemy1::time-=dt; + Enemy2::time-=dt; + Enemy3::time-=dt; + Powerup::time-=dt; + if(Enemy1::time<0) { - time=8; - for(int i=0;i