Advertisement
Guest User

Untitled

a guest
Mar 1st, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.18 KB | None | 0 0
  1. #include <SFML/Graphics.hpp>
  2. #include <SFML/Audio.hpp>
  3. #include <iostream>
  4. #include <sstream>
  5. #include <math.h>
  6. #include "Menu.h"
  7.  
  8.  
  9. int main()
  10. {
  11.  
  12.  
  13. const int screenX = 600;
  14. const int screenY = 400;
  15. sf::Vector2f paddleSize(10, 60);
  16. const int ballRad = 5;
  17. float ballSpeed = 400.f;
  18. float ballAngle = 75.f;
  19. sf::Vector2f velocity;
  20.  
  21.  
  22. sf::RenderWindow window(sf::VideoMode(screenX,screenY), "Pong", sf::Style::Titlebar | sf::Style::Close);
  23. Menu menu(window.getSize().x, window.getSize().y);
  24.  
  25. window.setVerticalSyncEnabled(true);
  26.  
  27. sf::RectangleShape paddle1;
  28. paddle1.setSize(paddleSize);
  29. paddle1.setFillColor(sf::Color::White);
  30. paddle1.setPosition(paddleSize.x,(screenY/2)-paddleSize.y);
  31. paddle1.setOrigin(sf::Vector2f(paddle1.getSize().x / 2, paddle1.getSize().y / 2));
  32.  
  33. sf::RectangleShape paddle2;
  34. paddle2.setSize(paddleSize);
  35. paddle2.setFillColor(sf::Color::White);
  36. paddle2.setPosition(screenX-(paddleSize.x*2), (screenY/2)-paddleSize.y);
  37.  
  38. sf::RectangleShape topBorder;
  39. topBorder.setSize(sf::Vector2f(screenX,paddleSize.x));
  40. topBorder.setPosition(0, 0);
  41.  
  42. sf::RectangleShape botBorder;
  43. botBorder.setSize(sf::Vector2f(screenX, paddleSize.x));
  44. botBorder.setPosition(0, screenY-paddleSize.x);
  45.  
  46. sf::Font font;
  47.  
  48. if (!font.loadFromFile("digit.ttf"))
  49. return EXIT_FAILURE;
  50.  
  51. //bool Sound;
  52. sf::SoundBuffer bufferPaddle;
  53. if (!bufferPaddle.loadFromFile("res/SoundFX/paddle.wav")) {}
  54. sf::Sound soundPaddle;
  55. soundPaddle.setBuffer(bufferPaddle);
  56.  
  57. sf::SoundBuffer bufferScore;
  58. if (!bufferScore.loadFromFile("res/SoundFX/score.wav")) {}
  59. sf::Sound soundScore;
  60. soundScore.setBuffer(bufferScore);
  61.  
  62. sf::SoundBuffer bufferWall;
  63. if (!bufferWall.loadFromFile("res/SoundFX/wall.wav")) {}
  64. sf::Sound soundWall;
  65. soundWall.setBuffer(bufferWall);
  66.  
  67. int intScore1 = 0;
  68. sf::Text textScore1;
  69. std::string strScore1 = std::to_string(intScore1);
  70. textScore1.setString(strScore1);
  71. textScore1.setFont(font);
  72. textScore1.setCharacterSize(paddleSize.y*1.5f);
  73. textScore1.setPosition(sf::Vector2f(screenX/5.f, 0.f));
  74.  
  75. int intScore2 = 0;
  76. sf::Text textScore2;
  77. std::string strScore2 = std::to_string(intScore2);
  78. textScore2.setString(strScore2);
  79. textScore2.setFont(font);
  80. textScore2.setCharacterSize(paddleSize.y*1.5f);
  81. textScore2.setPosition(sf::Vector2f(365.f, 0.f));
  82.  
  83. //add sf::VertexArray, dashed line splitting map into 2
  84.  
  85. sf::Vertex line[] =
  86. {
  87. sf::Vertex(sf::Vector2f(screenX/2+1,0)),
  88. sf::Vertex(sf::Vector2f(screenX/2+1,screenY))
  89. };
  90.  
  91. sf::CircleShape ball(ballRad);
  92. ball.setPointCount(10);
  93. ball.setFillColor(sf::Color::White);
  94. ball.setPosition(sf::Vector2f(screenX/2.f, screenY/2.f));
  95.  
  96. //run prog as long as the window is open
  97. sf::Clock clock;
  98. bool Playing = false;
  99. while (window.isOpen())
  100. {
  101. if (Playing)
  102. {
  103. float deltaTime = clock.restart().asSeconds();
  104. float factor = deltaTime * ballSpeed;
  105. velocity.x = std::cos(ballAngle)*factor;
  106. velocity.y = std::sin(ballAngle)*factor;
  107.  
  108. ball.move(velocity.x, velocity.y);
  109.  
  110. if ((ball.getGlobalBounds().intersects(paddle2.getGlobalBounds())) || ball.getGlobalBounds().intersects(paddle1.getGlobalBounds()))
  111. {
  112. ball.move(-ball.move);
  113. velocity.x = -(velocity.x);
  114. ballSpeed = -ballSpeed;
  115. ballAngle = -ballAngle;
  116. soundPaddle.play();
  117. }
  118.  
  119.  
  120. if (ball.getGlobalBounds().intersects(topBorder.getGlobalBounds()) || ball.getGlobalBounds().intersects(botBorder.getGlobalBounds()))
  121. {
  122. velocity.x = -velocity.x;
  123. ballAngle = -ballAngle;
  124. soundWall.play();
  125. }
  126.  
  127. if ((sf::Keyboard::isKeyPressed(sf::Keyboard::W)) && !(paddle1.getGlobalBounds().intersects(topBorder.getGlobalBounds()))) //only move up if not touching top border
  128. paddle1.move(sf::Vector2f(0, -(paddleSize.x / 2)));
  129. if ((sf::Keyboard::isKeyPressed(sf::Keyboard::S)) && !(paddle1.getGlobalBounds().intersects(botBorder.getGlobalBounds())))
  130. paddle1.move(sf::Vector2f(0, paddleSize.x / 2));
  131.  
  132. if ((sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) && !(paddle2.getGlobalBounds().intersects(topBorder.getGlobalBounds())))
  133. paddle2.move(sf::Vector2f(0, -(paddleSize.x / 2)));
  134. if ((sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) && !(paddle2.getGlobalBounds().intersects(botBorder.getGlobalBounds())))
  135. paddle2.move(sf::Vector2f(0, paddleSize.x / 2));
  136.  
  137. if (ball.getPosition().x > paddle2.getPosition().x + 2*ballRad)
  138. {
  139. intScore1++;
  140. strScore1 = std::to_string(intScore1);
  141. textScore1.setString(strScore1);
  142. ball.setPosition(sf::Vector2f(screenX / 2, screenY / 2));
  143. soundScore.play();
  144. }
  145.  
  146. if (ball.getPosition().x < paddle1.getPosition().x - 2*ballRad)
  147. {
  148. intScore2++;
  149. strScore2 = std::to_string(intScore2);
  150. textScore2.setString(strScore2);
  151. ball.setPosition(sf::Vector2f(screenX/2, screenY/2));
  152. soundScore.play();
  153. }
  154.  
  155.  
  156. window.clear(sf::Color::Black);
  157. window.draw(paddle1);
  158. window.draw(paddle2);
  159. window.draw(ball);
  160. window.draw(topBorder);
  161. window.draw(botBorder);
  162. window.draw(line, 2, sf::Lines);
  163. window.draw(textScore1);
  164. window.draw(textScore2);
  165. window.display();
  166. }
  167.  
  168. if (!Playing)
  169. {
  170. window.clear(sf::Color::Black);
  171. menu.draw(window);
  172. window.display();
  173. }
  174.  
  175.  
  176.  
  177. //check all the window's events that were triggered since the last iteration of the loop
  178. sf::Event event;
  179. while (window.pollEvent(event))
  180. {
  181.  
  182. //"close requested" event: we close the window
  183.  
  184. switch (event.type)
  185. {
  186. case sf::Event::Closed:
  187. window.close();
  188.  
  189. case sf::Event::KeyPressed:
  190. switch (event.key.code)
  191. case sf::Keyboard::Escape:
  192. Playing = false;
  193. break;
  194.  
  195. case sf::Event::KeyReleased: //menu controls
  196. switch (event.key.code)
  197. {
  198. case sf::Keyboard::Up:
  199. case sf::Keyboard::W:
  200. menu.MoveUp();
  201. break;
  202. case sf::Keyboard::Down:
  203. case sf::Keyboard::S:
  204. menu.MoveDown();
  205. break;
  206.  
  207. case sf::Keyboard::Return:
  208. switch (menu.GetPressedItem())
  209. {
  210. case 0:
  211. Playing = true;
  212. break;
  213. case 1:
  214. //open sound menu
  215. //Sound = !Sound; add to sound menu
  216. break;
  217. case 2:
  218. window.close();
  219. break;
  220. }
  221. break;
  222. }
  223. break;
  224. }
  225.  
  226. }
  227.  
  228. }
  229. return EXIT_SUCCESS;
  230. }
  231.  
  232. #pragma once
  233. #include <SFML/Graphics.hpp>
  234.  
  235. #define MAX_NUMBER_ITEMS 3
  236.  
  237. class Menu
  238. {
  239. public:
  240. Menu(float width, float height);
  241. ~Menu();
  242.  
  243. void draw(sf::RenderWindow &window);
  244. void MoveUp();
  245. void MoveDown();
  246. int GetPressedItem() { return selectecItemIndex; }
  247.  
  248. private:
  249. int selectecItemIndex;
  250. sf::Font font;
  251. sf::Text menu[MAX_NUMBER_ITEMS];
  252. };
  253.  
  254. #include "Menu.h"
  255.  
  256.  
  257.  
  258. Menu::Menu(float width, float height)
  259. {
  260. if (!font.loadFromFile("pong.ttf"))
  261. { }
  262.  
  263.  
  264. menu[0].setFont(font);
  265. menu[0].setFillColor(sf::Color(128,128,128));
  266. menu[0].setString("Play");
  267. menu[0].setPosition(sf::Vector2f(width / 2,height /(MAX_NUMBER_ITEMS+1)*1));
  268.  
  269. menu[1].setFont(font);
  270. menu[1].setFillColor(sf::Color::White);
  271. menu[1].setString("Options");
  272. menu[1].setPosition(sf::Vector2f(width / 2,height /(MAX_NUMBER_ITEMS+1)*2));
  273.  
  274. menu[2].setFont(font);
  275. menu[2].setFillColor(sf::Color::White);
  276. menu[2].setString("Exit");
  277. menu[2].setPosition(sf::Vector2f(width / 2,height/(MAX_NUMBER_ITEMS+1)*3));
  278.  
  279. selectecItemIndex = 0;
  280. }
  281.  
  282.  
  283. Menu::~Menu()
  284. {
  285. }
  286.  
  287. void Menu::draw(sf::RenderWindow &window)
  288. {
  289. for (int i = 0; i < MAX_NUMBER_ITEMS; i++)
  290. {
  291. window.draw(menu[i]);
  292. }
  293. }
  294.  
  295. void Menu::MoveUp()
  296. {
  297. if (selectecItemIndex - 1 >= 0)
  298. {
  299. menu[selectecItemIndex].setFillColor(sf::Color::White);
  300. selectecItemIndex--;
  301. menu[selectecItemIndex].setFillColor(sf::Color(128,128,128));
  302. }
  303. }
  304.  
  305. void Menu::MoveDown()
  306. {
  307. if (selectecItemIndex + 1 < MAX_NUMBER_ITEMS)
  308. {
  309. menu[selectecItemIndex].setFillColor(sf::Color::White);
  310. selectecItemIndex++;
  311. menu[selectecItemIndex].setFillColor(sf::Color(128, 128, 128));
  312. }
  313. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement