SFML Pong, but object oriented

functions.cpp 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #include "Classes.h"
  2. #include "Game.h"
  3. #include <cmath>
  4. #include <iostream>
  5. Ball::Ball() {
  6. if (!ballSoundBuffer.loadFromFile("resources/ball.wav"))
  7. exit(EXIT_FAILURE);
  8. ballSound.setBuffer(ballSoundBuffer);
  9. setRadius(radius);
  10. setOutlineThickness(3);
  11. setOutlineColor(sf::Color::Black);
  12. setFillColor(sf::Color::White);
  13. setOrigin(radius / 2, radius / 2);
  14. }
  15. Ball::Ball(int r) {
  16. setRadius(r);
  17. setOutlineThickness(3);
  18. setOutlineColor(sf::Color::Black);
  19. setFillColor(sf::Color::White);
  20. setOrigin(r / 2, r / 2);
  21. radius = r;
  22. }
  23. float Ball::getX() const {
  24. return getPosition().x;
  25. }
  26. float Ball::getY() const {
  27. return getPosition().y;
  28. }
  29. void Ball::setPosition(float x, float y) {
  30. sf::Transformable::setPosition(x, y);
  31. }
  32. float Ball::getSpeed() const {
  33. return ballSpeed;
  34. }
  35. void Ball::move(float x, float y) {
  36. sf::Transformable::move(x, y);
  37. }
  38. float Ball::getRadius() const {
  39. return radius;
  40. }
  41. float Ball::getAngle() const {
  42. return angle;
  43. }
  44. void Ball::setAngle(float a) {
  45. angle = a;
  46. }
  47. void Ball::checkLeftPaddle(const Paddle &leftPaddle) {
  48. if (getPosition().x - radius < leftPaddle.getX() + leftPaddle.getSize().x / 2 &&
  49. getPosition().x - radius > leftPaddle.getX() &&
  50. getPosition().y + radius <= leftPaddle.getY() + leftPaddle.getSize().y / 2 &&
  51. getPosition().y - radius >= leftPaddle.getY() - leftPaddle.getSize().y / 2)
  52. {
  53. if (getPosition().y > leftPaddle.getY())
  54. angle = M_PI - angle + (rand() % 20) * M_PI / 180;
  55. else
  56. angle = M_PI - angle - (rand() % 20) * M_PI / 180;
  57. ballSound.play();
  58. setPosition(leftPaddle.getX() + radius + leftPaddle.getSize().x / 2 + 0.1f, getPosition().y);
  59. }
  60. }
  61. void Ball::checkRightPaddle(const Paddle &rightPaddle) {
  62. if (getPosition().x + radius > rightPaddle.getX() - rightPaddle.getSize().x / 2 &&
  63. getPosition().x + radius < rightPaddle.getX() &&
  64. getPosition().y + radius >= rightPaddle.getY() - rightPaddle.getSize().y / 2 &&
  65. getPosition().y - radius <= rightPaddle.getY() + rightPaddle.getSize().y / 2)
  66. {
  67. if (getPosition().y > rightPaddle.getY())
  68. angle = M_PI - angle + (rand() % 20) * M_PI / 180;
  69. else
  70. angle = M_PI - angle - (rand() % 20) * M_PI / 180;
  71. ballSound.play();
  72. setPosition(rightPaddle.getX() - radius - rightPaddle.getSize().x / 2 - 0.1, getPosition().y);
  73. }
  74. }
  75. void Ball::checkCollisions() {
  76. if (getY() - radius < 0.f)
  77. {
  78. ballSound.play();
  79. angle = -angle;
  80. setPosition(getX(), radius + 0.1);
  81. }
  82. if (getY() + radius > gameHeight)
  83. {
  84. ballSound.play();
  85. angle = -angle;
  86. setPosition(getX(), gameHeight - radius - 0.1);
  87. }
  88. }
  89. Paddle::Paddle() {
  90. size.x = 25;
  91. size.y = 100;
  92. setSize(sf::Vector2f(25, 100) - sf::Vector2f(3, 3));
  93. setOutlineThickness(3);
  94. setOutlineColor(sf::Color::Black);
  95. setFillColor(sf::Color(200, 200, 200));
  96. setOrigin(sf::Vector2f(25, 100) / 2.f);
  97. }
  98. float Paddle::getY() const {
  99. return getPosition().y;
  100. }
  101. float Paddle::getX() const {
  102. return getPosition().x;
  103. }
  104. void Paddle::setPosition(float x, float y) {
  105. sf::Transformable::setPosition(x, y);
  106. }
  107. sf::Vector2f Paddle::getSize() const {
  108. return size;
  109. }
  110. void Paddle::move(float x, float y) {
  111. sf::Transformable::move(x, y);
  112. }
  113. Game::Game() {
  114. isPlaying = false;
  115. AITime = sf::seconds(0.1);
  116. paddleSpeed = 400;
  117. rightPaddleSpeed = 0;
  118. ballAngle = 0;
  119. }