Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // main.cpp
- #include <SFML/Graphics.hpp>
- #include <string>
- #include <iostream>
- int main(void)
- {
- // variables
- std::string name = "Pong";
- int screenWidth = 1280;
- int screenHeight = 720;
- int framerate = 60;
- int characterSize = 200;
- float ballDiameter = 20;
- float ballSpeed = 5;
- float paddleWidth = 20;
- float paddleHeight = 100;
- float paddleSpeed = 5;
- int player1score = 0;
- int player2score = 0;
- sf::Font font;
- font.loadFromFile("arial.ttf");
- sf::RectangleShape background;
- background.setSize(sf::Vector2f(10, 30));
- background.setFillColor(sf::Color(63, 63, 63));
- sf::Vector2f ballDirection(ballSpeed, ballSpeed);
- sf::Vector2f paddle1Direction(0, 0);
- sf::Vector2f paddle2Direction(0, 0);
- // window
- sf::VideoMode videoMode(screenWidth, screenHeight);
- sf::RenderWindow window;
- window.create(videoMode, name);
- window.setFramerateLimit(framerate);
- // ball
- sf::CircleShape ball(ballDiameter/2);
- ball.setFillColor(sf::Color::Red);
- ball.setPosition(screenWidth / 2.0f, screenHeight / 2.0f);
- // player1
- sf::RectangleShape player1paddle(sf::Vector2f(paddleWidth, paddleHeight));
- player1paddle.setFillColor(sf::Color::Blue);
- player1paddle.setPosition(paddleWidth, screenHeight / 2 - paddleHeight / 2);
- sf::Text player1text;
- player1text.setFont(font);
- player1text.setCharacterSize(characterSize);
- player1text.setFillColor(sf::Color(63, 63, 63));
- player1text.setPosition(screenWidth / 2.0f - 175.0f, 0.0f);
- // player2
- sf::RectangleShape player2paddle(sf::Vector2f(paddleWidth, paddleHeight));
- player2paddle.setFillColor(sf::Color::Blue);
- player2paddle.setPosition(screenWidth - 2 * paddleWidth, screenHeight / 2 - paddleHeight / 2);
- sf::Text player2text;
- player2text.setFont(font);
- player2text.setCharacterSize(characterSize);
- player2text.setFillColor(sf::Color(63, 63, 63));
- player2text.setPosition(screenWidth / 2.0f + 50.0f, 0.0f);
- // game loop
- while (window.isOpen())
- {
- sf::Event event;
- // event polling
- while (window.pollEvent(event))
- {
- switch (event.type)
- {
- case sf::Event::Closed:
- window.close();
- break;
- case sf::Event::KeyPressed:
- switch (event.key.code)
- {
- case sf::Keyboard::Escape:
- window.close();
- break;
- case sf::Keyboard::Space:
- window.setFramerateLimit(1);
- break;
- case sf::Keyboard::W:
- paddle1Direction.y = -paddleSpeed;
- break;
- case sf::Keyboard::S:
- paddle1Direction.y = paddleSpeed;
- break;
- case sf::Keyboard::Up:
- paddle2Direction.y = -paddleSpeed;
- break;
- case sf::Keyboard::Down:
- paddle2Direction.y = paddleSpeed;
- break;
- default:
- break;
- }
- break;
- case sf::Event::KeyReleased:
- switch (event.key.code)
- {
- case sf::Keyboard::W:
- case sf::Keyboard::S:
- paddle1Direction.y = 0;
- break;
- case sf::Keyboard::Up:
- case sf::Keyboard::Down:
- paddle2Direction.y = 0;
- break;
- case sf::Keyboard::Space:
- window.setFramerateLimit(60);
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- }
- // update objects
- sf::Vector2f ballPosition = ball.getPosition();
- if (ballPosition.x > screenWidth - ballDiameter * 3 - ballSpeed && ballDirection.x > 0)
- {
- if (ball.getPosition().y > player2paddle.getPosition().y &&
- ball.getPosition().y - ballDiameter < player2paddle.getPosition().y + paddleHeight)
- {
- ballDirection.x = -ballSpeed;
- }
- else
- {
- player2score++;
- ballPosition = sf::Vector2f(screenWidth / 2.0f, screenHeight / 2.0f);
- }
- }
- else if (ballPosition.x < 0 + ballDiameter * 2 + ballSpeed && ballDirection.x < 0)
- {
- if (ball.getPosition().y > player1paddle.getPosition().y &&
- ball.getPosition().y - ballDiameter < player1paddle.getPosition().y + paddleHeight)
- {
- ballDirection.x = ballSpeed;
- }
- else
- {
- player1score++;
- ballPosition = sf::Vector2f(screenWidth / 2.0f, screenHeight / 2.0f);
- }
- }
- if (ballPosition.y > screenHeight - ballDiameter - ballSpeed && ballDirection.y > 0)
- {
- ballDirection.y = -ballSpeed;
- }
- else if (ballPosition.y < 0 + ballSpeed && ballDirection.y < 0)
- {
- ballDirection.y = ballSpeed;
- }
- player1text.setString(std::to_string(player1score));
- player2text.setString(std::to_string(player2score));
- ball.setPosition(ballPosition + ballDirection);
- player1paddle.setPosition(player1paddle.getPosition() + paddle1Direction);
- player2paddle.setPosition(player2paddle.getPosition() + paddle2Direction);
- // clear window
- window.clear();
- // draw obects
- for (float i = 5; i < screenHeight; i += 40)
- {
- background.setPosition(screenWidth / 2.0f - 5.0f, i);
- window.draw(background);
- }
- window.draw(player1text);
- window.draw(player2text);
- window.draw(ball);
- window.draw(player1paddle);
- window.draw(player2paddle);
- // display window
- window.display();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement