Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SFML/Graphics.hpp>
- #include <iostream>
- #include <cstdlib>
- #include <string>
- #include <ctime>
- using namespace sf;
- void moveBackground(RenderWindow& w, Sprite& s);
- void printText(RenderWindow& w, Text& score, bool updateScore);
- bool updateBall(RenderWindow& w, Sprite& s, Sprite& p1, Sprite& p2);
- int main() {
- RenderWindow w(VideoMode(1000, 500), "Super Mario Bros. Pong!");
- Texture bg, paddleTexture, ballTexture;
- Image windowIcon;
- Font roboto;
- std::srand(std::time(0));
- if (!bg.loadFromFile("background_2.png") || !windowIcon.loadFromFile("icon.png") || !roboto.loadFromFile("Roboto-bold.ttf") || !paddleTexture.loadFromFile("t.png")
- || !ballTexture.loadFromFile("ball.png")) {
- exit(-1);
- }
- bg.setSmooth(1);
- ballTexture.setSmooth(1);
- paddleTexture.setSmooth(1);
- paddleTexture.setRepeated(1);
- //Paddles
- Sprite paddle1(paddleTexture, IntRect(0, 0, paddleTexture.getSize().x, paddleTexture.getSize().y));
- paddle1.rotate(90);
- paddle1.setOrigin(Vector2f((float)paddle1.getGlobalBounds().width / 2, (float)paddle1.getGlobalBounds().height / 2));
- paddle1.setPosition(Vector2f(10.f, (float)w.getSize().y / 2));
- Sprite paddle2(paddleTexture, IntRect(0, 0, paddleTexture.getSize().x, paddleTexture.getSize().y));
- paddle2.rotate(-90);
- paddle2.setOrigin(Vector2f((float)paddle2.getGlobalBounds().width / 2, (float)paddle2.getGlobalBounds().height / 2));
- paddle2.setPosition(Vector2f((float)w.getSize().x - 10.f, (float)w.getSize().y / 2));
- //Balls
- Sprite ball(ballTexture, IntRect(0, 0, ballTexture.getSize().x, ballTexture.getSize().y));
- ball.setOrigin(Vector2f((float)ball.getGlobalBounds().width / 2, (float)ball.getGlobalBounds().height / 2));
- ball.setPosition(Vector2f(w.getSize().x / 2.f, w.getSize().y / 2.f));
- ball.scale(.20f, .20f);
- //Set Window Background
- Sprite bgSprite;
- bgSprite.setTexture(bg);
- //bgSprite.setColor(Color(236, 68, 68));
- //Set Window Icon
- Vector2u iconSize = windowIcon.getSize();
- w.setIcon(iconSize.x, iconSize.y, windowIcon.getPixelsPtr());
- //Write Message
- Text score;
- score.setFont(roboto);
- score.setString("SCORE:");
- FloatRect scoreSize = score.getGlobalBounds();
- score.setPosition(Vector2f((float)w.getSize().x - scoreSize.width, 10));
- score.setCharacterSize(20);
- score.setOutlineColor(Color::Black);
- score.setOutlineThickness(5);
- //Set Views
- View standard = w.getView(),
- fixed = standard;
- while (w.isOpen()) {
- Event e;
- while (w.pollEvent(e)) {
- switch (e.type) {
- case Event::Closed:
- w.close();
- break;
- case Event::KeyPressed:
- if (e.key.code == Keyboard::W) {
- if (paddle1.getGlobalBounds().top > 0)
- paddle1.move(Vector2f(0, -20));
- }
- else if (e.key.code == Keyboard::S) {
- if (paddle1.getGlobalBounds().top + paddle1.getGlobalBounds().height < w.getSize().y)
- paddle1.move(Vector2f(0, 20));
- }
- else if (e.key.code == Keyboard::Up) {
- if (paddle2.getGlobalBounds().top > 0)
- paddle2.move(Vector2f(0, -20));
- }
- else if (e.key.code == Keyboard::Down) {
- if (paddle2.getGlobalBounds().top + paddle2.getGlobalBounds().height < w.getSize().y)
- paddle2.move(Vector2f(0, 20));
- }
- }
- }
- w.clear();
- moveBackground(w, bgSprite);
- w.setView(standard);
- w.draw(bgSprite);
- w.setView(w.getDefaultView());
- w.draw(paddle1);
- w.draw(paddle2);
- printText(w, score, updateBall(w, ball, paddle1, paddle2));
- w.display();
- }
- return 0;
- }
- void moveBackground(RenderWindow & w, Sprite & s) {
- static int dx = 1, dy = 1;
- FloatRect sBounds = s.getGlobalBounds();
- Vector2u wSize = w.getSize();
- if (dx == -1 && sBounds.left + sBounds.width <= wSize.x)
- dx *= -1;
- else if (sBounds.left >= 0)
- dx *= -1;
- if (dy == 1 && sBounds.top >= 0)
- dy *= -1;
- else if (sBounds.top + sBounds.height <= wSize.y)
- dy *= -1;
- s.move(.01 * dx, .01 * dy);
- }
- void printText(RenderWindow& w, Text& score, bool updateScore) {
- static int scoreCount = 0;
- if (updateScore)
- scoreCount++;
- std::string count = std::to_string(scoreCount);
- score.setString("Score: " + count);
- w.draw(score);
- }
- bool updateBall(RenderWindow& w, Sprite& ball, Sprite& p1, Sprite& p2) {
- static float dx = -1, dy = -1;
- bool hitPaddle = false;
- Vector2f ballCoord = ball.getPosition();
- float randFloat = std::rand() % 100 / 100.f + 1;
- if (ballCoord.x <= 0 || ballCoord.x >= w.getSize().x) {
- dx *= -1;
- ball.rotate(40);
- }
- if (ballCoord.y <= 0 || ballCoord.y >= w.getSize().y) {
- dy *= -1;
- ball.rotate(-40);
- }
- if (ball.getGlobalBounds().intersects(p1.getGlobalBounds()) ||
- ball.getGlobalBounds().intersects(p2.getGlobalBounds())) {
- dx *= (-randFloat);
- dy *= (-randFloat);
- ball.rotate(30);
- hitPaddle = true;
- }
- dx = dx >= 2 ? dx - 1 : dx;
- dy = dy >= 2 ? dy - 1 : dy;
- ball.move(Vector2f(.5f * dx, .5f * dy));
- w.draw(ball);
- return hitPaddle;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement