diff --git a/.gitignore b/.gitignore index e20c7de..874c355 100644 --- a/.gitignore +++ b/.gitignore @@ -150,3 +150,6 @@ /Semester 3/Assignments/MP2-chapter4_CalebFontenot/build/ /Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/private/ /Semester 3/Assignments/MP2-chapter4_CalebFontenot/dist/ +/Semester 3/Assignments/MP2FX_Stelly/nbproject/private/ +/Semester 3/Assignments/DonorProject/nbproject/private/ +/Semester 3/Assignments/DonorProject/build/ diff --git a/Semester 3/Assignments/DonorProject/build.xml b/Semester 3/Assignments/DonorProject/build.xml new file mode 100644 index 0000000..781b4b8 --- /dev/null +++ b/Semester 3/Assignments/DonorProject/build.xml @@ -0,0 +1,53 @@ + + Builds, tests, and runs the project DonorProject. + + + diff --git a/Semester 3/Assignments/DonorProject/manifest.mf b/Semester 3/Assignments/DonorProject/manifest.mf new file mode 100644 index 0000000..328e8e5 --- /dev/null +++ b/Semester 3/Assignments/DonorProject/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/Semester 3/Assignments/DonorProject/nbproject/build-impl.xml b/Semester 3/Assignments/DonorProject/nbproject/build-impl.xml new file mode 100644 index 0000000..d8a9829 --- /dev/null +++ b/Semester 3/Assignments/DonorProject/nbproject/build-impl.xml @@ -0,0 +1,1772 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Semester 3/Assignments/DonorProject/nbproject/configs/Run_as_WebStart.properties b/Semester 3/Assignments/DonorProject/nbproject/configs/Run_as_WebStart.properties new file mode 100644 index 0000000..670fff0 --- /dev/null +++ b/Semester 3/Assignments/DonorProject/nbproject/configs/Run_as_WebStart.properties @@ -0,0 +1,2 @@ +# Do not modify this property in this configuration. It can be re-generated. +$label=Run as WebStart diff --git a/Semester 3/Assignments/DonorProject/nbproject/configs/Run_in_Browser.properties b/Semester 3/Assignments/DonorProject/nbproject/configs/Run_in_Browser.properties new file mode 100644 index 0000000..f2a5a65 --- /dev/null +++ b/Semester 3/Assignments/DonorProject/nbproject/configs/Run_in_Browser.properties @@ -0,0 +1,2 @@ +# Do not modify this property in this configuration. It can be re-generated. +$label=Run in Browser diff --git a/Semester 3/Assignments/DonorProject/nbproject/genfiles.properties b/Semester 3/Assignments/DonorProject/nbproject/genfiles.properties new file mode 100644 index 0000000..eae08c6 --- /dev/null +++ b/Semester 3/Assignments/DonorProject/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=6e52aa2c +build.xml.script.CRC32=47905a69 +build.xml.stylesheet.CRC32=f85dc8f2@1.107.0.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=6e52aa2c +nbproject/build-impl.xml.script.CRC32=a0105a46 +nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.107.0.48 diff --git a/Semester 3/Assignments/DonorProject/nbproject/jfx-impl.xml b/Semester 3/Assignments/DonorProject/nbproject/jfx-impl.xml new file mode 100644 index 0000000..6aeb313 --- /dev/null +++ b/Semester 3/Assignments/DonorProject/nbproject/jfx-impl.xml @@ -0,0 +1,4197 @@ + + + + + JavaFX-specific Ant calls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${cssfileslist} + + + + + + + + + + + + + + + + + + + + + + + + self.addMappedName( + (source.indexOf("jfxrt.jar") >= 0) || + (source.indexOf("deploy.jar") >= 0) || + (source.indexOf("javaws.jar") >= 0) || + (source.indexOf("plugin.jar") >= 0) + ? "" : source + ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Semester 3/Assignments/DonorProject/nbproject/project.properties b/Semester 3/Assignments/DonorProject/nbproject/project.properties new file mode 100644 index 0000000..42d8e28 --- /dev/null +++ b/Semester 3/Assignments/DonorProject/nbproject/project.properties @@ -0,0 +1,120 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +application.title=DonorProject +application.vendor=caleb +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +compile.on.save=true +compile.on.save.unsupported.javafx=true +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.modulepath=\ + ${run.modulepath} +debug.test.classpath=\ + ${run.test.classpath} +debug.test.modulepath=\ + ${run.test.modulepath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/DonorProject.jar +dist.javadoc.dir=${dist.dir}/javadoc +endorsed.classpath= +excludes= +includes=** +# Non-JavaFX jar file creation is deactivated in JavaFX 2.0+ projects +jar.archive.disabled=true +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.modulepath= +javac.processormodulepath= +javac.processorpath=\ + ${javac.classpath} +javac.source=1.8 +javac.target=1.8 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.modulepath=\ + ${javac.modulepath} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +javafx.application.implementation.version=1.0 +javafx.binarycss=false +javafx.deploy.allowoffline=true +# If true, application update mode is set to 'background', if false, update mode is set to 'eager' +javafx.deploy.backgroundupdate=false +javafx.deploy.embedJNLP=true +javafx.deploy.includeDT=true +# Set true to prevent creation of temporary copy of deployment artifacts before each run (disables concurrent runs) +javafx.disable.concurrent.runs=false +# Set true to enable multiple concurrent runs of the same WebStart or Run-in-Browser project +javafx.enable.concurrent.external.runs=false +# This is a JavaFX project +javafx.enabled=true +javafx.fallback.class=com.javafx.main.NoJavaFXFallback +# Main class for JavaFX +javafx.main.class=donorproject.DonorProject +javafx.preloader.class= +# This project does not use Preloader +javafx.preloader.enabled=false +javafx.preloader.jar.filename= +javafx.preloader.jar.path= +javafx.preloader.project.path= +javafx.preloader.type=none +# Set true for GlassFish only. Rebases manifest classpaths of JARs in lib dir. Not usable with signed JARs. +javafx.rebase.libs=false +javafx.run.height=600 +javafx.run.width=800 +# Pre-JavaFX 2.0 WebStart is deactivated in JavaFX 2.0+ projects +jnlp.enabled=false +# Main class for Java launcher +main.class=com.javafx.main.Main +# For improved security specify narrower Codebase manifest attribute to prevent RIAs from being repurposed +manifest.custom.codebase=* +# Specify Permissions manifest attribute to override default (choices: sandbox, all-permissions) +manifest.custom.permissions= +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +platform.active=default_platform +run.classpath=\ + ${dist.jar}:\ + ${javac.classpath}:\ + ${build.classes.dir} +run.modulepath=\ + ${javac.modulepath} +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +run.test.modulepath=\ + ${javac.test.modulepath} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/Semester 3/Assignments/DonorProject/nbproject/project.xml b/Semester 3/Assignments/DonorProject/nbproject/project.xml new file mode 100644 index 0000000..1b843e0 --- /dev/null +++ b/Semester 3/Assignments/DonorProject/nbproject/project.xml @@ -0,0 +1,25 @@ + + + org.netbeans.modules.java.j2seproject + + + + + + + + + + + + + DonorProject + + + + + + + + + diff --git a/Semester 3/Assignments/DonorProject/src/anim/BouncingBall.java b/Semester 3/Assignments/DonorProject/src/anim/BouncingBall.java new file mode 100644 index 0000000..e8bcfad --- /dev/null +++ b/Semester 3/Assignments/DonorProject/src/anim/BouncingBall.java @@ -0,0 +1,160 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package anim; + +import javafx.animation.KeyFrame; +import javafx.animation.Timeline; +import javafx.beans.property.DoubleProperty; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.control.Label; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.Pane; +import javafx.scene.paint.Color; +import javafx.scene.shape.Circle; +import javafx.scene.shape.Rectangle; +import javafx.util.Duration; + +/** + * + * @author asdv + */ +public class BouncingBall extends Pane +{ + + public int pScore = 0; + public int cScore = 0; + GridPane textDisplay = new GridPane(); + Rectangle racket = new Rectangle(); + + public final double radius = 10; // ball size 40 + private double x = radius, y = radius; // coordinates of ball + private double dx = 1, dy = 1; // direction of the ball + private Circle circle = new Circle(x, y, radius); // her majesty, the ball + private Timeline animation; // animate the ball + private Label playerScore = new Label("Your Score: 0"); + private Label compScore = new Label("Computer Score: 0"); + + public BouncingBall() + { + racket.setWidth(70); + racket.setHeight(20); + racket.relocate(0, 580); + textDisplay.add(playerScore, 0, 0); + textDisplay.add(compScore, 0, 1); + + circle.setFill(Color.BROWN); + getChildren().addAll(circle, racket, textDisplay); + + animation = new Timeline( + new KeyFrame(Duration.millis(50), (ActionEvent event) + -> + { + moveBall(); + if (y >= (getHeight() - 20)) + { + boolean intersected = intersection(); + if (intersected && circle.getCenterX() <= racket.getX() / 2) + { + System.out.println("Intersected."); + dx *= -1; + dy *= -1; + playerScored(); + } + else + { + if (intersected && circle.getCenterX() >= racket.getX() / 2) + { + playerScored(); + dy *= -1; + } + else + { + if (y >= (getHeight() - 40)) + { + computerScored(); + dy *= -1; + } + } + } + } + })); + animation.setCycleCount(Timeline.INDEFINITE); + animation.setRate(animation.getRate() * 20); + animation.play(); + } + + private void moveBall() + { + if (x < radius || x > getWidth() - radius) + { + dx *= -1; + } + if (y < radius || y > getHeight() - radius) + { + dy *= -1; + } + + x += dx; + y += dy; + circle.setCenterX(x); + circle.setCenterY(y); + } + + public void playerScored() + { + playerScore.setText("Your Score: " + (++this.pScore)); + } + + public void computerScored() + { + compScore.setText("Computer Score: " + (++this.cScore)); + } + + public boolean intersection() + { + boolean intersected = racket.getBoundsInParent().intersects(circle.getBoundsInParent()); + + if (intersected) + { + return true; + } + else + { + return false; + } + } + + public void moveRacket(double x) + { + racket.relocate(x, 580); + } + + public void play() + { + animation.play(); + } + + public void pause() + { + animation.pause(); + } + + public void increaseSpeed() + { + animation.setRate(animation.getRate() * 1.5); + } + + public void decreaseSpeed() + { + animation.setRate(animation.getRate() * 1.5 > 0 ? animation.getRate() / 1.5 : 0); + } + + public DoubleProperty rateProperty() + { + return animation.rateProperty(); + } + +} diff --git a/Semester 3/Assignments/DonorProject/src/anim/Tennis.java b/Semester 3/Assignments/DonorProject/src/anim/Tennis.java new file mode 100644 index 0000000..57192d1 --- /dev/null +++ b/Semester 3/Assignments/DonorProject/src/anim/Tennis.java @@ -0,0 +1,65 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package anim; + +import javafx.application.Application; +import javafx.event.EventHandler; +import javafx.scene.Scene; +import javafx.scene.input.KeyCode; +import javafx.scene.input.MouseEvent; +import javafx.scene.shape.Rectangle; +import javafx.stage.Stage; + +/** + * + * @author asdv + */ +public class Tennis extends Application +{ + + @Override + public void start(Stage primaryStage) throws Exception + { + + BouncingBall bouncingBall = new BouncingBall(); + + Scene scene = new Scene(bouncingBall, 800, 600); + primaryStage.setTitle("Play Tennis"); + primaryStage.setScene(scene); + primaryStage.show(); + + bouncingBall.requestFocus(); + bouncingBall.setOnMousePressed((MouseEvent event) -> + { + bouncingBall.pause(); + }); + bouncingBall.setOnMouseReleased((MouseEvent event) -> + { + bouncingBall.play(); + }); + bouncingBall.setOnKeyPressed(e -> + { + if(e.getCode() == KeyCode.UP) + { + bouncingBall.increaseSpeed(); + } + else if(e.getCode() == KeyCode.DOWN) + { + bouncingBall.decreaseSpeed(); + } + }); + bouncingBall.setOnMouseMoved((MouseEvent event) -> + { + bouncingBall.moveRacket(event.getSceneX() - bouncingBall.racket.getWidth() / 2); + }); + + } + + public static void main(String[] args) + { + launch(args); + } + +} diff --git a/Semester 3/Assignments/DonorProject/src/donorproject/DonorProject.java b/Semester 3/Assignments/DonorProject/src/donorproject/DonorProject.java new file mode 100644 index 0000000..49534b0 --- /dev/null +++ b/Semester 3/Assignments/DonorProject/src/donorproject/DonorProject.java @@ -0,0 +1,50 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/javafx/FXMain.java to edit this template + */ +package donorproject; + +import javafx.application.Application; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.layout.StackPane; +import javafx.stage.Stage; + +/** + * + * @author caleb + */ +public class DonorProject extends Application { + + @Override + public void start(Stage primaryStage) { + Button btn = new Button(); + btn.setText("Say 'Hello World'"); + btn.setOnAction(new EventHandler() { + + @Override + public void handle(ActionEvent event) { + System.out.println("Hello World!"); + } + }); + + StackPane root = new StackPane(); + root.getChildren().add(btn); + + Scene scene = new Scene(root, 300, 250); + + primaryStage.setTitle("Hello World!"); + primaryStage.setScene(scene); + primaryStage.show(); + } + + /** + * @param args the command line arguments + */ + public static void main(String[] args) { + launch(args); + } + +} diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/PrintedHTMLs/BallControl.html b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/PrintedHTMLs/BallControl.html index cfd18d4..79bbc77 100644 --- a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/PrintedHTMLs/BallControl.html +++ b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/PrintedHTMLs/BallControl.html @@ -9,16 +9,10 @@ body {color: #a9b7c6; background-color: #2b2b2b; font-family: monospace; font-we pre {color: #a9b7c6; background-color: #2b2b2b; font-family: monospace; font-weight: bold} table {color: #888888; background-color: #313335; font-family: monospace; font-weight: bold} .literal {color: #cc7832} -.ST5 {font-family: monospace; font-weight: bold; font-style: italic} -.ST0 {color: #287bde} .number {color: #6897bb} .string {color: #6a8759} -.ST1 {color: #ffc66d} -.ST2 {color: #9876aa} .comment {color: #808080} .whitespace {color: #505050} -.ST3 {color: #9876aa; font-family: monospace; font-weight: bold; font-style: italic} -.ST4 {color: #ffc66d; font-family: monospace; font-weight: bold; font-style: italic} --> @@ -26,8 +20,8 @@ table {color: #888888; background-color: #313335; font-family: monospace; font-w
/home/caleb/ASDV-Java/Semester 3/Assignments/MP2-chapter4_CalebFontenot/src/MP2_chapter4_CalebFontenot/BallControl.java
 /*
- * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
- * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
  */
 package MP2_chapter4_CalebFontenot;
 
