diff --git a/.DS_Store b/.DS_Store
index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..66f9323ed24b4e6bad5b7fb76a50351a33cf92ba 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/README.md b/README.md
index c68d7e326ce662f9fe1d6ca3bc8b1c6e582b91aa..ab61daef4e9a9837ccd18bc4d959bf14d54db885 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,8 @@
-# SWEN20003_a1
\ No newline at end of file
+# SWEN20003 Project 1
+
+Files provided by: The University of Melbourne
+Code written and edited by: Keigo Nagai
+License: MIT
+
+This project file contains specifications for assignment 1 of Object Oriented Software Development (SWEN20003).
+
diff --git a/project-1/.DS_Store b/project-1/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..38d628d67dc3fc9462ede5c54ec619774dff7a66
Binary files /dev/null and b/project-1/.DS_Store differ
diff --git a/project-1/.idea/.gitignore b/project-1/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..26d33521af10bcc7fd8cea344038eaaeb78d0ef5
--- /dev/null
+++ b/project-1/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/project-1/.idea/.name b/project-1/.idea/.name
new file mode 100644
index 0000000000000000000000000000000000000000..e5199ee79ccef033b3d3412968c960ebf7ffe811
--- /dev/null
+++ b/project-1/.idea/.name
@@ -0,0 +1 @@
+bagel
\ No newline at end of file
diff --git a/project-1/.idea/compiler.xml b/project-1/.idea/compiler.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5ed7d1ee1d47a9d2bb314a87f99538d402e982e0
--- /dev/null
+++ b/project-1/.idea/compiler.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <annotationProcessing>
+      <profile name="Maven default annotation processors profile" enabled="true">
+        <sourceOutputDir name="target/generated-sources/annotations" />
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+        <outputRelativeToContentRoot value="true" />
+        <module name="bagel" />
+      </profile>
+    </annotationProcessing>
+    <bytecodeTargetLevel>
+      <module name="bagel" target="14" />
+    </bytecodeTargetLevel>
+  </component>
+</project>
\ No newline at end of file
diff --git a/project-1/.idea/jarRepositories.xml b/project-1/.idea/jarRepositories.xml
new file mode 100644
index 0000000000000000000000000000000000000000..712ab9d985c20018a0c97b93d2148ac1ffe588a5
--- /dev/null
+++ b/project-1/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Central Repository" />
+      <option name="url" value="https://repo.maven.apache.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+  </component>
+</project>
\ No newline at end of file
diff --git a/project-1/.idea/libraries/Maven__io_github_eleanor_em_bagel_1_9_3.xml b/project-1/.idea/libraries/Maven__io_github_eleanor_em_bagel_1_9_3.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8a3817e8e03ccad221cb388d67521c24d3f93203
--- /dev/null
+++ b/project-1/.idea/libraries/Maven__io_github_eleanor_em_bagel_1_9_3.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.github.eleanor-em:bagel:1.9.3">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/io/github/eleanor-em/bagel/1.9.3/bagel-1.9.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/io/github/eleanor-em/bagel/1.9.3/bagel-1.9.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/io/github/eleanor-em/bagel/1.9.3/bagel-1.9.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_3_2_2.xml b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_3_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b41e0a0e6d45226876b26c951f89f0a888668616
--- /dev/null
+++ b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_3_2_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl:3.2.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl/3.2.2/lwjgl-3.2.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl/3.2.2/lwjgl-3.2.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl/3.2.2/lwjgl-3.2.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_assimp_3_2_2.xml b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_assimp_3_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..04a33d893ffa7c2f813e11d6127a98947eb61143
--- /dev/null
+++ b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_assimp_3_2_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-assimp:3.2.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-assimp/3.2.2/lwjgl-assimp-3.2.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-assimp/3.2.2/lwjgl-assimp-3.2.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-assimp/3.2.2/lwjgl-assimp-3.2.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_assimp_natives_windows_3_2_2.xml b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_assimp_natives_windows_3_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..644bf2d454f700b66ef7349f6984b0af7693177e
--- /dev/null
+++ b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_assimp_natives_windows_3_2_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-assimp:natives-windows:3.2.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-assimp/3.2.2/lwjgl-assimp-3.2.2-natives-windows.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-assimp/3.2.2/lwjgl-assimp-3.2.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-assimp/3.2.2/lwjgl-assimp-3.2.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_glfw_3_2_2.xml b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_glfw_3_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..48aa8aa34959abd0874a96c96d6e6f9d65c33c91
--- /dev/null
+++ b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_glfw_3_2_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-glfw:3.2.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-glfw/3.2.2/lwjgl-glfw-3.2.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-glfw/3.2.2/lwjgl-glfw-3.2.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-glfw/3.2.2/lwjgl-glfw-3.2.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_glfw_natives_windows_3_2_2.xml b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_glfw_natives_windows_3_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7d7306ff4ab48b0e0075667f893e239242f91ac4
--- /dev/null
+++ b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_glfw_natives_windows_3_2_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-glfw:natives-windows:3.2.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-glfw/3.2.2/lwjgl-glfw-3.2.2-natives-windows.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-glfw/3.2.2/lwjgl-glfw-3.2.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-glfw/3.2.2/lwjgl-glfw-3.2.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_natives_windows_3_2_2.xml b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_natives_windows_3_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..229a0712502d4fc5d468de8c224c5213975cfc68
--- /dev/null
+++ b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_natives_windows_3_2_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl:natives-windows:3.2.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl/3.2.2/lwjgl-3.2.2-natives-windows.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl/3.2.2/lwjgl-3.2.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl/3.2.2/lwjgl-3.2.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_openal_3_2_2.xml b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_openal_3_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..094321fdec8e071749a25633e9045b2367b2860f
--- /dev/null
+++ b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_openal_3_2_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-openal:3.2.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-openal/3.2.2/lwjgl-openal-3.2.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-openal/3.2.2/lwjgl-openal-3.2.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-openal/3.2.2/lwjgl-openal-3.2.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_openal_natives_windows_3_2_2.xml b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_openal_natives_windows_3_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..202908194b24c93d8333d348203f6a33c983006d
--- /dev/null
+++ b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_openal_natives_windows_3_2_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-openal:natives-windows:3.2.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-openal/3.2.2/lwjgl-openal-3.2.2-natives-windows.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-openal/3.2.2/lwjgl-openal-3.2.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-openal/3.2.2/lwjgl-openal-3.2.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_opengl_3_2_2.xml b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_opengl_3_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..24121c2ac5c3e85eac2364a7a2245a6fa9ca70cd
--- /dev/null
+++ b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_opengl_3_2_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-opengl:3.2.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-opengl/3.2.2/lwjgl-opengl-3.2.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-opengl/3.2.2/lwjgl-opengl-3.2.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-opengl/3.2.2/lwjgl-opengl-3.2.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_opengl_natives_windows_3_2_2.xml b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_opengl_natives_windows_3_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a1a2789a62becc1d45d8ceb0df06d8789479ac42
--- /dev/null
+++ b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_opengl_natives_windows_3_2_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-opengl:natives-windows:3.2.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-opengl/3.2.2/lwjgl-opengl-3.2.2-natives-windows.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-opengl/3.2.2/lwjgl-opengl-3.2.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-opengl/3.2.2/lwjgl-opengl-3.2.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_stb_3_2_2.xml b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_stb_3_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8155b1d9f1cafbdb9f1f61bfe47964a335361c48
--- /dev/null
+++ b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_stb_3_2_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-stb:3.2.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-stb/3.2.2/lwjgl-stb-3.2.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-stb/3.2.2/lwjgl-stb-3.2.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-stb/3.2.2/lwjgl-stb-3.2.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_stb_natives_windows_3_2_2.xml b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_stb_natives_windows_3_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4f8ca03319306ceaea6095f71256272b496faaf8
--- /dev/null
+++ b/project-1/.idea/libraries/Maven__org_lwjgl_lwjgl_stb_natives_windows_3_2_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-stb:natives-windows:3.2.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-stb/3.2.2/lwjgl-stb-3.2.2-natives-windows.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-stb/3.2.2/lwjgl-stb-3.2.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-stb/3.2.2/lwjgl-stb-3.2.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/project-1/.idea/misc.xml b/project-1/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c0572aa051d2673266994b9b207ed32cfbc44f9d
--- /dev/null
+++ b/project-1/.idea/misc.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="MavenProjectsManager">
+    <option name="originalFiles">
+      <list>
+        <option value="$PROJECT_DIR$/pom.xml" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_14" project-jdk-name="14" project-jdk-type="JavaSDK" />
+</project>
\ No newline at end of file
diff --git a/project-1/.idea/modules.xml b/project-1/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d4754eaf30e6aef9fd18e15d5f94dcd7b30f5d25
--- /dev/null
+++ b/project-1/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/bagel.iml" filepath="$PROJECT_DIR$/bagel.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/project-1/.idea/uiDesigner.xml b/project-1/.idea/uiDesigner.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b93ac08bcd0212375c3de0db5157d536abc599e9
--- /dev/null
+++ b/project-1/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>
\ No newline at end of file
diff --git a/project-1/.idea/vcs.xml b/project-1/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..17a8b82328b47169a22e7fc2e2467155a2ce3735
--- /dev/null
+++ b/project-1/.idea/vcs.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/../../../../.." vcs="Git" />
+    <mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/project-1/bagel.iml b/project-1/bagel.iml
new file mode 100644
index 0000000000000000000000000000000000000000..5528a8c1e3d3839305551618bb67906e16d64071
--- /dev/null
+++ b/project-1/bagel.iml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_14">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: io.github.eleanor-em:bagel:1.9.3" level="project" />
+    <orderEntry type="library" name="Maven: org.lwjgl:lwjgl:3.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.lwjgl:lwjgl-assimp:3.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.lwjgl:lwjgl-glfw:3.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.lwjgl:lwjgl-openal:3.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.lwjgl:lwjgl-opengl:3.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.lwjgl:lwjgl-stb:3.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.lwjgl:lwjgl:natives-windows:3.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.lwjgl:lwjgl-assimp:natives-windows:3.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.lwjgl:lwjgl-glfw:natives-windows:3.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.lwjgl:lwjgl-openal:natives-windows:3.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.lwjgl:lwjgl-opengl:natives-windows:3.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.lwjgl:lwjgl-stb:natives-windows:3.2.2" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/project-1/pom.xml b/project-1/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c51fbeb6edb5f5974c1fb74356f6ef57a90b4965
--- /dev/null
+++ b/project-1/pom.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>au.edu.unimelb.cis</groupId>
+    <artifactId>bagel</artifactId>
+    <version>0.1-SNAPSHOT</version>
+    <packaging>jar</packaging>
+
+    <build>
+        <sourceDirectory>src/</sourceDirectory>
+        <plugins>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>14</source>
+                    <target>14</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <properties>
+        <maven.compiler.source>14</maven.compiler.source>
+        <maven.compiler.target>14</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>io.github.eleanor-em</groupId>
+            <artifactId>bagel</artifactId>
+            <version>1.9.3</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/project-1/res/.DS_Store b/project-1/res/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..aff6d284e04b03c88163e0ae210953338ef5186a
Binary files /dev/null and b/project-1/res/.DS_Store differ
diff --git a/project-1/res/IO/environment.csv b/project-1/res/IO/environment.csv
new file mode 100644
index 0000000000000000000000000000000000000000..34433464a67b782b64b56ef3d04904a00c63c7ab
--- /dev/null
+++ b/project-1/res/IO/environment.csv
@@ -0,0 +1,3 @@
+Player,650,100,2
+Zombie,300,200
+Sandwich,500,400
\ No newline at end of file
diff --git a/project-1/res/font/DejaVuSans-Bold.ttf b/project-1/res/font/DejaVuSans-Bold.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..c0d8e5e462df7f268efba09f6931e37daad151e1
Binary files /dev/null and b/project-1/res/font/DejaVuSans-Bold.ttf differ
diff --git a/project-1/res/images/background.png b/project-1/res/images/background.png
new file mode 100644
index 0000000000000000000000000000000000000000..a6601996a24eebf1b568ad8e05d2e137a030b52e
Binary files /dev/null and b/project-1/res/images/background.png differ
diff --git a/project-1/res/images/player.png b/project-1/res/images/player.png
new file mode 100644
index 0000000000000000000000000000000000000000..103a2ff1c64ccd5bf18b9ef8b2ca444dbdf204d1
Binary files /dev/null and b/project-1/res/images/player.png differ
diff --git a/project-1/res/images/sandwich.png b/project-1/res/images/sandwich.png
new file mode 100644
index 0000000000000000000000000000000000000000..87e12ec3db6704914262fd359822407fb9ecd172
Binary files /dev/null and b/project-1/res/images/sandwich.png differ
diff --git a/project-1/res/images/zombie.png b/project-1/res/images/zombie.png
new file mode 100644
index 0000000000000000000000000000000000000000..41519c41828d76f5cdfbd9493025d3867347d926
Binary files /dev/null and b/project-1/res/images/zombie.png differ
diff --git a/project-1/src/.DS_Store b/project-1/src/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..2898de1f846184fb61d1d0d9146f6083a5bfdb0b
Binary files /dev/null and b/project-1/src/.DS_Store differ
diff --git a/project-1/src/ShadowTreasure.java b/project-1/src/ShadowTreasure.java
new file mode 100644
index 0000000000000000000000000000000000000000..f9c1058a0a5a1a7fc8d5398d931b6ba23b690d34
--- /dev/null
+++ b/project-1/src/ShadowTreasure.java
@@ -0,0 +1,49 @@
+import bagel.*;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.text.DecimalFormat;
+
+
+/**
+ * An example Bagel game.
+ */
+public class ShadowTreasure extends AbstractGame {
+
+    // for rounding double number; use this to print the location of the player
+    private static DecimalFormat df = new DecimalFormat("0.00");
+
+    public static void printInfo(double x, double y, int e) {
+        System.out.println(df.format(x) + "," + df.format(y) + "," + e);
+    }
+    
+    public ShadowTreasure() throws IOException {
+        this.loadEnvironment("res/IO/environment.csv");
+        // Add code to initialize other attributes as needed
+    }
+
+    /**
+     * Load from input file
+     */
+    private void loadEnvironment(String filename){
+        // Code here to read from the file and set up the environment
+    }
+
+    /**
+     * Performs a state update.
+     */
+    @Override
+    public void update(Input input) {
+        // Logic to update the game, as per specification must go here
+    }
+
+
+    /**
+     * The entry point for the program.
+     */
+    public static void main(String[] args) throws IOException {
+        ShadowTreasure game = new ShadowTreasure();
+        game.run();
+    }
+}
diff --git a/project-1/target/maven-archiver/pom.properties b/project-1/target/maven-archiver/pom.properties
new file mode 100644
index 0000000000000000000000000000000000000000..f50533bad05a26dbc0891a8c413e57c7bfd9d17d
--- /dev/null
+++ b/project-1/target/maven-archiver/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Thu Mar 18 12:46:42 AEDT 2021
+groupId=au.edu.unimelb.cis
+artifactId=bagel
+version=0.1-SNAPSHOT
diff --git a/project-1/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/project-1/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000000000000000000000000000000000000..253ae07e82b3e0fff072cc239eba9ee9d4c51140
--- /dev/null
+++ b/project-1/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,5 @@
+ShadowTreasure.class
+Zombie.class
+Sandwich.class
+Record.class
+Player.class
diff --git a/project-1/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/project-1/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000000000000000000000000000000000000..cde17032e59ef7d58ce0e5e35b62db883326bf25
--- /dev/null
+++ b/project-1/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,5 @@
+/Users/nid1/Desktop/ShadowTreasure/project1/src/Zombie.java
+/Users/nid1/Desktop/ShadowTreasure/project1/src/Sandwich.java
+/Users/nid1/Desktop/ShadowTreasure/project1/src/Record.java
+/Users/nid1/Desktop/ShadowTreasure/project1/src/ShadowTreasure.java
+/Users/nid1/Desktop/ShadowTreasure/project1/src/Player.java
diff --git a/project-1/test/.DS_Store b/project-1/test/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..bc5cd1f4e93b98585802e729226ae928f2d68e4b
Binary files /dev/null and b/project-1/test/.DS_Store differ
diff --git a/project-1/test/test1/environment.csv b/project-1/test/test1/environment.csv
new file mode 100644
index 0000000000000000000000000000000000000000..34433464a67b782b64b56ef3d04904a00c63c7ab
--- /dev/null
+++ b/project-1/test/test1/environment.csv
@@ -0,0 +1,3 @@
+Player,650,100,2
+Zombie,300,200
+Sandwich,500,400
\ No newline at end of file
diff --git a/project-1/test/test1/output.csv b/project-1/test/test1/output.csv
new file mode 100644
index 0000000000000000000000000000000000000000..062873bc791d58c919a322121d89fc5ec59203aa
--- /dev/null
+++ b/project-1/test/test1/output.csv
@@ -0,0 +1,54 @@
+650.00,100.00,2
+645.53,108.94,2
+641.06,117.89,2
+636.58,126.83,2
+632.11,135.78,2
+627.64,144.72,2
+623.17,153.67,2
+618.70,162.61,2
+614.22,171.55,2
+609.75,180.50,2
+605.28,189.44,2
+600.81,198.39,2
+596.33,207.33,2
+591.86,216.28,2
+587.39,225.22,2
+582.92,234.16,2
+578.45,243.11,2
+573.97,252.05,2
+569.50,261.00,2
+565.03,269.94,2
+560.56,278.89,2
+556.09,287.83,2
+551.61,296.77,2
+547.14,305.72,2
+542.67,314.66,2
+538.20,323.61,2
+533.72,332.55,2
+529.25,341.50,2
+524.78,350.44,2
+520.31,359.38,2
+512.21,353.52,7
+504.10,347.66,7
+496.00,341.80,7
+487.90,335.94,7
+479.80,330.08,7
+471.70,324.21,7
+463.59,318.35,7
+455.49,312.49,7
+447.39,306.63,7
+439.29,300.77,7
+431.19,294.91,7
+423.08,289.05,7
+414.98,283.18,7
+406.88,277.32,7
+398.78,271.46,7
+390.68,265.60,7
+382.57,259.74,7
+374.47,253.88,7
+366.37,248.02,7
+358.27,242.15,7
+350.17,236.29,7
+342.06,230.43,7
+333.96,224.57,7
+325.86,218.71,4
diff --git a/project-1/test/test2/environment.csv b/project-1/test/test2/environment.csv
new file mode 100644
index 0000000000000000000000000000000000000000..52b5d638b191e77b95ccbbf9c9e6d430333dd896
--- /dev/null
+++ b/project-1/test/test2/environment.csv
@@ -0,0 +1,3 @@
+Player,650,100,3
+Zombie,500,500
+Sandwich,300,200
\ No newline at end of file
diff --git a/project-1/test/test2/output.csv b/project-1/test/test2/output.csv
new file mode 100644
index 0000000000000000000000000000000000000000..8fd27742b73803f50848852a0f79ad6d03929230
--- /dev/null
+++ b/project-1/test/test2/output.csv
@@ -0,0 +1,40 @@
+650.00,100.00,3
+646.49,109.36,3
+642.98,118.73,3
+639.47,128.09,3
+635.96,137.45,3
+632.44,146.82,3
+628.93,156.18,3
+625.42,165.54,3
+621.91,174.91,3
+618.40,184.27,3
+614.89,193.63,3
+611.38,203.00,3
+607.87,212.36,3
+604.35,221.72,3
+600.84,231.09,3
+597.33,240.45,3
+593.82,249.81,3
+590.31,259.18,3
+586.80,268.54,3
+583.29,277.90,3
+579.78,287.27,3
+576.26,296.63,3
+572.75,305.99,3
+569.24,315.36,3
+565.73,324.72,3
+562.22,334.08,3
+558.71,343.45,3
+555.20,352.81,3
+551.69,362.17,3
+548.17,371.54,3
+544.66,380.90,3
+541.15,390.26,3
+537.64,399.63,3
+534.13,408.99,3
+530.62,418.35,3
+527.11,427.72,3
+523.60,437.08,3
+520.08,446.44,3
+516.57,455.81,3
+510.11,448.17,0