aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Enemy1.cpp19
-rw-r--r--src/Enemy2.cpp30
-rw-r--r--src/Enemy3.cpp17
-rw-r--r--src/Entity.cpp19
-rw-r--r--src/Game.cpp282
-rw-r--r--src/Global.cpp2
-rw-r--r--src/Makefile15
-rw-r--r--src/Player.cpp13
-rw-r--r--src/Powerup.cpp7
-rw-r--r--src/State.cpp59
-rw-r--r--src/includes/Enemy1.hpp17
-rw-r--r--src/includes/Enemy2.hpp17
-rw-r--r--src/includes/Enemy3.hpp17
-rw-r--r--src/includes/Entity.hpp15
-rw-r--r--src/includes/Game.hpp54
-rw-r--r--src/includes/Global.hpp12
-rw-r--r--src/includes/Player.hpp17
-rw-r--r--src/includes/Powerup.hpp13
-rw-r--r--src/includes/State.hpp19
-rw-r--r--src/main.cpp8
20 files changed, 652 insertions, 0 deletions
diff --git a/src/Enemy1.cpp b/src/Enemy1.cpp
new file mode 100644
index 0000000..fc1e87d
--- /dev/null
+++ b/src/Enemy1.cpp
@@ -0,0 +1,19 @@
+#include"includes/Global.hpp"
+#include"includes/Enemy1.hpp"
+float Enemy1::time=8;
+Enemy1::Enemy1(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja):Entity(pozicija,velicina,boja) {}
+void Enemy1::izracunajbrzinu(float igracx,float igracy)
+{
+ float k=(igracy-y)/(igracx-x);
+ float r=150.0;
+ float dx=r/std::sqrt(1+k*k);
+ if(igracx-x<0) dx=-dx;
+ float dy=k*dx;
+ vx=dx;
+ vy=dy;
+}
+void Enemy1::izracunajpoz(float dt)
+{
+ x+=vx*dt;
+ y+=vy*dt;
+}
diff --git a/src/Enemy2.cpp b/src/Enemy2.cpp
new file mode 100644
index 0000000..fc65942
--- /dev/null
+++ b/src/Enemy2.cpp
@@ -0,0 +1,30 @@
+#include"includes/Global.hpp"
+#include"includes/Enemy2.hpp"
+float Enemy2::time=14;
+Enemy2::Enemy2(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja):Entity(pozicija,velicina,boja)
+{
+ vx=vy=0;
+}
+void Enemy2::izracunajbrzinu(float igracx,float igracy,float dt)
+{
+ float k=(igracy-y)/(igracx-x);
+ 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(float igracx,float igracy,float dt)
+{
+ 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;
+ }
+}
diff --git a/src/Enemy3.cpp b/src/Enemy3.cpp
new file mode 100644
index 0000000..0ed8726
--- /dev/null
+++ b/src/Enemy3.cpp
@@ -0,0 +1,17 @@
+#include"includes/Global.hpp"
+#include"includes/Enemy3.hpp"
+float Enemy3::time=10;
+Enemy3::Enemy3(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja):Entity(pozicija,velicina,boja)
+{
+ vx=vy=500.0;
+}
+void Enemy3::izracunajpoz(float dt)
+{
+ x+=vx*dt;
+ y+=vy*dt;
+}
+void Enemy3::izracunajbrzinu(int sirina,int visina)
+{
+ if(x<0||x>sirina) vx=-vx;
+ if(y<0||y>visina) vy=-vy;
+}
diff --git a/src/Entity.cpp b/src/Entity.cpp
new file mode 100644
index 0000000..cc9f418
--- /dev/null
+++ b/src/Entity.cpp
@@ -0,0 +1,19 @@
+#include"includes/Global.hpp"
+#include"includes/Entity.hpp"
+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;
+}
+void Entity::respawn(int sirina,int visina)
+{
+ if(!ziv)
+ {
+ x=Global::rng()%sirina;
+ y=Global::rng()%visina;
+ ziv=1;
+ }
+}
diff --git a/src/Game.cpp b/src/Game.cpp
new file mode 100644
index 0000000..fdb5f54
--- /dev/null
+++ b/src/Game.cpp
@@ -0,0 +1,282 @@
+#include"includes/Global.hpp"
+#include"includes/Game.hpp"
+
+#include<iostream>
+void Game::initshapes()
+{
+ 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);
+}
+void Game::initui()
+{
+ if(!font.loadFromFile("../assets/fonts/LiberationMono-Regular.ttf"))
+ {
+ std::cerr<<"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);
+ score.setFont(font);
+ score.setCharacterSize(24);
+ score.setFillColor(sf::Color::White);
+ score.setPosition(sirina*5.0/6,50);
+}
+void Game::inittex()
+{
+ if(!healthtex.loadFromFile("../assets/images/healing.png"))
+ {
+ std::cerr<<"Texture not found\n";
+ }
+ if(!neprijateljtex.loadFromFile("../assets/images/nep.png"))
+ {
+ std::cerr<<"Texture not found\n";
+ }
+ for(size_t i=0;i<pow.size();i++) pow.at(i).telo.setTexture(&healthtex);
+ for(size_t i=0;i<nep1.size();i++) nep1.at(i).telo.setTexture(&neprijateljtex);
+ for(size_t i=0;i<nep2.size();i++) nep2.at(i).telo.setTexture(&neprijateljtex);
+ for(size_t i=0;i<nep3.size();i++) nep3.at(i).telo.setTexture(&neprijateljtex);
+}
+void Game::initent()
+{
+ igrac = Player(sf::Vector2f(sirina/2.0,visina/2.0),sf::Vector2f(100.0f,100.0f),sf::Color::White);
+ for(size_t i=0;i<20;i++) nep1.push_back(Enemy1(sf::Vector2f(Global::rng()%sirina,Global::rng()%visina),sf::Vector2f(50.0f,50.0f),sf::Color::Red));
+ for(size_t 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(size_t 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));
+}
+void Game::updatewin()
+{
+ visina=prozor->getSize().y;
+ sirina=prozor->getSize().x;
+ healthblank.setSize(sf::Vector2f(sirina/3.0,50.0));
+ stompblank.setSize(sf::Vector2f(sirina/3.0,50.0));
+ fps.setPosition(sirina*5.0/6,0);
+ score.setPosition(sirina*5.0/6,50);
+ updateui();
+}
+Game::Game(sf::RenderWindow *glprozor)
+{
+ prozor=glprozor;
+ initui();
+ updatewin();
+ initent();
+ initshapes();
+ inittex();
+}
+bool Game::gameover()
+{
+ if(igrac.health<=0)
+ {
+ prozor->close();
+ std::cout<<"\n\nGame over. Wanna try again?\n";
+ return 1;
+ }
+ return 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));
+ fps.setString("fps: "+std::to_string((int)(1/dt)));
+ score.setString("xp: "+std::to_string(igrac.xp));
+}
+void Game::stompmain()
+{
+ igrac.stomptime=5;
+ krug.setPosition(igrac.x,igrac.y);
+ for(size_t i=0;i<nep1.size();i++) if(nep1.at(i).ziv)
+ {
+ if(seseku(nep1.at(i).telo,krug))
+ {
+ igrac.xp+=5;
+ nep1.at(i).ziv=0;
+ }
+ }
+ for(size_t i=0;i<nep2.size();i++) if(nep2.at(i).ziv)
+ {
+ if(seseku(nep2.at(i).telo,krug))
+ {
+ igrac.xp+=10;
+ nep2.at(i).ziv=0;
+ }
+ }
+ for(size_t i=0;i<nep3.size();i++) if(nep3.at(i).ziv)
+ {
+ if(seseku(nep3.at(i).telo,krug))
+ {
+ igrac.xp+=20;
+ nep3.at(i).ziv=0;
+ }
+ }
+}
+void Game::keyboard()
+{
+ float dist=500.0*dt;
+ if((sf::Keyboard::isKeyPressed(sf::Keyboard::W)||sf::Keyboard::isKeyPressed(sf::Keyboard::Up))&&igrac.y>0) 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.y<visina) igrac.y+=dist;
+ if((sf::Keyboard::isKeyPressed(sf::Keyboard::D)||sf::Keyboard::isKeyPressed(sf::Keyboard::Right))&&igrac.x<sirina) igrac.x+=dist;
+ if(sf::Keyboard::isKeyPressed(sf::Keyboard::Space)) if(igrac.stomptime<=0) stompmain();
+}
+void Game::draw()
+{
+ prozor->clear();
+ if(igrac.stomptime>4.6) prozor->draw(krug);
+ prozor->draw(igrac.telo);
+ for(size_t i=0;i<nep1.size();i++) if(nep1.at(i).ziv) prozor->draw(nep1.at(i).telo);
+ for(size_t i=0;i<nep2.size();i++) if(nep2.at(i).ziv) prozor->draw(nep2.at(i).telo);
+ for(size_t i=0;i<nep3.size();i++) if(nep3.at(i).ziv) prozor->draw(nep3.at(i).telo);
+ for(size_t i=0;i<pow.size();i++) if(pow.at(i).ziv) prozor->draw(pow.at(i).telo);
+
+ prozor->draw(healthblank);
+ prozor->draw(health);
+ prozor->draw(healthtext);
+ prozor->draw(stompblank);
+ prozor->draw(stomp);
+ prozor->draw(stomptext);
+ prozor->draw(fps);
+ prozor->draw(score);
+
+ prozor->display();
+}
+void Game::position()
+{
+ igrac.telo.setPosition(igrac.x,igrac.y);
+ for(size_t i=0;i<nep1.size();i++) if(nep1.at(i).ziv)
+ {
+ nep1.at(i).izracunajbrzinu(igrac.x,igrac.y);
+ nep1.at(i).izracunajpoz(dt);
+ nep1.at(i).telo.setPosition(nep1.at(i).x,nep1.at(i).y);
+ }
+ for(size_t i=0;i<nep2.size();i++) if(nep2.at(i).ziv)
+ {
+ nep2.at(i).izracunajbrzinu(igrac.x,igrac.y,dt);
+ nep2.at(i).izracunajpoz(igrac.x,igrac.y,dt);
+ nep2.at(i).telo.setPosition(nep2.at(i).x,nep2.at(i).y);
+ }
+ for(size_t i=0;i<nep3.size();i++) if(nep3.at(i).ziv)
+ {
+ nep3.at(i).izracunajbrzinu(sirina,visina);
+ nep3.at(i).izracunajpoz(dt);
+ nep3.at(i).telo.setPosition(nep3.at(i).x,nep3.at(i).y);
+ }
+ for(size_t i=0;i<pow.size();i++) if(pow.at(i).ziv)
+ {
+ pow.at(i).telo.setPosition(pow.at(i).x,pow.at(i).y);
+ }
+}
+void Game::checkcollision()
+{
+ for(size_t i=0;i<nep1.size();i++) if(nep1.at(i).ziv)
+ {
+ if(seseku(nep1.at(i).telo,igrac.telo))
+ {
+ nep1.at(i).ziv=0;
+ igrac.health-=Global::rng()%4+1; // 1-4 dmg
+ }
+ }
+ for(size_t i=0;i<nep2.size();i++) if(nep2.at(i).ziv)
+ {
+ if(seseku(nep2.at(i).telo,igrac.telo))
+ {
+ nep2.at(i).ziv=0;
+ igrac.health-=Global::rng()%8+1; // 1-8 dmg
+ }
+ }
+ for(size_t i=0;i<nep3.size();i++) if(nep3.at(i).ziv)
+ {
+ if(seseku(nep3.at(i).telo,igrac.telo))
+ {
+ nep3.at(i).ziv=0;
+ igrac.health-=Global::rng()%12+1; // 1-12 dmg
+ }
+ }
+ for(size_t i=0;i<pow.size();i++) if(pow.at(i).ziv)
+ {
+ if(seseku(pow.at(i).telo,igrac.telo))
+ {
+ pow.at(i).ziv=0;
+ igrac.health+=Global::rng()%20+21; // 20-40 heal
+ }
+ }
+}
+void Game::respawn()
+{
+ Enemy1::time-=dt;
+ Enemy2::time-=dt;
+ Enemy3::time-=dt;
+ Powerup::time-=dt;
+
+ if(Enemy1::time<0)
+ {
+ Enemy1::time=8;
+ for(size_t i=0;i<nep1.size();i++) nep1.at(i).respawn(sirina,visina);
+ }
+ if(Enemy2::time<0)
+ {
+ Enemy2::time=14;
+ for(size_t i=0;i<nep2.size();i++) nep2.at(i).respawn(sirina,visina);
+ }
+ if(Enemy3::time<0)
+ {
+ Enemy3::time=10;
+ for(size_t i=0;i<nep3.size();i++) nep3.at(i).respawn(sirina,visina);
+ }
+ if(Powerup::time<0)
+ {
+ Powerup::time=20;
+ for(size_t i=0;i<pow.size();i++) pow.at(i).respawn(sirina,visina);
+ }
+}
+void Game::run()
+{
+ if(gameover()) return;
+
+ updateui();
+ igrac.updatest(dt);
+
+ respawn();
+ position();
+ checkcollision();
+}
+void Game::loop(bool ischanged,bool pause)
+{
+ if(ischanged) updatewin();
+ if(!pause)
+ {
+ keyboard();
+ run();
+ }
+ updatedt();
+ draw();
+}
diff --git a/src/Global.cpp b/src/Global.cpp
new file mode 100644
index 0000000..e95f785
--- /dev/null
+++ b/src/Global.cpp
@@ -0,0 +1,2 @@
+#include"includes/Global.hpp"
+std::mt19937 Global::rng = std::mt19937(time(0));
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
index 0000000..b4ed4bd
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,15 @@
+CXX = g++
+CXXFLAGS = --std=c++14 -g -O2 -Wall
+SRC_DIR = src/
+OBJECTS = main.o State.o Game.o Global.o Enemy1.o Enemy2.o Enemy3.o Powerup.o Entity.o Player.o
+
+all: sfml-rpg
+
+sfml-rpg: $(OBJECTS)
+ $(CXX) $(CXXFLAGS) $(OBJECTS) -o sfml-rpg -lsfml-graphics -lsfml-window -lsfml-system
+
+%.o : %.cpp
+ $(CXX) $(CXXFLAGS) -c $<
+
+clean:
+ rm -f $(OBJECTS) sfml-rpg
diff --git a/src/Player.cpp b/src/Player.cpp
new file mode 100644
index 0000000..d73ead1
--- /dev/null
+++ b/src/Player.cpp
@@ -0,0 +1,13 @@
+#include"includes/Global.hpp"
+#include"includes/Player.hpp"
+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;
+}
diff --git a/src/Powerup.cpp b/src/Powerup.cpp
new file mode 100644
index 0000000..53bbb57
--- /dev/null
+++ b/src/Powerup.cpp
@@ -0,0 +1,7 @@
+#include"includes/Global.hpp"
+#include"includes/Powerup.hpp"
+float Powerup::time=20;
+Powerup::Powerup(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja):Entity(pozicija,velicina,boja)
+{
+
+}
diff --git a/src/State.cpp b/src/State.cpp
new file mode 100644
index 0000000..510e8ca
--- /dev/null
+++ b/src/State.cpp
@@ -0,0 +1,59 @@
+#include"includes/Global.hpp"
+#include"includes/State.hpp"
+
+#include"includes/Game.hpp"
+#include<iostream>
+State::State()
+{
+ prozor.create(sf::VideoMode::getFullscreenModes()[0],"RPG igra");
+ prozor.setFramerateLimit(60);
+ visina=prozor.getSize().y;
+ sirina=prozor.getSize().x;
+}
+void State::events()
+{
+ sf::Event evnt;
+ while(prozor.pollEvent(evnt))
+ {
+ switch(evnt.type)
+ {
+ case sf::Event::EventType::Closed:
+ prozor.close();
+ break;
+ case sf::Event::EventType::Resized:
+ std::cout<<"Nova velicina prozora je:"<<prozor.getSize().x<<'x'<<prozor.getSize().y<<std::endl;
+ ischanged=1;
+ visina=prozor.getSize().y;
+ sirina=prozor.getSize().x;
+ prozor.setView(sf::View(sf::FloatRect(0,0,sirina,visina)));
+ break;
+ case sf::Event::EventType::KeyPressed:
+ keyboard();
+ break;
+ default:
+ break;
+ }
+ }
+}
+void State::keyboard()
+{
+ if(sf::Keyboard::isKeyPressed(sf::Keyboard::P))
+ {
+ pause=1;
+ }
+ if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
+ {
+ pause=0;
+ ischanged=1;
+ }
+}
+void State::loop()
+{
+ Game *igra=new Game(&prozor);
+ while(prozor.isOpen())
+ {
+ events();
+ igra->loop(ischanged,pause);
+ if(ischanged) ischanged=0;
+ }
+}
diff --git a/src/includes/Enemy1.hpp b/src/includes/Enemy1.hpp
new file mode 100644
index 0000000..0405365
--- /dev/null
+++ b/src/includes/Enemy1.hpp
@@ -0,0 +1,17 @@
+#ifndef ENEMY1_H
+#define ENEMY1_H
+
+#include"Entity.hpp"
+class Enemy1:public Entity
+{
+ private:
+ float vx,vy;
+ public:
+ static float time;
+ Enemy1():Entity() {}
+ Enemy1(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja);
+ void izracunajbrzinu(float igracx,float igracy);
+ void izracunajpoz(float dt);
+};
+
+#endif
diff --git a/src/includes/Enemy2.hpp b/src/includes/Enemy2.hpp
new file mode 100644
index 0000000..25555a4
--- /dev/null
+++ b/src/includes/Enemy2.hpp
@@ -0,0 +1,17 @@
+#ifndef ENEMY2_H
+#define ENEMY2_H
+
+#include"Entity.hpp"
+class Enemy2:public Entity
+{
+ private:
+ float vx,vy;
+ public:
+ static float time;
+ Enemy2():Entity() {}
+ Enemy2(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja);
+ void izracunajbrzinu(float igracx,float igracy,float dt);
+ void izracunajpoz(float igracx,float igracy,float dt);
+};
+
+#endif
diff --git a/src/includes/Enemy3.hpp b/src/includes/Enemy3.hpp
new file mode 100644
index 0000000..e1498bf
--- /dev/null
+++ b/src/includes/Enemy3.hpp
@@ -0,0 +1,17 @@
+#ifndef ENEMY3_H
+#define ENEMY3_H
+
+#include"Entity.hpp"
+class Enemy3:public Entity
+{
+ private:
+ float vx,vy;
+ public:
+ static float time;
+ Enemy3():Entity() {}
+ Enemy3(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja);
+ void izracunajpoz(float dt);
+ void izracunajbrzinu(int sirina,int duzina);
+};
+
+#endif
diff --git a/src/includes/Entity.hpp b/src/includes/Entity.hpp
new file mode 100644
index 0000000..7f83c98
--- /dev/null
+++ b/src/includes/Entity.hpp
@@ -0,0 +1,15 @@
+#ifndef ENTITY_H
+#define ENTITY_H
+
+#include<SFML/Graphics.hpp>
+class Entity
+{
+ public:
+ bool ziv=1;
+ float x,y;
+ sf::RectangleShape telo;
+ Entity() {} Entity(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja);
+ void respawn(int sirina,int visina);
+};
+
+#endif
diff --git a/src/includes/Game.hpp b/src/includes/Game.hpp
new file mode 100644
index 0000000..4418ab3
--- /dev/null
+++ b/src/includes/Game.hpp
@@ -0,0 +1,54 @@
+#ifndef GAME_H
+#define GAME_H
+
+#include"Player.hpp"
+#include"Enemy1.hpp"
+#include"Enemy2.hpp"
+#include"Enemy3.hpp"
+#include"Powerup.hpp"
+
+class Game
+{
+ private:
+ sf::Font font;
+ sf::Texture healthtex,neprijateljtex;
+ float dt;
+ sf::Clock sat,time;
+
+ Player igrac;
+ std::vector<Enemy1> nep1;
+ std::vector<Enemy2> nep2;
+ std::vector<Enemy3> nep3;
+ std::vector<Powerup> pow;
+
+ int visina,sirina;
+ sf::RenderWindow *prozor;
+
+ sf::CircleShape krug;
+ sf::RectangleShape health,healthblank,stomp,stompblank;
+ sf::Text healthtext,stomptext,fps,score;
+
+ void keyboard();
+ void run();
+ void draw();
+ void stompmain();
+
+ void updateui();
+ void updatedt();
+ bool gameover();
+ void respawn();
+ void position();
+ void checkcollision();
+
+ void initshapes();
+ void initui();
+ void inittex();
+ void initent();
+ void updatewin();
+ public:
+ Game() {}
+ Game(sf::RenderWindow *glprozor);
+ void loop(bool ischanged,bool pause);
+};
+
+#endif
diff --git a/src/includes/Global.hpp b/src/includes/Global.hpp
new file mode 100644
index 0000000..bfb808a
--- /dev/null
+++ b/src/includes/Global.hpp
@@ -0,0 +1,12 @@
+#ifndef GLOBAL_H
+#define GLOBAL_H
+
+#include<random>
+#define seseku(a,b) a.getGlobalBounds().intersects(b.getGlobalBounds())
+class Global
+{
+ public:
+ static std::mt19937 rng;
+};
+
+#endif
diff --git a/src/includes/Player.hpp b/src/includes/Player.hpp
new file mode 100644
index 0000000..3a2a040
--- /dev/null
+++ b/src/includes/Player.hpp
@@ -0,0 +1,17 @@
+#ifndef PLAYER_H
+#define PLAYER_H
+
+#include"Entity.hpp"
+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);
+};
+
+#endif
diff --git a/src/includes/Powerup.hpp b/src/includes/Powerup.hpp
new file mode 100644
index 0000000..2b6ec72
--- /dev/null
+++ b/src/includes/Powerup.hpp
@@ -0,0 +1,13 @@
+#ifndef POWRUP_H
+#define POWERUP_H
+
+#include"Entity.hpp"
+class Powerup:public Entity
+{
+ public:
+ static float time;
+ Powerup():Entity() {}
+ Powerup(sf::Vector2f pozicija,sf::Vector2f velicina,sf::Color boja);
+};
+
+#endif
diff --git a/src/includes/State.hpp b/src/includes/State.hpp
new file mode 100644
index 0000000..fdde7b8
--- /dev/null
+++ b/src/includes/State.hpp
@@ -0,0 +1,19 @@
+#ifndef STATE_H
+#define STATE_H
+
+#include<SFML/Graphics.hpp>
+class State
+{
+ private:
+ sf::RenderWindow prozor;
+ int visina,sirina;
+ bool ischanged=0,pause=0;
+
+ void events();
+ void keyboard();
+ public:
+ State();
+ void loop();
+};
+
+#endif
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..dbb1610
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,8 @@
+#include"includes/Global.hpp"
+#include"includes/State.hpp"
+int main()
+{
+ State program;
+ program.loop();
+ return 0;
+}