@@ -44,30 +38,37 @@ table {color: #888888; background-color: #313335; font-family: monospace; font-w
  */
 public class BallControl extends Application {
 
+    private boolean mouseFocus = false;
+    private int racketPosition = 0;
+
     @Override
-    public void start(Stage primaryStage) throws Exception {
+    public void start(Stage primaryStage) throws Exception
+    {
 
         BouncingBall bouncingBall = new BouncingBall();
         // Create a scene and place it in the stage
-        Scene scene = new Scene(bouncingBall, 800, 600);
+        Scene scene = new Scene(bouncingBall, 800, 600);
         primaryStage.setTitle("Bouncing Ball Control");
         primaryStage.setScene(scene);
         primaryStage.show();
         bouncingBall.requestFocus();
+        bouncingBall.showInfoLabel();
+
         bouncingBall.setOnMouseEntered(e
                 -> {
+            mouseFocus = true;
             bouncingBall.hideInfoLabel();
             bouncingBall.play();
         });
 
         bouncingBall.setOnMouseExited(e -> {
-                bouncingBall.showInfoLabel();
-                bouncingBall.pause();
+            mouseFocus = false;
         });
         bouncingBall.setOnMouseMoved(new EventHandler<MouseEvent>() {
             @Override
-            public void handle(MouseEvent event) {
-                double mouseX = event.getSceneX() - (bouncingBall.RACKET_LENGTH / 2); // set relative to center of racket
+            public void handle(MouseEvent event)
+            {
+                double mouseX = event.getSceneX() - (bouncingBall.RACKET_LENGTH / 2); // set relative to center of racket
                 bouncingBall.moveRacket(mouseX);
             }
 
@@ -76,9 +77,23 @@ table {color: #888888; background-color: #313335; font-family: monospace; font-w
         // Increase and decrease animation
         bouncingBall.setOnKeyPressed(e
                 -> {
-            if (e.getCode() == KeyCode.UP) {
+            if (e.getCode() == KeyCode.LEFT && mouseFocus == false) {
+                bouncingBall.hideInfoLabel();
+                if (racketPosition > 0) {
+                    racketPosition = racketPosition - 30;
+                }
+                bouncingBall.moveRacket(racketPosition);
+            }
+            if (e.getCode() == KeyCode.RIGHT && mouseFocus == false) {
+                bouncingBall.hideInfoLabel();
+                if (racketPosition < bouncingBall.getWidth()) {
+                    racketPosition = racketPosition + 30;
+                }
+                bouncingBall.moveRacket(racketPosition);
+            }
+            if (e.getCode() == KeyCode.UP) {
                 bouncingBall.increaseSpeed();
-            } else if (e.getCode() == KeyCode.DOWN) {
+            } else if (e.getCode() == KeyCode.DOWN) {
                 bouncingBall.decreaseSpeed();
             }
 
@@ -86,8 +101,9 @@ table {color: #888888; background-color: #313335; font-family: monospace; font-w
         );
     }
 
-    public static void main(String[] args) {
-        launch(args);
+    public static void main(String[] args)
+    {
+        launch(args);
     }
 }
 
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/PrintedHTMLs/BouncingBall.html b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/PrintedHTMLs/BouncingBall.html
index 3231397..cc7e838 100644
--- a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/PrintedHTMLs/BouncingBall.html	
+++ b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/PrintedHTMLs/BouncingBall.html	
@@ -31,12 +31,13 @@ table {color: #888888; background-color: #313335; font-family: monospace; font-w
 package MP2_chapter4_CalebFontenot;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
 import javafx.animation.KeyFrame;
 import javafx.animation.Timeline;
 import javafx.beans.property.DoubleProperty;
 import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
-import javafx.geometry.Pos;
 import javafx.scene.control.Label;
 import javafx.scene.layout.GridPane;
 import javafx.scene.layout.Pane;
@@ -53,7 +54,10 @@ table {color: #888888; background-color: #313335; font-family: monospace; font-w
  */
 public class BouncingBall extends Pane {
 
+    private List<MediaPlayer> mediaPlayers = new ArrayList<>();
     GridPane textPane = new GridPane();
+    private String currentlyPlaying;
+    private final int COLLISION_COOLDOWN = 20;
     private long timeSinceLastCollisionEvent = 0;
     final double RACKET_LENGTH = 100;
     final double radius = 20;
@@ -66,8 +70,7 @@ table {color: #888888; background-color: #313335; font-family: monospace; font-w
     private Label ballCords = new Label();
     private Label playerScoreLabel = new Label("Player Score: 0");
     private Label computerScoreLabel = new Label("Computer Score: 0");
-
-
+    private Label nowPlaying = new Label();
 
     private Timeline animation;
 
@@ -80,20 +83,32 @@ table {color: #888888; background-color: #313335; font-family: monospace; font-w
         textPane.add(ballCords, 0, 1);
         textPane.add(playerScoreLabel, 0, 2);
         textPane.add(computerScoreLabel, 0, 3);
-        getChildren().addAll(circle, racket, textPane, infoLabel); // Place a ball into this pane
+        textPane.add(nowPlaying, 0, 4);
+        getChildren().addAll(circle, racket, textPane); // Place a ball into this pane
         racket.relocate(0, 580);
-        infoLabel.relocate(getHeight() / 4.0, getWidth() / 2.0);
+        playSound("bgm");
         // Create an animation for moving the ball
         animation = new Timeline(new KeyFrame(Duration.millis(1), new EventHandler<ActionEvent>() {
             @Override
             public void handle(ActionEvent t) {
+
                 timeSinceLastCollisionEvent++;
                 racketTime.setText("Frames since last collision: " + timeSinceLastCollisionEvent);
                 moveBall();
-                if (y >= (getHeight() - 20) && (timeSinceLastCollisionEvent > 500)) {
+                // Process collisions
+                if (y >= (getHeight() - 20) && (timeSinceLastCollisionEvent > COLLISION_COOLDOWN)) {
                     timeSinceLastCollisionEvent = 0;
+                    playSound("collision");
                     incrementComputerScore();
                 }
+                if ((x <= 20 && (timeSinceLastCollisionEvent > COLLISION_COOLDOWN)) || ((x >= getWidth() - 20) && (timeSinceLastCollisionEvent > COLLISION_COOLDOWN))) {
+                    timeSinceLastCollisionEvent = 0;
+                    playSound("collision");
+                }
+                if (y <= 20 && (timeSinceLastCollisionEvent > COLLISION_COOLDOWN)) {
+                    timeSinceLastCollisionEvent = 0;
+                    playSound("collision");
+                }
             }
         })
         );
@@ -105,10 +120,11 @@ table {color: #888888; background-color: #313335; font-family: monospace; font-w
     private boolean processRacketCollision() {
         boolean racketCollision = racket.getBoundsInParent().intersects(circle.getBoundsInParent());
 
-        if (racketCollision && (timeSinceLastCollisionEvent > 500)) { // This is second condition is a cooldown. It prevents odd behavior happening with the ball and the racket if the racket hits the ball at certain angles.
+        if (racketCollision && (timeSinceLastCollisionEvent > COLLISION_COOLDOWN)) { // This is second condition is a cooldown. It prevents odd behavior happening with the ball and the racket if the racket hits the ball at certain angles.
             System.out.println("Racket collision detected!");
             timeSinceLastCollisionEvent = 0;
             incrementPlayerScore();
+            playSound("racket");
             return true;
         } else {
             return false;
@@ -173,30 +189,88 @@ table {color: #888888; background-color: #313335; font-family: monospace; font-w
 
     private void incrementPlayerScore() {
         playerScoreLabel.setText("Player score: " + ++playerScore);
-        playSound();
     }
 
     private void incrementComputerScore() {
         computerScoreLabel.setText("Computer score: " + ++computerScore);
-        //playSound();
+
     }
 
     private void ballCoordsToLabel() {
         ballCords.setText("Ball coords: " + x + ", " + y);
     }
-    private void playSound() {
+
+    private void playSound(String sampleType) {
+        boolean isSfx = true;
+        String sample = "sound/sfx/Sample_00";
         int randInt = (int) (Math.random() * 2);
-        String sample;
-        if (randInt == 0) {
-            sample = "5";
-        } else  {
-            sample = "7";
+        switch (sampleType) {
+            case "collision":
+                randInt = (int) (Math.random() * 2);
+                isSfx = true;
+                switch (randInt) {
+                    case 0:
+                        sample += "05";
+                        break;
+                    case 1:
+                        sample += "07";
+                        break;
+                }
+                break;
+            case "racket":
+                randInt = (int) (Math.random() * 2);
+                isSfx = true;
+                switch (randInt) {
+                    case 0:
+                        sample += "10";
+                        break;
+                    case 1:
+                        sample += "12";
+                        break;
+                }
+                break;
+            case "bgm":
+                sample = "sound/bgm/";
+                randInt = (int) (Math.random() * 3);
+                isSfx = false;
+                switch (randInt) {
+                    case 0:
+                        currentlyPlaying = "Caleb Fontenot - Blips";
+                        nowPlaying.setText("Now playing: " + currentlyPlaying);
+                        break;
+                    case 1:
+                        currentlyPlaying = "Caleb Fontenot - DEAL WITH IT";
+                        nowPlaying.setText("Now playing: " + currentlyPlaying);
+                        break;
+                    case 2:
+                        currentlyPlaying = "Caleb Fontenot - Tomodachi Moment";
+                        nowPlaying.setText("Now playing: " + currentlyPlaying);
+                        break;
+                }
+                sample += currentlyPlaying;
+                break;
         }
-        Media sound = new Media(new File("sound/Sample_000"+sample+".wav").toURI().toString());
+        Media sound = new Media(new File(sample + ".wav").toURI().toString());
         MediaPlayer mediaPlayer = new MediaPlayer(sound);
         mediaPlayer.setStartTime(Duration.ZERO);
+        mediaPlayer.setAutoPlay(true);
+        // If we're playing BGM, lower the volume a little
+        if (!isSfx) {
+            mediaPlayer.setVolume(0.6);
+            mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);
+        }
         mediaPlayer.play();
-        //mediaPlayer.setOnEndOfMedia();
+        mediaPlayers.add(mediaPlayer); // Prevent the JVM's GC from deleting our media player if there's already one running
+        // Free the media player when it has finished playing a sound.
+        mediaPlayer.setOnEndOfMedia(new Runnable() {
+            @Override
+            public void run() {
+                //System.out.println("I'm done playing sound! Please take me to the ether, Java GC!");
+                mediaPlayer.stop();
+                mediaPlayer.dispose();
+                mediaPlayers.remove(mediaPlayer);
+            }
+        });
     }
 }
 
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/build-impl.xml b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/build-impl.xml
index 19de470..7f93bb7 100644
--- a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/build-impl.xml	
+++ b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/build-impl.xml	
@@ -120,43 +120,7 @@ is divided into following sections:
         
     
     
-        
-        
-        
-        
-        
-            
-        
-        
-        
-        
-            
-        
-        
-        
-        
-            
-        
-        
-        
-            
-                
-                
-                
-            
-        
-        Must set platform.home
-        Must set platform.bootcp
-        Must set platform.java
-        Must set platform.javac
-        
- The J2SE Platform is not correctly set up.
- Your active platform is: ${platform.active}, but the corresponding property "platforms.${platform.active}.home" is not found in the project's properties files. 
- Either open the project in the IDE and setup the Platform with the same name or add it manually.
- For example like this:
-     ant -Duser.properties.file=<path_to_property_file> jar (where you put the property "platforms.${platform.active}.home" in a .properties file)
-  or ant -Dplatforms.${platform.active}.home=<path_to_JDK_home> jar (where no properties file is used) 
-  
+        
         
         
             
@@ -279,6 +243,20 @@ is divided into following sections:
         
             
         
+        
+            
+                
+                
+                    
+                
+            
+        
+        
+            
+                
+                
+            
+        
         
         
         
@@ -366,7 +344,7 @@ is divided into following sections:
                         
                     
                 
-                
+                
                     
                         
                             
@@ -417,7 +395,7 @@ is divided into following sections:
                 
                 
                 
-                
+                
                     
                         
                             
@@ -459,7 +437,7 @@ is divided into following sections:
             
                 
                 
-                
+                
                     
                         
                             
@@ -538,7 +516,7 @@ is divided into following sections:
             
             
                 
-                
+                
                     
                         
                         
@@ -566,7 +544,7 @@ is divided into following sections:
             
             
                 
-                
+                
                     
                         
                         
@@ -642,7 +620,7 @@ is divided into following sections:
                     
                 
                 
-                
+                
                     
                     
                         
@@ -873,9 +851,6 @@ is divided into following sections:
                     
                         
                     
-                    
-                        
-                    
                 
             
         
@@ -925,7 +900,7 @@ is divided into following sections:
             
             
             
-                
+                
                     
                         
                     
@@ -959,7 +934,7 @@ is divided into following sections:
             
             
             
-                
+                
                     
                         
                     
@@ -991,7 +966,7 @@ is divided into following sections:
             
             
             
-                
+                
                     
                     
                     
@@ -1225,7 +1200,7 @@ is divided into following sections:
         
         To run this application from the command line without Ant, try:
         
-        ${platform.java} -jar "${dist.jar.resolved}"
+        java -jar "${dist.jar.resolved}"
     
     
         
@@ -1327,8 +1302,8 @@ is divided into following sections:
                 
             
         
-        
-        
+        
+        
         
             
             
@@ -1521,19 +1496,16 @@ is divided into following sections:
                 
             
         
-        
-            
-        
         
-            
+            
         
         
             
                 
-                
+                
             
         
-        
+        
             
                 
             
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/genfiles.properties b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/genfiles.properties
index 030ec63..7ceb0bc 100644
--- a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/genfiles.properties	
+++ b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/genfiles.properties	
@@ -3,6 +3,6 @@ build.xml.script.CRC32=f4beac8b
 build.xml.stylesheet.CRC32=f85dc8f2@1.107.0.48
 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
 # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=1d3703fe
-nbproject/build-impl.xml.script.CRC32=4d538bea
+nbproject/build-impl.xml.data.CRC32=14971581
+nbproject/build-impl.xml.script.CRC32=e3cc13c1
 nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.107.0.48
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/project.properties b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/project.properties
index 41139c7..830b97a 100644
--- a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/project.properties	
+++ b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/project.properties	
@@ -107,7 +107,7 @@ manifest.custom.permissions=
 manifest.file=manifest.mf
 meta.inf.dir=${src.dir}/META-INF
 mkdist.disabled=false
-platform.active=JDK_1.8
+platform.active=default_platform
 run.classpath=\
     ${dist.jar}:\
     ${javac.classpath}:\
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/project.xml b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/project.xml
index 67bdf69..3fbfa4f 100644
--- a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/project.xml	
+++ b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/nbproject/project.xml	
@@ -14,7 +14,6 @@
         
         
             MP2-chapter4_CalebFontenot
-            
             
                 
             
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/bgm/Caleb Fontenot - Blips.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/bgm/Caleb Fontenot - Blips.wav
new file mode 100644
index 0000000..a0c299c
Binary files /dev/null and b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/bgm/Caleb Fontenot - Blips.wav differ
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/bgm/Caleb Fontenot - DEAL WITH IT.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/bgm/Caleb Fontenot - DEAL WITH IT.wav
new file mode 100644
index 0000000..ea93eb8
Binary files /dev/null and b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/bgm/Caleb Fontenot - DEAL WITH IT.wav differ
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/bgm/Caleb Fontenot - Tomodachi Moment.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/bgm/Caleb Fontenot - Tomodachi Moment.wav
new file mode 100644
index 0000000..bcf0cb5
Binary files /dev/null and b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/bgm/Caleb Fontenot - Tomodachi Moment.wav differ
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0000.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0000.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0000.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0000.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0001.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0001.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0001.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0001.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0002.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0002.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0002.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0002.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0003.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0003.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0003.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0003.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0004.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0004.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0004.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0004.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0005.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0005.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0005.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0005.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0007.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0007.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0007.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0007.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0009.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0009.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0009.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0009.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0010.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0010.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0010.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0010.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0012.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0012.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0012.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0012.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0014.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0014.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0014.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0014.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0016.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0016.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0016.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0016.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0017.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0017.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0017.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0017.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0018.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0018.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0018.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0018.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0019.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0019.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0019.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0019.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0020.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0020.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0020.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0020.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0021.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0021.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0021.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0021.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0022.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0022.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0022.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0022.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0023.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0023.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0023.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0023.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0024.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0024.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0024.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0024.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0025.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0025.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0025.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0025.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0026.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0026.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0026.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0026.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0027.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0027.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0027.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0027.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0028.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0028.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0028.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0028.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0029.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0029.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0029.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0029.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0030.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0030.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0030.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0030.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0031.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0031.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0031.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0031.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0032.wav b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0032.wav
similarity index 100%
rename from Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/Sample_0032.wav
rename to Semester 3/Assignments/MP2-chapter4_CalebFontenot/sound/sfx/Sample_0032.wav
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/src/MP2_chapter4_CalebFontenot/BouncingBall.java b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/src/MP2_chapter4_CalebFontenot/BouncingBall.java
index b5957c5..a83f72c 100644
--- a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/src/MP2_chapter4_CalebFontenot/BouncingBall.java	
+++ b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/src/MP2_chapter4_CalebFontenot/BouncingBall.java	
@@ -5,12 +5,14 @@
 package MP2_chapter4_CalebFontenot;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
 import javafx.animation.KeyFrame;
 import javafx.animation.Timeline;
 import javafx.beans.property.DoubleProperty;
 import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
-import javafx.geometry.Pos;
+import javafx.scene.control.Button;
 import javafx.scene.control.Label;
 import javafx.scene.layout.GridPane;
 import javafx.scene.layout.Pane;
@@ -27,7 +29,9 @@ import javafx.util.Duration;
  */
 public class BouncingBall extends Pane {
 
+    private List mediaPlayers = new ArrayList<>();
     GridPane textPane = new GridPane();
+    private String currentlyPlaying;
     private final int COLLISION_COOLDOWN = 20;
     private long timeSinceLastCollisionEvent = 0;
     final double RACKET_LENGTH = 100;
@@ -41,27 +45,33 @@ public class BouncingBall extends Pane {
     private Label ballCords = new Label();
     private Label playerScoreLabel = new Label("Player Score: 0");
     private Label computerScoreLabel = new Label("Computer Score: 0");
+    private Label nowPlaying = new Label();
+    private Button restartBgm = new Button("Restart BGM");
 
     private Timeline animation;
 
     private int computerScore, playerScore = 0;
 
-    public BouncingBall()
-    {
+    public BouncingBall() {
+        restartBgm.setOnMouseClicked(e -> {
+            playSound("bgm");
+        });
         circle.setFill(Color.RED); // Set ball color
         racket.setFill(Color.BLUE);
         textPane.add(racketTime, 0, 0);
         textPane.add(ballCords, 0, 1);
         textPane.add(playerScoreLabel, 0, 2);
         textPane.add(computerScoreLabel, 0, 3);
+        textPane.add(nowPlaying, 0, 4);
+        textPane.add(restartBgm, 0, 5);
         getChildren().addAll(circle, racket, textPane); // Place a ball into this pane
         racket.relocate(0, 580);
+        playSound("bgm");
         // Create an animation for moving the ball
         animation = new Timeline(new KeyFrame(Duration.millis(1), new EventHandler() {
             @Override
-            public void handle(ActionEvent t)
-            {
-                
+            public void handle(ActionEvent t) {
+
                 timeSinceLastCollisionEvent++;
                 racketTime.setText("Frames since last collision: " + timeSinceLastCollisionEvent);
                 moveBall();
@@ -87,8 +97,7 @@ public class BouncingBall extends Pane {
 
     }
 
-    private boolean processRacketCollision()
-    {
+    private boolean processRacketCollision() {
         boolean racketCollision = racket.getBoundsInParent().intersects(circle.getBoundsInParent());
 
         if (racketCollision && (timeSinceLastCollisionEvent > COLLISION_COOLDOWN)) { // This is second condition is a cooldown. It prevents odd behavior happening with the ball and the racket if the racket hits the ball at certain angles.
@@ -102,8 +111,7 @@ public class BouncingBall extends Pane {
         }
     }
 
-    private void moveBall()
-    {
+    private void moveBall() {
 
         // Check boundaries
         if (x < radius || x > getWidth() - radius) {
@@ -121,40 +129,33 @@ public class BouncingBall extends Pane {
         ballCoordsToLabel();
     }
 
-    public void play()
-    {
+    public void play() {
         animation.play();
     }
 
-    public void pause()
-    {
+    public void pause() {
         animation.pause();
     }
 
-    public void increaseSpeed()
-    {
+    public void increaseSpeed() {
         animation.setRate(animation.getRate() * 1.5);
         System.out.println(animation.getRate());
     }
 
-    public void decreaseSpeed()
-    {
+    public void decreaseSpeed() {
         animation.setRate(animation.getRate() * 1.5 > 0 ? animation.getRate() / 1.5 : 0);
         System.out.println(animation.getRate());
     }
 
-    public DoubleProperty rateProperty()
-    {
+    public DoubleProperty rateProperty() {
         return animation.rateProperty();
     }
 
-    public void moveRacket(double x)
-    {
+    public void moveRacket(double x) {
         racket.relocate(x, 580);
     }
 
-    public void showInfoLabel()
-    {
+    public void showInfoLabel() {
         double paneHeight = getHeight();
         double paneWidth = getWidth();
         getChildren().add(infoLabel);
@@ -162,59 +163,93 @@ public class BouncingBall extends Pane {
         infoLabel.relocate(paneWidth / 4.0, paneHeight / 2.0);
     }
 
-    public void hideInfoLabel()
-    {
+    public void hideInfoLabel() {
         getChildren().remove(infoLabel);
     }
 
-    private void incrementPlayerScore()
-    {
+    private void incrementPlayerScore() {
         playerScoreLabel.setText("Player score: " + ++playerScore);
     }
 
-    private void incrementComputerScore()
-    {
+    private void incrementComputerScore() {
         computerScoreLabel.setText("Computer score: " + ++computerScore);
 
     }
 
-    private void ballCoordsToLabel()
-    {
+    private void ballCoordsToLabel() {
         ballCords.setText("Ball coords: " + x + ", " + y);
     }
 
-    private void playSound(String sampleType)
-    {
-        String sample = "";
+    private void playSound(String sampleType) {
+        boolean isSfx = true;
+        String sample = "sound/sfx/Sample_00";
         int randInt = (int) (Math.random() * 2);
         switch (sampleType) {
             case "collision":
+                randInt = (int) (Math.random() * 2);
+                isSfx = true;
                 switch (randInt) {
                     case 0:
-                        sample = "05";
+                        sample += "05";
                         break;
                     case 1:
-                        sample = "07";
+                        sample += "07";
                         break;
                 }
                 break;
             case "racket":
+                randInt = (int) (Math.random() * 2);
+                isSfx = true;
                 switch (randInt) {
                     case 0:
-                        sample = "10";
+                        sample += "10";
                         break;
                     case 1:
-                        sample = "12";
+                        sample += "12";
                         break;
                 }
+                break;
+            case "bgm":
+                sample = "sound/bgm/";
+                randInt = (int) (Math.random() * 3);
+                isSfx = false;
+                switch (randInt) {
+                    case 0:
+                        currentlyPlaying = "Caleb Fontenot - Blips";
+                        nowPlaying.setText("Now playing: " + currentlyPlaying);
+                        break;
+                    case 1:
+                        currentlyPlaying = "Caleb Fontenot - DEAL WITH IT";
+                        nowPlaying.setText("Now playing: " + currentlyPlaying);
+                        break;
+                    case 2:
+                        currentlyPlaying = "Caleb Fontenot - Tomodachi Moment";
+                        nowPlaying.setText("Now playing: " + currentlyPlaying);
+                        break;
+                }
+                sample += currentlyPlaying;
+                break;
         }
-
-        Media sound = new Media(new File("sound/Sample_00" + sample + ".wav").toURI().toString());
+        Media sound = new Media(new File(sample + ".wav").toURI().toString());
         MediaPlayer mediaPlayer = new MediaPlayer(sound);
-
         mediaPlayer.setStartTime(Duration.ZERO);
-
+        mediaPlayer.setAutoPlay(true);
+        // If we're playing BGM, lower the volume a little
+        if (!isSfx) {
+            mediaPlayer.setVolume(0.6);
+            mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);
+        }
         mediaPlayer.play();
-        //mediaPlayer.setOnEndOfMedia();
+        mediaPlayers.add(mediaPlayer); // Prevent the JVM's GC from deleting our media player if there's already one running
+        // Free the media player when it has finished playing a sound.
+        mediaPlayer.setOnEndOfMedia(new Runnable() {
+            @Override
+            public void run() {
+                //System.out.println("I'm done playing sound! Please take me to the ether, Java GC!");
+                mediaPlayer.stop();
+                mediaPlayer.dispose();
+                mediaPlayers.remove(mediaPlayer);
+            }
+        });
     }
 }
diff --git a/Semester 3/Assignments/MP2-chapter4_CalebFontenot/src/MP2_chapter4_CalebFontenot/MediaType.java b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/src/MP2_chapter4_CalebFontenot/MediaType.java
new file mode 100644
index 0000000..ad455c7
--- /dev/null
+++ b/Semester 3/Assignments/MP2-chapter4_CalebFontenot/src/MP2_chapter4_CalebFontenot/MediaType.java	
@@ -0,0 +1,26 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package MP2_chapter4_CalebFontenot;
+
+import javafx.scene.media.MediaPlayer;
+
+/**
+ *
+ * @author caleb
+ */
+public class MediaType {
+    private MediaPlayer mediaPlayer;
+    private boolean isBgm;
+
+    public MediaType(MediaPlayer mediaPlayer, boolean isBgm) {
+        this.mediaPlayer = mediaPlayer;
+        this.isBgm = isBgm;
+    }
+
+    public boolean isIsBgm() {
+        return isBgm;
+    }
+
+}
diff --git a/Semester 3/Assignments/MP2FX_Stelly/build.xml b/Semester 3/Assignments/MP2FX_Stelly/build.xml
new file mode 100644
index 0000000..9397b0e
--- /dev/null
+++ b/Semester 3/Assignments/MP2FX_Stelly/build.xml	
@@ -0,0 +1,53 @@
+
+    Builds, tests, and runs the project Lab1FX_Stelly.
+    
+    
+
diff --git a/Semester 3/Assignments/MP2FX_Stelly/manifest.mf b/Semester 3/Assignments/MP2FX_Stelly/manifest.mf
new file mode 100644
index 0000000..1574df4
--- /dev/null
+++ b/Semester 3/Assignments/MP2FX_Stelly/manifest.mf	
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: Main-Class will be added automatically by build
+
diff --git a/Semester 3/Assignments/MP2FX_Stelly/nbproject/build-impl.xml b/Semester 3/Assignments/MP2FX_Stelly/nbproject/build-impl.xml
new file mode 100644
index 0000000..bf6233c
--- /dev/null
+++ b/Semester 3/Assignments/MP2FX_Stelly/nbproject/build-impl.xml	
@@ -0,0 +1,1762 @@
+
+
+
+    
+    
+        
+            
+                
+            
+        
+    
+    
+    
+    
+        
+        
+    
+    
+        
+        
+        
+    
+
+    
+        
+            
+                
+            
+        
+    
+    
+        
+            
+            
+            
+                
+                    
+                    
+                        
+                        
+                            
+                        
+                        
+                            
+                            
+                        
+                        
+                    
+                
+            
+        
+    
+    
+        
+            
+                
+                    
+                
+            
+        
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+            
+        
+        
+        
+        
+        
+        
+        
+        
+            
+                
+                
+            
+        
+        
+        
+        
+    
+    
+        
+        
+        
+            
+                
+                    
+                
+                
+            
+        
+        
+            
+                
+                
+                    
+                
+            
+        
+        
+            
+                
+                
+                
+                    
+                
+            
+        
+        
+            
+                
+                    
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+            
+        
+        
+            
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+        
+        
+        
+        
+            
+                
+            
+        
+        
+        
+        
+        
+        
+        
+        
+            
+                
+                
+                    
+                
+            
+        
+        
+        
+        
+        
+        
+            
+        
+        
+        
+            
+                
+                
+                    
+                
+            
+        
+        
+            
+        
+        
+            
+                
+                
+                    
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+        
+        
+        
+        
+            
+                
+                
+            
+        
+        
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+        
+        
+            
+        
+        
+    
+    
+        
+        
+    
+    
+        Must set src.dir
+        Must set test.src.dir
+        Must set build.dir
+        Must set dist.dir
+        Must set build.classes.dir
+        Must set dist.javadoc.dir
+        Must set build.test.classes.dir
+        Must set build.test.results.dir
+        Must set build.classes.excludes
+        Must set dist.jar
+    
+    
+        
+            
+            
+            
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+                
+                    
+                        
+                        
+                    
+                
+                
+                
+                
+                
+                
+                    
+                        
+                            
+                        
+                    
+                
+                
+                    
+                        
+                            
+                        
+                    
+                    
+                        
+                    
+                    
+                        
+                    
+                    
+                        
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+                
+                
+                
+                
+                    
+                        
+                            
+                        
+                    
+                    
+                        
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+                
+                
+                
+                    
+                        
+                            
+                        
+                    
+                    
+                        
+                    
+                    
+                    
+                    
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+                
+                    
+                        
+                    
+                
+            
+        
+        
+            
+            
+                Must set javac.includes
+                
+                    
+                        
+                    
+                    
+                
+                
+                
+                
+                    
+                
+                
+                    
+                
+            
+        
+    
+    
+        
+            
+                
+                
+                    
+                
+            
+        
+        
+            
+                
+                
+            
+        
+    
+    
+        
+        
+        
+    
+    
+        
+            
+            
+            
+            
+                
+                
+                    
+                        
+                        
+                    
+                    
+                        
+                    
+                    
+                        
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+                
+                
+                    
+                        
+                        
+                    
+                    
+                        
+                    
+                    
+                    
+                    
+                    
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+            
+                
+                    
+                        
+                        
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+            
+                
+                    
+                        
+                            
+                                
+                            
+                            
+                                
+                            
+                        
+                        
+                    
+                
+            
+        
+    
+    
+    
+        
+            
+            
+            
+            
+            
+            
+                
+                    
+                
+                
+                    
+                        
+                    
+                
+                
+                
+                    
+                    
+                        
+                        
+                    
+                    
+                        
+                    
+                    
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+            
+                No tests executed.
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+            
+                
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+            
+                
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+                
+                    
+                        
+                        
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+            
+                
+                    
+                        
+                        
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+                
+                    
+                
+                
+                    
+                
+                
+                
+                
+                    
+                        
+                        
+                        
+                        
+                        
+                        
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+                
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+            
+            
+                
+                    
+                        
+                        
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+            
+            
+                
+                    
+                        
+                            
+                            
+                        
+                    
+                
+            
+        
+    
+    
+    
+    
+    
+        
+        
+    
+    
+        
+        
+    
+    
+        
+            
+            
+            
+                
+            
+        
+        
+            
+            
+            
+                
+                
+                
+                    
+                    
+                    
+                    
+                    
+                    
+                        
+                    
+                    
+                        
+                        
+                    
+                    
+                
+            
+        
+    
+    
+        Must set JVM to use for profiling in profiler.info.jvm
+        Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+    
+    
+    
+        
+            
+            
+            
+            
+            
+                
+                    
+                        
+                    
+                    
+                        
+                    
+                
+            
+        
+        
+            
+            
+                
+                    
+                        
+                    
+                
+            
+        
+    
+    
+        
+            
+        
+        
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+            
+                
+                    
+                        
+                        
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+            
+            
+            
+                
+                    
+                        
+                    
+                    
+                        
+                        
+                    
+                    
+                        
+                    
+                    
+                    
+                    
+                    
+                    
+                        
+                        
+                    
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+            
+            
+            
+                
+                    
+                        
+                    
+                    
+                        
+                    
+                    
+                        
+                    
+                    
+                    
+                    
+                    
+                    
+                        
+                        
+                    
+                    
+                
+            
+        
+    
+    
+        
+            
+            
+            
+            
+            
+            
+            
+                
+                    
+                    
+                    
+                    
+                    
+                    
+                        
+                    
+                    
+                        
+                        
+                    
+                    
+                
+            
+        
+    
+    
+    
+        
+            
+            
+            
+                
+                
+                    
+                    
+                
+                
+                    
+                    
+                        
+                        
+                            
+                        
+                        
+                    
+                
+                
+                
+                    
+                    
+                        
+                        
+                    
+                
+            
+        
+    
+    
+        
+            
+                
+            
+        
+    
+    
+        
+        
+        
+        
+        
+        
+        
+            
+                
+            
+        
+    
+    
+        
+            
+        
+        
+            
+        
+    
+    
+        
+    
+    
+    
+    
+        
+        
+    
+    
+        
+    
+    
+        
+        
+        
+        
+        
+            
+        
+    
+    
+    
+        
+    
+    
+        
+            
+        
+    
+    
+        
+    
+    
+        
+        
+    
+    
+        
+            
+                
+            
+        
+        
+    
+    
+        
+        
+            
+        
+    
+    
+        
+        
+            
+        
+    
+    
+        
+        
+    
+    
+    
+        
+        
+    
+    
+        Must select some files in the IDE or set javac.includes
+        
+        
+    
+    
+        
+        
+    
+    
+    
+    
+        
+        
+    
+    
+        
+        
+    
+    
+        
+            
+            
+        
+        
+            
+                
+                
+                
+                
+                
+            
+        
+    
+    
+        
+        
+    
+    
+        
+        
+    
+    
+        
+        
+    
+    
+        
+            
+        
+    
+    
+        
+            
+        
+    
+    
+        
+        
+        
+        
+            
+        
+    
+    
+        
+            
+                
+                
+                
+                    
+                
+                
+                    
+                
+            
+        
+    
+    
+        
+        To run this application from the command line without Ant, try:
+        
+        java -jar "${dist.jar.resolved}"
+    
+    
+        
+        
+        
+        
+            
+        
+        
+            
+            
+        
+        
+            
+            
+            
+        
+        
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+        
+        
+            
+        
+        
+            
+        
+        
+            
+        
+        
+            
+        
+        
+    
+    
+        
+            
+        
+    
+    
+    
+    
+        
+        
+    
+    
+    
+    
+    
+        
+        
+    
+    
+        
+            
+                
+                
+                
+            
+        
+    
+    
+        
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+        
+        
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+        
+    
+    
+        
+        
+    
+    
+    
+    
+        
+            
+                
+            
+        
+    
+    
+        
+    
+    
+        Must select one file in the IDE or set run.class
+        
+    
+    
+        Must select one file in the IDE or set run.class
+        
+    
+    
+    
+        
+    
+    
+        
+    
+    
+        
+            
+                
+            
+        
+    
+    
+    
+        
+    
+    
+    
+        Must select one file in the IDE or set debug.class
+        
+    
+    
+    
+        Must select one file in the IDE or set debug.class
+        
+    
+    
+    
+        Must set fix.includes
+        
+    
+    
+        
+    
+    
+    
+    
+    
+        This target only works when run from inside the NetBeans IDE.
+        
+            
+                
+            
+        
+        
+    
+    
+        Must select one file in the IDE or set profile.class
+        This target only works when run from inside the NetBeans IDE.
+        
+            
+                
+            
+        
+        
+    
+    
+        This target only works when run from inside the NetBeans IDE.
+        
+            
+                
+            
+        
+        
+            
+                
+            
+        
+    
+    
+        This target only works when run from inside the NetBeans IDE.
+        
+            
+                
+            
+        
+        
+            
+                
+                
+                
+                
+                
+                    
+                
+            
+        
+    
+    
+    
+        
+            
+                
+                
+            
+        
+    
+    
+        
+        
+    
+    
+        Must select one file in the IDE or set run.class
+        
+        
+    
+    
+    
+        Must select some files in the IDE or set test.includes
+        
+        
+    
+    
+        Must select one file in the IDE or set run.class
+        
+        
+    
+    
+        Must select one file in the IDE or set applet.url
+        
+        
+    
+    
+    
+        
+        
+            
+                
+                
+                    
+                
+            
+        
+        
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+            
+            
+                
+            
+            
+                
+                
+            
+            
+            
+        
+        
+            
+                
+            
+            
+                
+            
+        
+    
+    
+        
+    
+    
+    
+    
+        
+    
+    
+        
+        
+    
+    
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+    
+    
+        
+            
+                
+                
+            
+        
+        
+        
+        
+            
+                
+                
+                    
+                    
+                
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+    
+    
+        
+        
+        
+    
+    
+    
+        
+    
+    
+        
+            
+                
+            
+        
+        
+            
+        
+    
+    
+        
+        
+    
+    
+    
+        
+        
+    
+    
+        Must select some files in the IDE or set javac.includes
+        
+        
+            
+                
+            
+        
+        
+            
+        
+    
+    
+        
+        
+    
+    
+    
+    
+        
+    
+    
+        
+    
+    
+        Some tests failed; see details above.
+    
+    
+    
+    
+    
+        
+    
+    
+        Must select some files in the IDE or set test.includes
+        
+    
+    
+        Some tests failed; see details above.
+    
+    
+    
+        Must select some files in the IDE or set test.class
+        Must select some method in the IDE or set test.method
+        
+    
+    
+        Some tests failed; see details above.
+    
+    
+    
+    
+        Must select one file in the IDE or set test.class
+        
+    
+    
+        Must select one file in the IDE or set test.class
+        Must select some method in the IDE or set test.method
+        
+    
+    
+        
+    
+    
+    
+    
+    
+        
+    
+    
+    
+    
+        Must select one file in the IDE or set applet.url
+        
+            
+                
+            
+        
+    
+    
+    
+        Must select one file in the IDE or set applet.url
+        
+            
+                
+            
+        
+    
+    
+    
+    
+        
+        
+    
+    
+        
+    
+    
+        
+        
+        
+        
+        
+            
+        
+    
+    
+        
+        
+        
+    
+    
+        
+        
+    
+    
+    
+        
+        
+            
+                
+                    
+                
+                
+            
+        
+    
+    
+        
+            
+                
+                
+            
+        
+    
+
diff --git a/Semester 3/Assignments/MP2FX_Stelly/nbproject/configs/Run_as_WebStart.properties b/Semester 3/Assignments/MP2FX_Stelly/nbproject/configs/Run_as_WebStart.properties
new file mode 100644
index 0000000..670fff0
--- /dev/null
+++ b/Semester 3/Assignments/MP2FX_Stelly/nbproject/configs/Run_as_WebStart.properties	
@@ -0,0 +1,2 @@
+# Do not modify this property in this configuration. It can be re-generated.
+$label=Run as WebStart
diff --git a/Semester 3/Assignments/MP2FX_Stelly/nbproject/configs/Run_in_Browser.properties b/Semester 3/Assignments/MP2FX_Stelly/nbproject/configs/Run_in_Browser.properties
new file mode 100644
index 0000000..f2a5a65
--- /dev/null
+++ b/Semester 3/Assignments/MP2FX_Stelly/nbproject/configs/Run_in_Browser.properties	
@@ -0,0 +1,2 @@
+# Do not modify this property in this configuration. It can be re-generated.
+$label=Run in Browser
diff --git a/Semester 3/Assignments/MP2FX_Stelly/nbproject/genfiles.properties b/Semester 3/Assignments/MP2FX_Stelly/nbproject/genfiles.properties
new file mode 100644
index 0000000..a37c668
--- /dev/null
+++ b/Semester 3/Assignments/MP2FX_Stelly/nbproject/genfiles.properties	
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=5221739b
+build.xml.script.CRC32=e15c08d4
+build.xml.stylesheet.CRC32=f85dc8f2@1.103.0.48
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=811c71b0
+nbproject/build-impl.xml.script.CRC32=98d2f61a
+nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.107.0.48
diff --git a/Semester 3/Assignments/MP2FX_Stelly/nbproject/jfx-impl.xml b/Semester 3/Assignments/MP2FX_Stelly/nbproject/jfx-impl.xml
new file mode 100644
index 0000000..6aeb313
--- /dev/null
+++ b/Semester 3/Assignments/MP2FX_Stelly/nbproject/jfx-impl.xml	
@@ -0,0 +1,4197 @@
+
+
+
+
+    JavaFX-specific Ant calls
+
+
+    
+    
+    
+        
+    
+
+    
+        
+    
+
+    
+        
+    
+
+    
+        
+    
+    
+    
+        
+    
+
+    
+        
+    
+    
+    
+    
+    
+    
+        
+        
+        
+        
+            
+                
+            
+            
+                
+                
+                
+                
+                
+                
+            
+        
+    
+    
+        
+        
+        
+        
+            
+                
+                
+                
+            
+        
+    
+
+    
+        
+            
+        
+        
+            
+        
+        
+            
+        
+        
+        
+        
+    
+
+    
+        
+            
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+    
+    
+        
+        
+            
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+        
+    
+    
+        
+            
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+        
+    
+    
+        
+            
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+        
+    
+    
+        
+        
+    
+        
+    
+        
+        
+            
+        
+        
+        
+            
+                
+                
+                
+                
+                
+                
+            
+        
+        
+        
+            
+                
+                    
+                    
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+                
+                
+                
+                
+                
+            
+        
+        
+        
+        
+        
+    
+        
+    
+        
+        
+            
+        
+        
+        
+            
+                
+                
+                
+                
+                
+                
+                
+                
+                
+                
+                
+                
+                
+            
+        
+        
+            
+            
+                
+                
+            
+        
+        
+        
+        
+    
+
+    
+        
+    
+
+    
+    
+
+    
+        
+            
+                
+                
+                    
+                
+            
+        
+        
+    
+
+    
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+        
+        
+    
+
+    
+        
+            
+                
+                
+            
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+            
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+            
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+            
+        
+    
+    
+        
+    
+    
+        
+            
+        
+        
+            
+        
+        
+            
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+            
+        
+    
+    
+        
+            
+        
+        
+            
+        
+        
+            
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+            
+        
+    
+    
+        
+            
+                
+                
+            
+        
+    
+    
+        
+    
+    
+        
+        
+            
+                
+                
+            
+        
+    
+    
+        
+    
+    
+        
+        
+            
+                
+                
+            
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+            
+        
+    
+    
+        
+    
+    
+        
+    
+    
+        
+        
+        
+        
+            
+        
+        
+        
+    
+    
+        
+    
+    
+        
+        
+            
+            
+        
+        
+            
+            
+        
+    
+    
+        
+        
+        
+        
+        
+    
+
+    
+        
+            
+                
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+            
+        
+        
+        
+        
+        
+        
+    
+    
+    
+    
+
+    
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+        
+        
+    
+
+    
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+    
+    
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+                
+            
+        
+    
+    
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+                
+            
+        
+    
+    
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+                
+            
+        
+    
+    
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+                
+            
+        
+    
+    
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+    
+    
+        
+    
+    
+        
+    
+    
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+                
+            
+        
+    
+    
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+    
+    
+        
+    
+
+    
+        
+            
+                
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                
+                
+            
+        
+        
+        
+    
+
+
+    
+
+    
+        
+            
+                
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+    
+    
+        
+        
+            
+                
+                
+                    
+                    
+                
+            
+        
+    
+    
+        
+    
+    
+        
+            
+                
+                
+            
+        
+    
+    
+        
+        
+            
+        
+        
+            
+                
+                
+                
+                
+                
+            
+        
+        
+    
+    
+        
+    
+    
+        
+    
+
+    
+        
+            
+                
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+            
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+
+    
+    
+    
+        
+    
+    
+
+    
+    
+    
+    
+        
+    
+    
+    
+        
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+                
+            
+        
+        
+            
+                
+                    
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+                    
+                
+            
+        
+        
+            
+                
+                
+                    
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+    
+
+    
+        
+            
+                
+                
+            
+        
+    
+    
+        
+    
+
+    
+        
+            
+                
+                
+            
+        
+    
+    
+        
+    
+
+    
+        
+        
+    
+    
+        
+        
+    
+
+    
+        
+    
+    
+        
+    
+
+    
+        
+    
+    
+        
+    
+
+    
+        
+        
+    
+    
+        
+        
+    
+    
+    
+        
+            
+        
+        
+        
+            
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+            
+        
+        
+        
+    
+    
+        
+    
+    
+        
+        ${cssfileslist}
+        
+            
+        
+    
+
+
+    
+    
+    
+    
+        
+    
+    
+        
+    
+    
+        
+            
+            
+                
+                
+                
+                
+                    self.addMappedName(
+                        (source.indexOf("jfxrt.jar") >= 0) ||
+                        (source.indexOf("deploy.jar") >= 0) ||
+                        (source.indexOf("javaws.jar") >= 0) ||
+                        (source.indexOf("plugin.jar") >= 0)
+                        ? "" : source
+                    );
+                
+            
+            
+            
+            
+            
+            
+            
+            
+                
+                    
+                
+            
+        
+    
+    
+    
+        
+    
+
+
+    
+
+    
+    
+        
+    
+    
+        
+            
+                
+                
+            
+        
+        
+            
+                
+                
+            
+        
+    
+    
+        
+    
+
+    
+        
+            
+            
+            
+            
+        
+    
+
+    
+        
+        
+            
+            
+            
+            
+            
+            
+                
+                    
+                
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+                
+                
+            
+            
+            
+        
+    
+    
+    
+        
+            
+        
+        
+    
+    
+    
+        
+    
+    
+    
+        
+        
+    
+    
+
+    
+
+    
+    
+
+    
+        
+        
+    
+    
+        
+            
+            
+        
+    
+    
+        
+            
+            
+            
+        
+    
+    
+        
+            
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+            
+        
+    
+    
+        
+    
+    
+        
+    
+
+    
+    
+
+    
+    
+
+
+    
+    
+    
+        
+    
+
+    
+        
+            
+        
+    
+
+    
+        
+            
+                
+                
+            
+        
+    
+    
+    
+        
+        
+        
+    
+    
+    
+        
+        
+            
+                
+                
+            
+        
+    
+
+    
+        
+            
+        
+    
+
+    
+        
+        
+        
+        
+    
+
+    
+        
+        
+        
+        
+    
+
+    
+        
+            
+                
+                
+            
+        
+    
+
+    
+        
+    
+
+    
+    
+
+    
+        
+            
+            
+        
+    
+
+    
+        
+            
+                
+                    
+                
+            
+        
+    
+
+    
+    
+        
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+        
+    
+
+    
+        
+            
+            
+            
+            
+            
+                
+                    
+                    
+                
+            
+        
+    
+
+    
+        
+            
+            
+            
+            
+            
+            
+                
+                    
+                    
+                
+            
+        
+    
+
+    
+        
+            
+            
+            
+            
+            
+                
+                    
+                
+            
+            
+                
+                    
+                    
+                    
+                
+            
+        
+    
+
+    
+        
+            
+            
+            
+            
+            
+                
+                    
+                
+            
+            
+            
+                
+                    
+                    
+                    
+                
+            
+        
+    
+
+    
+        
+            
+            
+                
+                
+                     
+                          
+                          
+                     
+                
+            
+            
+        
+    
+
+    
+    
+        
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+            
+        
+    
+
+    
+    
+        
+            
+            
+            
+                
+            
+            
+            
+                
+            
+            
+            
+                
+            
+            
+            
+                
+                    
+                    
+                        
+                    
+                
+            
+            
+            
+            
+            
+                
+                    
+                    
+                    
+                    
+                    
+                
+            
+            
+            
+                
+            
+            
+                
+            
+            
+            
+            
+            
+                
+            
+            
+            
+            
+            
+            
+            
+                
+            
+            
+                
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                
+            
+            
+                    
+                    
+            
+                    
+                    
+            
+                    
+            
+            
+            
+            
+        
+    
+
+
+    
+    
+    
+        
+            
+            
+                
+            
+        
+    
+
+    
+        
+            
+            
+                
+            
+        
+    
+
+    
+        
+            
+            
+                
+            
+        
+    
+
+    
+        
+            
+                
+                    
+                    
+                    
+                
+            
+        
+    
+
+    
+        
+            
+                
+                    
+                
+                
+                    
+                    
+                    
+                    
+                
+            
+        
+    
+
+    
+        
+            
+            
+                
+                
+                
+                    
+                
+                
+                    
+                    
+                    
+                
+            
+            
+        
+    
+
+    
+        
+            
+            
+            
+                
+                
+                
+                
+                
+                
+                
+            
+            
+        
+    
+
+    
+        
+            
+            
+            
+            
+                
+                
+                
+                
+                
+                
+                
+                
+            
+            
+        
+    
+
+
+    
+
+    
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+    
+    
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+    
+
+
+    
+
+    
+    
+    
+        
+        
+        
+        
+        
+        
+    
+    
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+        
+        
+        
+        
+        
+        
+    
+    
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+        
+        
+        
+        
+        
+        
+        
+    
+    
+        
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+        
+        
+        
+        
+        
+        
+        
+    
+    
+        
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+    
+        
+        
+        
+        
+        
+        
+    
+    
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+    
+        
+        
+        
+        
+        
+        
+        
+    
+    
+        
+        
+        
+        
+        
+        
+        
+    
+
+
+    
+
+    
+    
+    
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+    
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+    
+        
+        
+        
+        
+        
+        
+    
+
+
+    
+
+    
+        
+        
+            
+                
+                    
+                    
+                
+                
+            
+        
+        
+    
+    
+    
+    
+    
+        
+        
+        
+        
+        
+        
+        
+        
+    
+    
+        
+        
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+        
+        
+        
+        
+        
+        
+        
+        
+    
+    
+        
+        
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+        
+        
+        
+        
+        
+        
+        
+        
+    
+    
+        
+        
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+        
+        
+        
+        
+        
+        
+        
+        
+    
+    
+        
+        
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+    
+        
+        
+        
+        
+        
+        
+        
+        
+    
+    
+        
+        
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+    
+        
+        
+        
+        
+        
+        
+        
+        
+    
+    
+        
+        
+        
+        
+        
+        
+        
+        
+    
+
+
+    
+
+    
+        
+        
+            
+                
+                    
+                    
+                
+                
+            
+        
+        
+    
+
+    
+    
+    
+        
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+        
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+        
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+        
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+    
+        
+        
+        
+        
+        
+        
+        
+    
+
+    
+    
+    
+    
+        
+        
+        
+        
+        
+        
+        
+    
+
+
+    
+
+    
+        
+        
+    
+    
+    
+    
+    
+        
+        
+    
+    
+    
+
+    
+    
+
+    
+        
+        
+    
+    
+                
+        
+    
+    
+    
+         
+    
+    
+        
+    
+
+    
+         
+    
+    
+        
+    
+    
+    
+        
+            
+                
+                
+            
+        
+    
+    
+        
+        
+    
+    
+        
+    
+    
+        
+    
+    
+        
+        
+    
+    
+    
+        
+        
+    
+    
+        
+    
+    
+    
+        
+    
+    
+        
+    
+
+    
+        
+            
+                
+                
+                
+                    
+                    
+                    
+                
+            
+        
+        
+            
+                
+                
+                
+                    
+                    
+                    
+                
+            
+        
+        
+            
+                
+                
+                
+                    
+                
+            
+        
+        
+            
+                
+                
+                
+                    
+                
+            
+        
+        
+        
+        
+        
+    
+    
+        
+        
+        
+        
+        
+        
+        
+        
+            
+                
+                
+                
+                
+                
+            
+        
+    
+    
+        
+        
+        
+        
+            
+        
+        
+        
+        
+        
+            
+                
+            
+        
+    
+    
+        
+        
+        
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+    
+    
+        
+        
+        
+            
+        
+        
+            
+                
+                
+                
+                
+            
+        
+    
+    
+        
+        
+        
+        
+        
+            
+                
+                
+            
+        
+        
+        
+        
+        
+        
+    
+
+    
+
+    
+        
+    
+    
+    
+        
+        
+    
+    
+        
+        
+    
+    
+        
+        
+    
+    
+        
+        
+    
+    
+        
+        
+    
+    
+    
+    
+        
+            
+                
+                
+            
+        
+        
+            
+        
+        
+            
+        
+        
+            
+        
+    
+    
+        
+        
+        
+        
+            
+                
+                
+            
+                
+        
+        
+        
+        
+    
+    
+        
+        
+    
+    
+        
+        
+                
+        
+            
+            
+            
+            
+            
+            
+                
+            
+            
+            
+                
+                
+            
+        
+        
+    
+    
+        
+        
+                
+        
+            
+            
+            
+            
+            
+            
+            
+            
+                
+            
+            
+            
+                
+                
+            
+        
+        
+    
+    
+        
+    
+    
+    
+        
+    
+    
+
+    
+    
+        
+        
+    
+    
+    
+
+    
+        
+        
+    
+    
+    
+    
+    
+
+    
+        
+        
+            
+        
+        
+        
+        
+            
+                
+                
+            
+        
+    
+    
+        
+        
+    
+    
+    
+         
+    
+    
+        
+    
+    
+    
+        
+        
+        
+    
+
+    
+         
+        
+        
+        
+    
+    
+        
+    
+    
+       
+    
+    
+    
+
+    
+          
+    
+    
+       
+    
+
+    
+
+    
+        
+            
+        
+        
+            
+        
+    
+
+
+    
+
+    
+        
+        
+    
+    
+        
+        
+    
+    
+        
+            
+        
+        
+            
+                
+                
+            
+        
+    
+
+    
+        
+        
+    
+
+    
+    
+        
+            
+                
+                    
+                    
+                
+            
+        
+        
+            
+        
+    
+    
+        
+    
+
+    
+        
+        
+            
+        
+        
+    
+    
+    
+        
+    
+        
+        
+            
+            
+            
+        
+    
+    
+    
+                
+        
+            
+                
+                
+            
+        
+    
+    
+    
+        
+    
+    
+    
+        
+                
+        
+            
+            
+            
+        
+    
+    
+    
+        
+        
+    
+    
+    
+
+    
+
+    
+
+
+    
+
+    
+        
+            
+                
+                    
+                    
+                
+                
+                    
+                    
+                
+            
+        
+        
+            
+                
+                
+            
+        
+        
+        
+        
+    
+
+    
+        
+    
+    
+        
+            
+                
+                
+            
+        
+    
+    
+    
+        
+    
+    
+    
+        
+        
+        
+            
+        
+        
+            
+                
+                
+            
+        
+    
+
+    
+    
+        
+            
+                
+                    
+                        
+                        
+                    
+                
+                
+                    
+                    
+                
+            
+        
+        
+            
+        
+    
+    
+        
+    
+
+    
+        
+        
+        
+        
+            
+            
+        
+        
+    
+    
+    
+        
+        
+    
+        
+    
+        
+        
+        
+        
+            
+            
+            
+        
+    
+
+    
+        
+    
+
+    
+        
+        
+        
+        
+        
+            
+            
+            
+        
+    
+
+    
+        
+        
+    
+
+    
+
+    
+
+    
+
+
+
diff --git a/Semester 3/Assignments/MP2FX_Stelly/nbproject/project.properties b/Semester 3/Assignments/MP2FX_Stelly/nbproject/project.properties
new file mode 100644
index 0000000..88b2217
--- /dev/null
+++ b/Semester 3/Assignments/MP2FX_Stelly/nbproject/project.properties	
@@ -0,0 +1,134 @@
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=false
+annotation.processing.processors.list=
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+application.title=MP2FX_Stelly
+application.vendor=asdv
+auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml
+build.classes.dir=${build.dir}/classes
+build.classes.excludes=**/*.java,**/*.form
+# This directory is removed when the project is cleaned:
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+# Only compile against the classpath explicitly listed here:
+build.sysclasspath=ignore
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+compile.on.save=true
+compile.on.save.unsupported.javafx=true
+# Uncomment to specify the preferred debugger connection transport:
+#debug.transport=dt_socket
+debug.classpath=\
+    ${run.classpath}
+debug.modulepath=\
+    ${run.modulepath}
+debug.test.classpath=\
+    ${run.test.classpath}
+debug.test.modulepath=\
+    ${run.test.modulepath}
+# This directory is removed when the project is cleaned:
+dist.dir=dist
+dist.jar=${dist.dir}/MP2FX_Stelly.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+endorsed.classpath=
+excludes=
+includes=**
+# Non-JavaFX jar file creation is deactivated in JavaFX 2.0+ projects
+jar.archive.disabled=true
+jar.compress=false
+javac.classpath=
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.deprecation=false
+javac.external.vm=false
+javac.modulepath=
+javac.processormodulepath=
+javac.processorpath=\
+    ${javac.classpath}
+javac.source=1.8
+javac.target=1.8
+javac.test.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+javac.test.modulepath=\
+    ${javac.modulepath}
+javac.test.processorpath=\
+    ${javac.test.classpath}
+javadoc.additionalparam=
+javadoc.author=false
+javadoc.encoding=${source.encoding}
+javadoc.html5=false
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.private=false
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=
+javafx.application.implementation.version=1.0
+javafx.binarycss=false
+javafx.deploy.adddesktopshortcut=false
+javafx.deploy.addstartmenushortcut=false
+javafx.deploy.allowoffline=true
+# If true, application update mode is set to 'background', if false, update mode is set to 'eager'
+javafx.deploy.backgroundupdate=false
+javafx.deploy.disable.proxy=false
+javafx.deploy.embedJNLP=true
+javafx.deploy.includeDT=true
+javafx.deploy.installpermanently=false
+javafx.deploy.permissionselevated=false
+# Set true to prevent creation of temporary copy of deployment artifacts before each run (disables concurrent runs)
+javafx.disable.concurrent.runs=false
+# Set true to enable multiple concurrent runs of the same WebStart or Run-in-Browser project
+javafx.enable.concurrent.external.runs=false
+# This is a JavaFX project
+javafx.enabled=true
+javafx.fallback.class=com.javafx.main.NoJavaFXFallback
+# Main class for JavaFX
+javafx.main.class=anim.Tennis
+javafx.preloader.class=
+# This project does not use Preloader
+javafx.preloader.enabled=false
+javafx.preloader.jar.filename=
+javafx.preloader.jar.path=
+javafx.preloader.project.path=
+javafx.preloader.type=none
+# Set true for GlassFish only. Rebases manifest classpaths of JARs in lib dir. Not usable with signed JARs.
+javafx.rebase.libs=false
+javafx.run.height=600
+javafx.run.width=800
+javafx.signing.blob=false
+javafx.signing.enabled=false
+javafx.signing.type=notsigned
+jlink.launcher=false
+jlink.launcher.name=MP2FX_Stelly
+# Pre-JavaFX 2.0 WebStart is deactivated in JavaFX 2.0+ projects
+jnlp.enabled=false
+# Main class for Java launcher
+main.class=com.javafx.main.Main
+# For improved security specify narrower Codebase manifest attribute to prevent RIAs from being repurposed
+manifest.custom.codebase=*
+# Specify Permissions manifest attribute to override default (choices: sandbox, all-permissions)
+manifest.custom.permissions=
+manifest.file=manifest.mf
+meta.inf.dir=${src.dir}/META-INF
+mkdist.disabled=false
+native.bundling.enabled=false
+no.dependencies=true
+platform.active=default_platform
+run.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+run.modulepath=\
+    ${javac.modulepath}
+run.test.classpath=\
+    ${javac.test.classpath}:\
+    ${build.test.classes.dir}
+run.test.modulepath=\
+    ${javac.test.modulepath}
+source.encoding=UTF-8
+src.dir=src
+test.src.dir=test
diff --git a/Semester 3/Assignments/MP2FX_Stelly/nbproject/project.xml b/Semester 3/Assignments/MP2FX_Stelly/nbproject/project.xml
new file mode 100644
index 0000000..10e0377
--- /dev/null
+++ b/Semester 3/Assignments/MP2FX_Stelly/nbproject/project.xml	
@@ -0,0 +1,28 @@
+
+
+    org.netbeans.modules.java.j2seproject
+    
+        
+            
+                
+                
+                
+                
+                
+                
+            
+        
+        
+            MP2FX_Stelly
+            
+                
+            
+            
+                
+            
+        
+        
+            C:\Users\ethan\Documents\NetBeansProjects\JavaLibraryASDV\nblibraries.properties
+        
+    
+
diff --git a/Semester 3/Assignments/MP2FX_Stelly/src/anim/BouncingBall.java b/Semester 3/Assignments/MP2FX_Stelly/src/anim/BouncingBall.java
new file mode 100644
index 0000000..e8bcfad
--- /dev/null
+++ b/Semester 3/Assignments/MP2FX_Stelly/src/anim/BouncingBall.java	
@@ -0,0 +1,160 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package anim;
+
+import javafx.animation.KeyFrame;
+import javafx.animation.Timeline;
+import javafx.beans.property.DoubleProperty;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.scene.control.Label;
+import javafx.scene.layout.GridPane;
+import javafx.scene.layout.Pane;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Circle;
+import javafx.scene.shape.Rectangle;
+import javafx.util.Duration;
+
+/**
+ *
+ * @author asdv
+ */
+public class BouncingBall extends Pane
+{
+
+    public int pScore = 0;
+    public int cScore = 0;
+    GridPane textDisplay = new GridPane();
+    Rectangle racket = new Rectangle();
+
+    public final double radius = 10;                // ball size 40
+    private double x = radius, y = radius;          // coordinates of ball
+    private double dx = 1, dy = 1;                  // direction of the ball
+    private Circle circle = new Circle(x, y, radius); // her majesty, the ball
+    private Timeline animation;                     // animate the ball
+    private Label playerScore = new Label("Your Score: 0");
+    private Label compScore = new Label("Computer Score: 0");
+
+    public BouncingBall()
+    {
+        racket.setWidth(70);
+        racket.setHeight(20);
+        racket.relocate(0, 580);
+        textDisplay.add(playerScore, 0, 0);
+        textDisplay.add(compScore, 0, 1);
+
+        circle.setFill(Color.BROWN);
+        getChildren().addAll(circle, racket, textDisplay);
+
+        animation = new Timeline(
+                new KeyFrame(Duration.millis(50), (ActionEvent event)
+                        ->
+                {
+                    moveBall();
+                    if (y >= (getHeight() - 20))
+                    {
+                        boolean intersected = intersection();
+                        if (intersected && circle.getCenterX() <= racket.getX() / 2)
+                        {
+                            System.out.println("Intersected.");
+                            dx *= -1;
+                            dy *= -1;
+                            playerScored();
+                        } 
+                        else
+                        {
+                            if (intersected && circle.getCenterX() >= racket.getX() / 2)
+                            {
+                                playerScored();
+                                dy *= -1;
+                            } 
+                            else
+                            {
+                                if (y >= (getHeight() - 40))
+                                {
+                                        computerScored();
+                                        dy *= -1;
+                                }
+                            }
+                        }
+                    }
+                }));
+        animation.setCycleCount(Timeline.INDEFINITE);
+        animation.setRate(animation.getRate() * 20);
+        animation.play();
+    }
+
+    private void moveBall()
+    {
+        if (x < radius || x > getWidth() - radius)
+        {
+            dx *= -1;
+        }
+        if (y < radius || y > getHeight() - radius)
+        {
+            dy *= -1;
+        }
+
+        x += dx;
+        y += dy;
+        circle.setCenterX(x);
+        circle.setCenterY(y);
+    }
+
+    public void playerScored()
+    {
+        playerScore.setText("Your Score: " + (++this.pScore));
+    }
+
+    public void computerScored()
+    {
+        compScore.setText("Computer Score: " + (++this.cScore));
+    }
+
+    public boolean intersection()
+    {
+        boolean intersected = racket.getBoundsInParent().intersects(circle.getBoundsInParent());
+
+        if (intersected)
+        {
+            return true;
+        } 
+        else
+        {
+            return false;
+        }
+    }
+
+    public void moveRacket(double x)
+    {
+        racket.relocate(x, 580);
+    }
+
+    public void play()
+    {
+        animation.play();
+    }
+
+    public void pause()
+    {
+        animation.pause();
+    }
+
+    public void increaseSpeed()
+    {
+        animation.setRate(animation.getRate() * 1.5);
+    }
+
+    public void decreaseSpeed()
+    {
+        animation.setRate(animation.getRate() * 1.5 > 0 ? animation.getRate() / 1.5 : 0);
+    }
+
+    public DoubleProperty rateProperty()
+    {
+        return animation.rateProperty();
+    }
+
+}
diff --git a/Semester 3/Assignments/MP2FX_Stelly/src/anim/Tennis.java b/Semester 3/Assignments/MP2FX_Stelly/src/anim/Tennis.java
new file mode 100644
index 0000000..57192d1
--- /dev/null
+++ b/Semester 3/Assignments/MP2FX_Stelly/src/anim/Tennis.java	
@@ -0,0 +1,65 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package anim;
+
+import javafx.application.Application;
+import javafx.event.EventHandler;
+import javafx.scene.Scene;
+import javafx.scene.input.KeyCode;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.shape.Rectangle;
+import javafx.stage.Stage;
+
+/**
+ *
+ * @author asdv
+ */
+public class Tennis extends Application
+{
+
+    @Override
+    public void start(Stage primaryStage) throws Exception 
+    {
+        
+        BouncingBall bouncingBall = new BouncingBall();
+        
+        Scene scene = new Scene(bouncingBall, 800, 600);
+        primaryStage.setTitle("Play Tennis");
+        primaryStage.setScene(scene);
+        primaryStage.show();
+        
+        bouncingBall.requestFocus();
+        bouncingBall.setOnMousePressed((MouseEvent event) -> 
+        {
+            bouncingBall.pause();
+        });
+        bouncingBall.setOnMouseReleased((MouseEvent event) -> 
+        {
+            bouncingBall.play();
+        });
+        bouncingBall.setOnKeyPressed(e ->
+        {
+            if(e.getCode() == KeyCode.UP)
+            {
+                bouncingBall.increaseSpeed();
+            }
+            else if(e.getCode() == KeyCode.DOWN)
+            {
+                bouncingBall.decreaseSpeed();
+            }
+        });
+        bouncingBall.setOnMouseMoved((MouseEvent event) -> 
+        {
+            bouncingBall.moveRacket(event.getSceneX() - bouncingBall.racket.getWidth() / 2);
+        });
+                
+    }
+    
+    public static void main(String[] args) 
+    {
+        launch(args);
+    }
+    
+}
diff --git a/Semester 3/ZIPs/MP2-Chapter4_CalebFontenot.zip b/Semester 3/ZIPs/MP2-Chapter4_CalebFontenot.zip
index 1c2ec32..805753e 100644
Binary files a/Semester 3/ZIPs/MP2-Chapter4_CalebFontenot.zip and b/Semester 3/ZIPs/MP2-Chapter4_CalebFontenot.zip differ