beefviper

Pong 0.02

Mar 20th, 2019
163
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // main.cpp
  2.  
  3. #include <SFML/Graphics.hpp>
  4. #include <string>
  5. #include <iostream>
  6.  
  7. int main(void)
  8. {
  9.     // variables
  10.     std::string name = "Pong";
  11.     int screenWidth = 1280;
  12.     int screenHeight = 720;
  13.     int framerate = 60;
  14.     int characterSize = 200;
  15.     float ballDiameter = 20;
  16.     float ballSpeed = 5;
  17.     float paddleWidth = 20;
  18.     float paddleHeight = 100;
  19.     float paddleSpeed = 5;
  20.     int player1score = 0;
  21.     int player2score = 0;
  22.  
  23.     sf::Font font;
  24.     font.loadFromFile("arial.ttf");
  25.  
  26.     sf::RectangleShape background;
  27.     background.setSize(sf::Vector2f(10, 30));
  28.     background.setFillColor(sf::Color(63, 63, 63));
  29.  
  30.     sf::Vector2f ballDirection(ballSpeed, ballSpeed);
  31.     sf::Vector2f paddle1Direction(0, 0);
  32.     sf::Vector2f paddle2Direction(0, 0);
  33.  
  34.     // window
  35.     sf::VideoMode videoMode(screenWidth, screenHeight);
  36.     sf::RenderWindow window;
  37.     window.create(videoMode, name);
  38.     window.setFramerateLimit(framerate);
  39.  
  40.     // ball
  41.     sf::CircleShape ball(ballDiameter/2);
  42.     ball.setFillColor(sf::Color::Red);
  43.     ball.setPosition(screenWidth / 2.0f, screenHeight / 2.0f);
  44.  
  45.     // player1
  46.     sf::RectangleShape player1paddle(sf::Vector2f(paddleWidth, paddleHeight));
  47.     player1paddle.setFillColor(sf::Color::Blue);
  48.     player1paddle.setPosition(paddleWidth, screenHeight / 2 - paddleHeight / 2);
  49.  
  50.     sf::Text player1text;
  51.     player1text.setFont(font);
  52.     player1text.setCharacterSize(characterSize);
  53.     player1text.setFillColor(sf::Color(63, 63, 63));
  54.     player1text.setPosition(screenWidth / 2.0f - 175.0f, 0.0f);
  55.  
  56.     // player2
  57.     sf::RectangleShape player2paddle(sf::Vector2f(paddleWidth, paddleHeight));
  58.     player2paddle.setFillColor(sf::Color::Blue);
  59.     player2paddle.setPosition(screenWidth - 2 * paddleWidth, screenHeight / 2 - paddleHeight / 2);
  60.  
  61.     sf::Text player2text;
  62.     player2text.setFont(font);
  63.     player2text.setCharacterSize(characterSize);
  64.     player2text.setFillColor(sf::Color(63, 63, 63));
  65.     player2text.setPosition(screenWidth / 2.0f + 50.0f, 0.0f);
  66.  
  67.     // game loop
  68.     while (window.isOpen())
  69.     {
  70.  
  71.         sf::Event event;
  72.  
  73.         // event polling
  74.         while (window.pollEvent(event))
  75.         {
  76.             switch (event.type)
  77.             {
  78.             case sf::Event::Closed:
  79.                 window.close();
  80.                 break;
  81.  
  82.             case sf::Event::KeyPressed:
  83.                 switch (event.key.code)
  84.                 {
  85.                 case sf::Keyboard::Escape:
  86.                     window.close();
  87.                     break;
  88.  
  89.                 case sf::Keyboard::Space:
  90.                     window.setFramerateLimit(1);
  91.                     break;
  92.  
  93.                 case sf::Keyboard::W:
  94.                     paddle1Direction.y = -paddleSpeed;
  95.                     break;
  96.  
  97.                 case sf::Keyboard::S:
  98.                     paddle1Direction.y = paddleSpeed;
  99.                     break;
  100.  
  101.                 case sf::Keyboard::Up:
  102.                     paddle2Direction.y = -paddleSpeed;
  103.                     break;
  104.  
  105.                 case sf::Keyboard::Down:
  106.                     paddle2Direction.y = paddleSpeed;
  107.                     break;
  108.  
  109.                 default:
  110.                     break;
  111.                 }
  112.                 break;
  113.  
  114.  
  115.             case sf::Event::KeyReleased:
  116.                 switch (event.key.code)
  117.                 {
  118.                 case sf::Keyboard::W:
  119.                 case sf::Keyboard::S:
  120.                     paddle1Direction.y = 0;
  121.                     break;
  122.  
  123.                 case sf::Keyboard::Up:
  124.                 case sf::Keyboard::Down:
  125.                     paddle2Direction.y = 0;
  126.                     break;
  127.  
  128.                 case sf::Keyboard::Space:
  129.                     window.setFramerateLimit(60);
  130.                     break;
  131.  
  132.                 default:
  133.                     break;
  134.                 }
  135.                 break;
  136.  
  137.             default:
  138.                 break;
  139.             }
  140.         }
  141.  
  142.         // update objects
  143.         sf::Vector2f ballPosition = ball.getPosition();
  144.         if (ballPosition.x > screenWidth - ballDiameter * 3 - ballSpeed && ballDirection.x > 0)
  145.         {
  146.             if (ball.getPosition().y > player2paddle.getPosition().y &&
  147.                 ball.getPosition().y - ballDiameter < player2paddle.getPosition().y + paddleHeight)
  148.             {
  149.                 ballDirection.x = -ballSpeed;
  150.             }
  151.             else
  152.             {
  153.                 player2score++;
  154.                 ballPosition = sf::Vector2f(screenWidth / 2.0f, screenHeight / 2.0f);
  155.             }
  156.         }
  157.         else if (ballPosition.x < 0 + ballDiameter * 2 + ballSpeed && ballDirection.x < 0)
  158.         {
  159.             if (ball.getPosition().y > player1paddle.getPosition().y &&
  160.                 ball.getPosition().y - ballDiameter < player1paddle.getPosition().y + paddleHeight)
  161.             {
  162.                 ballDirection.x = ballSpeed;
  163.             }
  164.             else
  165.             {
  166.                 player1score++;
  167.                 ballPosition = sf::Vector2f(screenWidth / 2.0f, screenHeight / 2.0f);
  168.             }
  169.         }
  170.  
  171.         if (ballPosition.y > screenHeight - ballDiameter - ballSpeed && ballDirection.y > 0)
  172.         {
  173.             ballDirection.y = -ballSpeed;
  174.         }
  175.         else if (ballPosition.y < 0 + ballSpeed && ballDirection.y < 0)
  176.         {
  177.             ballDirection.y = ballSpeed;
  178.         }
  179.  
  180.         player1text.setString(std::to_string(player1score));
  181.         player2text.setString(std::to_string(player2score));
  182.         ball.setPosition(ballPosition + ballDirection);
  183.         player1paddle.setPosition(player1paddle.getPosition() + paddle1Direction);
  184.         player2paddle.setPosition(player2paddle.getPosition() + paddle2Direction);
  185.  
  186.         // clear window
  187.         window.clear();
  188.  
  189.         // draw obects
  190.         for (float i = 5; i < screenHeight; i += 40)
  191.         {
  192.             background.setPosition(screenWidth / 2.0f - 5.0f, i);
  193.             window.draw(background);
  194.         }
  195.  
  196.         window.draw(player1text);
  197.         window.draw(player2text);
  198.         window.draw(ball);
  199.         window.draw(player1paddle);
  200.         window.draw(player2paddle);
  201.  
  202.         // display window
  203.         window.display();
  204.     }
  205.  
  206.     return 0;
  207. }
RAW Paste Data