Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2018
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.61 KB | None | 0 0
  1. #include <SFML/Graphics.hpp>
  2.  
  3. #include"Cegla.h"
  4. #include"Kulka.h"
  5. #include"Paletka.h"
  6. #include"Prostokat.h"
  7. #include <Windows.h>
  8.  
  9. using namespace sf;
  10. using namespace std;
  11.  
  12. //OBSLUGA KOLIZJI
  13. template <class T1, class T2> // TWORZY DWA ELEMENTY TEMPLATE
  14. // TYP BOOL ZWRACA 0 LUB 1
  15. bool przecina(T1& mA, T2& mB) // NA PODSTAWIE DWÓCH WCZESNIEJ UTWORZONYCH ELEMENTOW SPRAWDZA CZY SIE PZRECINAJA (KOLIZJA)
  16. {
  17. return mA.right() >= mB.left() && mA.left() <= mB.right() &&
  18. mA.bottom() >= mB.top() && mA.top() <= mB.bottom();
  19. }
  20. //KOLIZJE DLA PALETKI I KULKI
  21. void testKolizji(Paletka& mPaletka, Kulka& mKulka)
  22. {
  23. if (!przecina(mPaletka, mKulka)) return; //JESLI NIE PRZECINA TO WYCHODZIMY Z FUNKCJI
  24.  
  25. mKulka.velocity.y = -kulkaPredkosc; // UJEMNA PREDKOSC TO PO PROSTU LOT KULKI W PRZECIWNA STRONE
  26.  
  27. if (mKulka.x() < mPaletka.x())
  28. mKulka.velocity.x = -kulkaPredkosc;
  29. else
  30. mKulka.velocity.x = kulkaPredkosc;
  31. }
  32.  
  33. // KOLIZJE DLA CEGIEL I KULKI
  34.  
  35. void testKolizji1(Cegla& mCegla, Kulka& mKulka)
  36. {
  37. if (!przecina(mCegla, mKulka)) return; //JESLI WYSTAPILA KOLIZJA
  38.  
  39. mCegla.zniszcz = true; //NISZCZY CEGLE
  40. do_win--;
  41. //FUNKCJE LICZA O ILE KULKA PRZECIELA CEGLE ABY
  42. float overlapLeft{ mKulka.right() - mCegla.left() };
  43. float overlapRight{ mCegla.right() - mKulka.left() };
  44. float overlapTop{ mKulka.bottom() - mCegla.top() };
  45. float overlapBottom{ mCegla.bottom() - mKulka.top() };
  46. //OKRESLAMY Z KTOREJ STRONY KULKA UDERZYLA CEGLE ABY REALNIE ODBIC JA OD ZBITEJ JUZ CEGLY
  47. bool ballFromLeft(abs(overlapLeft) < abs(overlapRight));
  48. bool ballFromTop(abs(overlapTop) < abs(overlapBottom));
  49. float minOverlapX{ ballFromLeft ? overlapLeft : overlapRight };
  50. float minOverlapY{ ballFromTop ? overlapTop : overlapBottom };
  51. if (abs(minOverlapX) < abs(minOverlapY))
  52. mKulka.velocity.x = ballFromLeft ? -kulkaPredkosc : kulkaPredkosc;
  53. else
  54. mKulka.velocity.y = ballFromTop ? -kulkaPredkosc : kulkaPredkosc;
  55. }
  56.  
  57.  
  58.  
  59. int main()
  60. {
  61. Kulka ball( oknoSzerokosc / 2, oknoWysokosc / 2 ); // OBIEKT KLASY KULKA USTAWIONY NA SRODEK OKNA
  62. Paletka paletka( oknoSzerokosc/ 2, oknoWysokosc - 50); //OBIEKT KLASY PALETKA ODPOWIEDNIO UMIEJSCOWIONY
  63.  
  64. // PRZY URZYCIU "STD::VECTOR" USTALA ILOSC KLOCKOW DO WYSWIETLENIA I ZAPISUJE DO ZMIENNEJ BRICKS
  65. vector<Cegla> bricks;
  66. //WYPELNIA WCZESNIEJ ZADEKLAROWANY WEKTOR KLOCKAMI Z UWZGLEDNIENIEM ODSTEPOW PION I POZIOM
  67. for (int iX= 0 ; iX < liczBloczkiX; ++iX)
  68. for (int iY= 0; iY < liczBloczkiY; ++iY)
  69. bricks.emplace_back((iX + 1) * (blokSzer + 3) + 22, (iY + 2) * (blokWys + 3));
  70.  
  71. //TWORZY OKNO GRY I USTAWIA TEXTURE
  72. RenderWindow window(VideoMode( oknoSzerokosc, oknoWysokosc ), "MALEC_LUKASZ_L05", Style::Titlebar);
  73. window.setFramerateLimit(60);
  74. Texture backgroundTexture;
  75. if (!backgroundTexture.loadFromFile("image.png"))
  76. return EXIT_FAILURE;
  77. Sprite background(backgroundTexture);
  78.  
  79. while (true)
  80. {
  81. window.clear(); //CZYSCI OKNO DO STANU PIERWOTENGO
  82.  
  83. window.draw(background);
  84.  
  85.  
  86. if (Keyboard::isKeyPressed(Keyboard::Key::Escape)) break; // ESC - WYJSCIE
  87. ball.update(); // "ODSWIEZA" POLOZENIE PILKI
  88. paletka.update(); // ODSWIEZA POLOZENIE PALETKI
  89. testKolizji(paletka, ball);
  90. //TAKA SKLADNIA SPRAWDZA KOLIZJE DLA KAZDEJ CEGLY
  91. for (auto& brick : bricks) testKolizji1(brick, ball);
  92. //FUNKCJA ERASE-REMOVE ZASTOSOWANA ABY USUWAC WSZYSTKIE ZBITE CEGLY
  93. bricks.erase(remove_if(begin(bricks), end(bricks),[](const Cegla& mCegla)
  94. {
  95. return mCegla.zniszcz;
  96. }),
  97. end(bricks));
  98.  
  99. //"IFY" DO OBSLUGI ZDARZEN WYGRANA I PRZEGRANA
  100. if (ball.bottom() > oknoWysokosc)
  101. {
  102. ball.velocity.y = -kulkaPredkosc;
  103. zycia--;
  104. }
  105. if(zycia==0)
  106. {
  107. Font font;
  108. font.loadFromFile("sansation.ttf"); //ładowanie czcionki
  109. Text end("PRZEGRANA :(", font, 50); //napis końcowy
  110. end.setPosition(oknoSzerokosc / 2 - 180, oknoWysokosc / 2 - 50);
  111.  
  112. window.clear(Color::Red);
  113. window.draw(end);
  114. window.display();
  115. Sleep(2000);
  116. break;
  117.  
  118. }
  119.  
  120. if (do_win == 0)
  121. {
  122. Font font;
  123. font.loadFromFile("sansation.ttf"); //ładowanie czcionki
  124. Text end("WYGRANA!", font, 50); //napis końcowy
  125. end.setPosition(oknoSzerokosc / 2 - 180, oknoWysokosc / 2 - 50);
  126. window.clear(Color::Blue);
  127. window.draw(end);
  128. window.display();
  129. Sleep(2000);
  130. break;
  131. }
  132.  
  133. window.draw(ball.shape); // WYSWIETLA KULKE
  134. window.draw(paletka.shape); // WYSWIETLA PALETKE
  135.  
  136. //"AUTO" AUTOMATYCZNIE DOSTOSOWUJE TYP ZMIENNEJ , TAKA SKLADNIA PETLI WYSWIETLA OBIEKTY Z VECTORA BRICKS
  137. for (auto& brick : bricks) window.draw(brick.shape);
  138.  
  139. window.display(); // WYSWIETLA OKNO
  140. }
  141.  
  142. return 0;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement