From 8556553cc5129fac6b653399eea4ebc4b0550e87 Mon Sep 17 00:00:00 2001 From: Tyler Beckman Date: Wed, 6 Nov 2024 16:59:37 -0700 Subject: [PATCH] Initial commit --- .gitignore | 4 ++ Bubble.cpp | 63 ++++++++++++++++++++++++ Bubble.h | 29 +++++++++++ LICENSE.md | 41 ++++++++++++++++ Makefile | 67 ++++++++++++++++++++++++++ data/boing.mp3 | Bin 0 -> 62693 bytes data/pop.mp3 | Bin 0 -> 2328 bytes main.cpp | 127 +++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 331 insertions(+) create mode 100644 .gitignore create mode 100644 Bubble.cpp create mode 100644 Bubble.h create mode 100644 LICENSE.md create mode 100644 Makefile create mode 100644 data/boing.mp3 create mode 100644 data/pop.mp3 create mode 100644 main.cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8591ed0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +# Packed files +./*.tar.gz +# Built object files +./**/*.o \ No newline at end of file diff --git a/Bubble.cpp b/Bubble.cpp new file mode 100644 index 0000000..66570ce --- /dev/null +++ b/Bubble.cpp @@ -0,0 +1,63 @@ +#include + +#include +#include + +#include "Bubble.h" + +Bubble::Bubble( + const unsigned int INITIAL_X, + const unsigned int INITIAL_Y, + const double INITIAL_X_DIR, + const double INITIAL_Y_DIR, + const float RADIUS, + const sf::Color COLOR, + std::shared_ptr BOING_SOUND +): _pBoingSound(std::move(BOING_SOUND)) { + _circleShape = sf::CircleShape(RADIUS); + _circleShape.setPosition(INITIAL_X, INITIAL_Y); + _circleShape.setFillColor(COLOR); + _xDir = INITIAL_X_DIR; + _yDir = INITIAL_Y_DIR; +} + +void Bubble::draw(sf::RenderWindow& window) const { + window.draw(_circleShape); +} + +void Bubble::updatePosition(const unsigned int WINDOW_WIDTH, const unsigned int WINDOW_HEIGHT) { + sf::Vector2f currentPosition = _circleShape.getPosition(); + + // While inverting sign of the direction is simpler, that method gets bubbles stuck on the wall + // Giving explicit sign forces the ball in the correct direction instead. + + if ( + (currentPosition.x < 0 && _xDir < 0) + || ( + (currentPosition.x + _circleShape.getRadius() * 2) > WINDOW_WIDTH + && _xDir > 0 + ) + ) { + // If over left wall & going left, invert + // OR if over right wall & going right, invert + _xDir = -_xDir; + _pBoingSound->play(); + } + + if ( + (currentPosition.y < 0 && _yDir < 0) + || ( + (currentPosition.y + _circleShape.getRadius() * 2) > WINDOW_HEIGHT + && _yDir > 0 + ) + ) { + // If over top wall & going up, invert + // OR if over bottom wall & going down, invert + _yDir = -_yDir; + _pBoingSound->play(); + } + + currentPosition.x += _xDir; + currentPosition.y += _yDir; + _circleShape.setPosition(currentPosition); +} \ No newline at end of file diff --git a/Bubble.h b/Bubble.h new file mode 100644 index 0000000..463e168 --- /dev/null +++ b/Bubble.h @@ -0,0 +1,29 @@ +#ifndef BUBBLE_H +#define BUBBLE_H +#include +#include +#include +#include + +class Bubble { + public: + Bubble( + const unsigned int INITIAL_X, + const unsigned int INITIAL_Y, + const double INITIAL_X_DIR, + const double INITIAL_Y_DIR, + const float RADIUS, + const sf::Color COLOR, + std::shared_ptr BOING_SOUND + ); + + void draw(sf::RenderWindow& WINDOW) const; + void updatePosition(const unsigned int WINDOW_WIDTH, const unsigned int WINDOW_HEIGHT); + private: + sf::CircleShape _circleShape; + double _xDir; + double _yDir; + std::shared_ptr _pBoingSound; +}; + +#endif // BUBBLE_H diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..36dc8db --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,41 @@ +# Creative Commons CC0 1.0 Universal + +CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. + +## Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. + +1. __Copyright and Related Rights.__ A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; + + ii. moral rights retained by the original author(s) and/or performer(s); + + iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; + + iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; + + v. rights protecting the extraction, dissemination, use and reuse of data in a Work; + + vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and + + vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. + +2. __Waiver.__ To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. + +3. __Public License Fallback.__ Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. + +4. __Limitations and Disclaimers.__ + + a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. + + b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. + + c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. + + d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..66b50d5 --- /dev/null +++ b/Makefile @@ -0,0 +1,67 @@ +# THE NAME OF YOUR EXECUTABLE +TARGET = A4 +# ALL CPP COMPILABLE IMPLEMENTATION FILES THAT MAKE UP THE PROJECT +SRC_FILES = main.cpp Bubble.cpp + +# NO EDITS NEEDED BELOW THIS LINE + +CXX = g++ +CXXFLAGS = -O2 +CXXFLAGS_DEBUG = -g +CXXFLAGS_WARN = -Wall -Wextra -Wunreachable-code -Wshadow -Wpedantic +CPPVERSION = -std=c++17 + +OBJECTS = $(SRC_FILES:.cpp=.o) + +ifeq ($(OS),Windows_NT) + TARGET := $(TARGET).exe + DEL = del + Q = + + INC_PATH = Z:/CSCI200/include/ + LIB_PATH = Z:/CSCI200/lib/ + + RPATH = +else + DEL = rm -f + Q = " + + INC_PATH = /usr/local/include/ + LIB_PATH = /usr/local/lib/ + + UNAME_S := $(shell uname -s) + ifeq ($(UNAME_S),Linux) + CXXFLAGS += -D LINUX + RPATH = + endif + ifeq ($(UNAME_S),Darwin) + CXXFLAGS += -D OSX + RPATH = -Wl,-rpath,/Library/Frameworks + endif + + UNAME_P := $(shell uname -p) +endif + +LIBS = -lsfml-graphics -lsfml-window -lsfml-system -lsfml-audio -lsfml-network + +all: $(TARGET) + +$(TARGET): $(OBJECTS) + $(CXX) -o $@ $^ $(RPATH) -L$(LIB_PATH) $(LIBS) + +.cpp.o: + $(CXX) $(CXXFLAGS) $(CPPVERSION) $(CXXFLAGS_DEBUG) $(CXXFLAGS_WARN) -o $@ -c $< -I$(INC_PATH) + +clean: + $(DEL) $(TARGET) $(OBJECTS) + +depend: + @sed -i.bak '/^# DEPENDENCIES/,$$d' Makefile + @$(DEL) sed* + @echo $(Q)# DEPENDENCIES$(Q) >> Makefile + @$(CXX) -MM $(SRC_FILES) >> Makefile + +.PHONY: all clean depend + +# DEPENDENCIES +main.o: main.cpp diff --git a/data/boing.mp3 b/data/boing.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..8a5f247890a5a187f51571dff60ac307d3ac821b GIT binary patch literal 62693 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�C4)K$wcZ!C-9 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 OK8e`>gAM?&4gU)ycq`5T literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..8524726 --- /dev/null +++ b/main.cpp @@ -0,0 +1,127 @@ +/** + * @author Tyler Beckman (tyler_beckman@mines.edu) + * @brief A program to simulate bubbles bouncing around the screen with random sizes, colors, + * and speeds (with sound effects!). Bubbles can be created with left click and removed with + * D. Program will exit if Esc or Q are pressed. + * @version 1 + * @date 2024-11-05 + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "Bubble.h" + +int main() { + sf::RenderWindow window(sf::VideoMode(1280, 640), "Tyler Beckman A4"); + window.setVerticalSyncEnabled(true); + + std::shared_ptr boingSound = std::make_shared(); + if (!boingSound->openFromFile("data/boing.mp3")) { + std::cerr << "Unable to load data/boing.mp3" << std::endl; + return -1; + } + boingSound->setPitch(1.25); + + sf::Music popSound; + if (!popSound.openFromFile("data/pop.mp3")) { + std::cerr << "Unable to load data/pop.mp3" << std::endl; + return -1; + } + + sf::Clock clock; + + sf::Event event; + + std::mt19937 mt(std::chrono::steady_clock::now().time_since_epoch().count()); + std::uniform_int_distribution colorDist(0, 255); + std::uniform_int_distribution positionDist(100, 400); + std::uniform_int_distribution radiusDist(10, 50); + // numeric_limits::min() necessary to make real distribution functionally inclusive + std::uniform_real_distribution speedDist(-0.1667, 0.1667 + std::numeric_limits::min()); + + std::vector bubbles; + for (int i = 0; i < 5; i++) { + bubbles.push_back( + Bubble( + positionDist(mt), + positionDist(mt), + speedDist(mt), + speedDist(mt), + radiusDist(mt), + sf::Color( + colorDist(mt), + colorDist(mt), + colorDist(mt) + ), + boingSound + ) + ); + } + while (window.isOpen()) { + window.clear(); + + for (size_t i = 0; i < bubbles.size(); i++) { + bubbles.at(i).draw(window); + } + + window.display(); + + while (window.pollEvent(event)) { + switch (event.type) { + case sf::Event::Closed: + window.close(); + break; + case sf::Event::KeyPressed: + if (event.key.code == sf::Keyboard::Key::Escape || event.key.code == sf::Keyboard::Key::Q) { + window.close(); + } else if (event.key.code == sf::Keyboard::Key::D && bubbles.size() > 0) { + popSound.play(); + // pop_back segfaults on a 0-sized vector so the extra check is needed + bubbles.pop_back(); + } + break; + case sf::Event::MouseButtonPressed: + if (event.mouseButton.button == sf::Mouse::Button::Left) { + unsigned int radius = radiusDist(mt); + bubbles.push_back( + Bubble( + // Subtracting radius from mouse button ensures the bubble is in the middle of the cursor + event.mouseButton.x - radius, + event.mouseButton.y - radius, + speedDist(mt), + speedDist(mt), + radius, + sf::Color( + colorDist(mt), + colorDist(mt), + colorDist(mt) + ), + boingSound + ) + ); + } + break; + default: + break; + } + } + + if (clock.getElapsedTime().asSeconds() >= (1./60)) { + clock.restart(); + for (size_t i = 0; i < bubbles.size(); i++) { + bubbles.at(i).updatePosition(window.getSize().x, window.getSize().y); + } + } + } + + return 0; +}