Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SFML/Graphics.hpp>
- #include"Cegla.h"
- #include"Kulka.h"
- #include"Paletka.h"
- #include"Prostokat.h"
- #include <Windows.h>
- using namespace sf;
- using namespace std;
- //OBSLUGA KOLIZJI
- template <class T1, class T2> // TWORZY DWA ELEMENTY TEMPLATE
- // TYP BOOL ZWRACA 0 LUB 1
- bool przecina(T1& mA, T2& mB) // NA PODSTAWIE DWÓCH WCZESNIEJ UTWORZONYCH ELEMENTOW SPRAWDZA CZY SIE PZRECINAJA (KOLIZJA)
- {
- return mA.right() >= mB.left() && mA.left() <= mB.right() &&
- mA.bottom() >= mB.top() && mA.top() <= mB.bottom();
- }
- //KOLIZJE DLA PALETKI I KULKI
- void testKolizji(Paletka& mPaletka, Kulka& mKulka)
- {
- if (!przecina(mPaletka, mKulka)) return; //JESLI NIE PRZECINA TO WYCHODZIMY Z FUNKCJI
- mKulka.velocity.y = -kulkaPredkosc; // UJEMNA PREDKOSC TO PO PROSTU LOT KULKI W PRZECIWNA STRONE
- if (mKulka.x() < mPaletka.x())
- mKulka.velocity.x = -kulkaPredkosc;
- else
- mKulka.velocity.x = kulkaPredkosc;
- }
- // KOLIZJE DLA CEGIEL I KULKI
- void testKolizji1(Cegla& mCegla, Kulka& mKulka)
- {
- if (!przecina(mCegla, mKulka)) return; //JESLI WYSTAPILA KOLIZJA
- mCegla.zniszcz = true; //NISZCZY CEGLE
- do_win--;
- //FUNKCJE LICZA O ILE KULKA PRZECIELA CEGLE ABY
- float overlapLeft{ mKulka.right() - mCegla.left() };
- float overlapRight{ mCegla.right() - mKulka.left() };
- float overlapTop{ mKulka.bottom() - mCegla.top() };
- float overlapBottom{ mCegla.bottom() - mKulka.top() };
- //OKRESLAMY Z KTOREJ STRONY KULKA UDERZYLA CEGLE ABY REALNIE ODBIC JA OD ZBITEJ JUZ CEGLY
- bool ballFromLeft(abs(overlapLeft) < abs(overlapRight));
- bool ballFromTop(abs(overlapTop) < abs(overlapBottom));
- float minOverlapX{ ballFromLeft ? overlapLeft : overlapRight };
- float minOverlapY{ ballFromTop ? overlapTop : overlapBottom };
- if (abs(minOverlapX) < abs(minOverlapY))
- mKulka.velocity.x = ballFromLeft ? -kulkaPredkosc : kulkaPredkosc;
- else
- mKulka.velocity.y = ballFromTop ? -kulkaPredkosc : kulkaPredkosc;
- }
- int main()
- {
- Kulka ball( oknoSzerokosc / 2, oknoWysokosc / 2 ); // OBIEKT KLASY KULKA USTAWIONY NA SRODEK OKNA
- Paletka paletka( oknoSzerokosc/ 2, oknoWysokosc - 50); //OBIEKT KLASY PALETKA ODPOWIEDNIO UMIEJSCOWIONY
- // PRZY URZYCIU "STD::VECTOR" USTALA ILOSC KLOCKOW DO WYSWIETLENIA I ZAPISUJE DO ZMIENNEJ BRICKS
- vector<Cegla> bricks;
- //WYPELNIA WCZESNIEJ ZADEKLAROWANY WEKTOR KLOCKAMI Z UWZGLEDNIENIEM ODSTEPOW PION I POZIOM
- for (int iX= 0 ; iX < liczBloczkiX; ++iX)
- for (int iY= 0; iY < liczBloczkiY; ++iY)
- bricks.emplace_back((iX + 1) * (blokSzer + 3) + 22, (iY + 2) * (blokWys + 3));
- //TWORZY OKNO GRY I USTAWIA TEXTURE
- RenderWindow window(VideoMode( oknoSzerokosc, oknoWysokosc ), "MALEC_LUKASZ_L05", Style::Titlebar);
- window.setFramerateLimit(60);
- Texture backgroundTexture;
- if (!backgroundTexture.loadFromFile("image.png"))
- return EXIT_FAILURE;
- Sprite background(backgroundTexture);
- while (true)
- {
- window.clear(); //CZYSCI OKNO DO STANU PIERWOTENGO
- window.draw(background);
- if (Keyboard::isKeyPressed(Keyboard::Key::Escape)) break; // ESC - WYJSCIE
- ball.update(); // "ODSWIEZA" POLOZENIE PILKI
- paletka.update(); // ODSWIEZA POLOZENIE PALETKI
- testKolizji(paletka, ball);
- //TAKA SKLADNIA SPRAWDZA KOLIZJE DLA KAZDEJ CEGLY
- for (auto& brick : bricks) testKolizji1(brick, ball);
- //FUNKCJA ERASE-REMOVE ZASTOSOWANA ABY USUWAC WSZYSTKIE ZBITE CEGLY
- bricks.erase(remove_if(begin(bricks), end(bricks),[](const Cegla& mCegla)
- {
- return mCegla.zniszcz;
- }),
- end(bricks));
- //"IFY" DO OBSLUGI ZDARZEN WYGRANA I PRZEGRANA
- if (ball.bottom() > oknoWysokosc)
- {
- ball.velocity.y = -kulkaPredkosc;
- zycia--;
- }
- if(zycia==0)
- {
- Font font;
- font.loadFromFile("sansation.ttf"); //ładowanie czcionki
- Text end("PRZEGRANA :(", font, 50); //napis końcowy
- end.setPosition(oknoSzerokosc / 2 - 180, oknoWysokosc / 2 - 50);
- window.clear(Color::Red);
- window.draw(end);
- window.display();
- Sleep(2000);
- break;
- }
- if (do_win == 0)
- {
- Font font;
- font.loadFromFile("sansation.ttf"); //ładowanie czcionki
- Text end("WYGRANA!", font, 50); //napis końcowy
- end.setPosition(oknoSzerokosc / 2 - 180, oknoWysokosc / 2 - 50);
- window.clear(Color::Blue);
- window.draw(end);
- window.display();
- Sleep(2000);
- break;
- }
- window.draw(ball.shape); // WYSWIETLA KULKE
- window.draw(paletka.shape); // WYSWIETLA PALETKE
- //"AUTO" AUTOMATYCZNIE DOSTOSOWUJE TYP ZMIENNEJ , TAKA SKLADNIA PETLI WYSWIETLA OBIEKTY Z VECTORA BRICKS
- for (auto& brick : bricks) window.draw(brick.shape);
- window.display(); // WYSWIETLA OKNO
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement