diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de4500eadcaf3bb433df92ed62169618ffad3b0e
--- /dev/null
+++ b/.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="jiaxi3-project-1" />
+      </profile>
+    </annotationProcessing>
+    <bytecodeTargetLevel>
+      <module name="jiaxi3-project-1" target="11" />
+    </bytecodeTargetLevel>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000000000000000000000000000000000000..712ab9d985c20018a0c97b93d2148ac1ffe588a5
--- /dev/null
+++ b/.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/.idea/libraries/Maven__io_github_eleanor_em_bagel_1_9_3.xml b/.idea/libraries/Maven__io_github_eleanor_em_bagel_1_9_3.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8a3817e8e03ccad221cb388d67521c24d3f93203
--- /dev/null
+++ b/.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/.idea/libraries/Maven__org_lwjgl_lwjgl_3_3_1.xml b/.idea/libraries/Maven__org_lwjgl_lwjgl_3_3_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e98564b365d8486ca9d54a81d4a858f21e33c3c8
--- /dev/null
+++ b/.idea/libraries/Maven__org_lwjgl_lwjgl_3_3_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl:3.3.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_lwjgl_lwjgl_assimp_3_3_1.xml b/.idea/libraries/Maven__org_lwjgl_lwjgl_assimp_3_3_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6f6e6029938d74ab77da10664741dbc65ed63e33
--- /dev/null
+++ b/.idea/libraries/Maven__org_lwjgl_lwjgl_assimp_3_3_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-assimp:3.3.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-assimp/3.3.1/lwjgl-assimp-3.3.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-assimp/3.3.1/lwjgl-assimp-3.3.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-assimp/3.3.1/lwjgl-assimp-3.3.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_lwjgl_lwjgl_assimp_natives_windows_3_3_1.xml b/.idea/libraries/Maven__org_lwjgl_lwjgl_assimp_natives_windows_3_3_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c833f3b48c412f941f7610bfcb8c81efa503344f
--- /dev/null
+++ b/.idea/libraries/Maven__org_lwjgl_lwjgl_assimp_natives_windows_3_3_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-assimp:natives-windows:3.3.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-assimp/3.3.1/lwjgl-assimp-3.3.1-natives-windows.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-assimp/3.3.1/lwjgl-assimp-3.3.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-assimp/3.3.1/lwjgl-assimp-3.3.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_lwjgl_lwjgl_glfw_3_3_1.xml b/.idea/libraries/Maven__org_lwjgl_lwjgl_glfw_3_3_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..575ef41acb75020f769bf7f85b0316ce0473a00d
--- /dev/null
+++ b/.idea/libraries/Maven__org_lwjgl_lwjgl_glfw_3_3_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-glfw:3.3.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_lwjgl_lwjgl_glfw_natives_windows_3_3_1.xml b/.idea/libraries/Maven__org_lwjgl_lwjgl_glfw_natives_windows_3_3_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..53723e077a20b294e423abdf24bc077524f09298
--- /dev/null
+++ b/.idea/libraries/Maven__org_lwjgl_lwjgl_glfw_natives_windows_3_3_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-glfw:natives-windows:3.3.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1-natives-windows.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_lwjgl_lwjgl_natives_windows_3_3_1.xml b/.idea/libraries/Maven__org_lwjgl_lwjgl_natives_windows_3_3_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fd3d30064c2c8802ac60bb9b8f7ed0fa48eaed9e
--- /dev/null
+++ b/.idea/libraries/Maven__org_lwjgl_lwjgl_natives_windows_3_3_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl:natives-windows:3.3.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1-natives-windows.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_lwjgl_lwjgl_openal_3_3_1.xml b/.idea/libraries/Maven__org_lwjgl_lwjgl_openal_3_3_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3898dc0192f2d6b09f5cc8e3927418f88689ee41
--- /dev/null
+++ b/.idea/libraries/Maven__org_lwjgl_lwjgl_openal_3_3_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-openal:3.3.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_lwjgl_lwjgl_openal_natives_windows_3_3_1.xml b/.idea/libraries/Maven__org_lwjgl_lwjgl_openal_natives_windows_3_3_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8ce280d599df008d3248a447e9b0ab95ed362d08
--- /dev/null
+++ b/.idea/libraries/Maven__org_lwjgl_lwjgl_openal_natives_windows_3_3_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-openal:natives-windows:3.3.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1-natives-windows.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_lwjgl_lwjgl_opengl_3_3_1.xml b/.idea/libraries/Maven__org_lwjgl_lwjgl_opengl_3_3_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2b4c9d9706511f001f887f9b073702ec9a011822
--- /dev/null
+++ b/.idea/libraries/Maven__org_lwjgl_lwjgl_opengl_3_3_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-opengl:3.3.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_lwjgl_lwjgl_opengl_natives_windows_3_3_1.xml b/.idea/libraries/Maven__org_lwjgl_lwjgl_opengl_natives_windows_3_3_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..efacd01b4f5f5b25f3981a14a67f3084563eab49
--- /dev/null
+++ b/.idea/libraries/Maven__org_lwjgl_lwjgl_opengl_natives_windows_3_3_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-opengl:natives-windows:3.3.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1-natives-windows.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_lwjgl_lwjgl_stb_3_3_1.xml b/.idea/libraries/Maven__org_lwjgl_lwjgl_stb_3_3_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28e05c466568d219fdf600eb2af4d54ba77a1076
--- /dev/null
+++ b/.idea/libraries/Maven__org_lwjgl_lwjgl_stb_3_3_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-stb:3.3.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_lwjgl_lwjgl_stb_natives_windows_3_3_1.xml b/.idea/libraries/Maven__org_lwjgl_lwjgl_stb_natives_windows_3_3_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..41b68da764c01af5061b4f54a42042981f65bd05
--- /dev/null
+++ b/.idea/libraries/Maven__org_lwjgl_lwjgl_stb_natives_windows_3_3_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.lwjgl:lwjgl-stb:natives-windows:3.3.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1-natives-windows.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/src/ShadowDimension.java b/src/ShadowDimension.java
index b781d1866f5291ca67b64718b168f91ef43d787e..957bc311a967938e5a16cf02743615ce15435bd2 100644
--- a/src/ShadowDimension.java
+++ b/src/ShadowDimension.java
@@ -1,19 +1,32 @@
 import bagel.*;
+import bagel.util.Colour;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 
 /**
  * Skeleton Code for SWEN20003 Project 1, Semester 2, 2022
- *
+ * <p>
  * Please enter your name below
+ *
  * @author
  */
 
+
 public class ShadowDimension extends AbstractGame {
     private final static int WINDOW_WIDTH = 1024;
     private final static int WINDOW_HEIGHT = 768;
     private final static String GAME_TITLE = "SHADOW DIMENSION";
     private final Image BACKGROUND_IMAGE = new Image("res/background0.png");
+    private final Font title = new Font("res/frostbite.ttf", 75);
+    private final Font hint = new Font("res/frostbite.ttf", 40);
 
-    public ShadowDimension(){
+    private static int game_state = 0;
+
+    Player player = new Player();
+
+    public ShadowDimension() {
         super(WINDOW_WIDTH, WINDOW_HEIGHT, GAME_TITLE);
     }
 
@@ -29,8 +42,30 @@ public class ShadowDimension extends AbstractGame {
      * Method used to read file and create objects (You can change this
      * method as you wish).
      */
-    private void readCSV(){
+    private void readCSV() {
+        String str = null;
+        String[] csv;
+        try {
+            /*Read CSV file*/
+            str = new String(Files.readAllBytes(Paths.get("res/level0.csv")));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+
+        /*Split csv text by \r\n or \n, get all line.*/
+        csv = str.split("\r\n|\n");
 
+        /*For all line*/
+        for (int i = 0; i < csv.length; i++) {
+            /*Split by ',' , get data.*/
+            String[] line = csv[i].split(",");
+            if (line[0].equals("Player")) {
+                /*Set player pos*/
+                player.X = Integer.parseInt(line[1]);
+                player.Y = Integer.parseInt(line[2]);
+            }
+            //System.out.println(csv[i]);
+        }
     }
 
     /**
@@ -39,9 +74,45 @@ public class ShadowDimension extends AbstractGame {
      */
     @Override
     protected void update(Input input) {
-        BACKGROUND_IMAGE.draw(Window.getWidth()/2.0, Window.getHeight()/2.0);
+        /*State for game
+         * 0:Init and show welcom page
+         * 1:Show Play page*/
+        switch (game_state) {
+            case 0: {
+                /*Draw Text*/
+                Drawing.drawRectangle(0, 0, 1024, 768, new Colour(103.0 / 256, 153.0 / 256, 231.0 / 256));
+                title.drawString("SHADOW DIMENSION", 260, 250);
+                hint.drawString("PRESS SPACE TO START\nUSE ARROW KEYS TO FIND GATE",
+                        (Window.getWidth() - hint.getWidth("USE ARROW KEYS TO FIND GATE") + 90) / 2,
+                        (Window.getHeight() - 80 + 190) / 2);
+
+                /*Wait for space key*/
+                if (input.wasPressed(Keys.SPACE)) {
+                    /*Change game state to 1(play page)*/
+                    game_state = 1;
+                    /*Read csv file and get info of player & wall & hole & world size*/
+                    readCSV();
+                }
+                break;
+            }
+
+            case 1: {
+                /*Show world image*/
+                BACKGROUND_IMAGE.draw(Window.getWidth() / 2.0, Window.getHeight() / 2.0);
+
+                /*Show player image*/
+                player.Update();
+                break;
+            }
+
+            default: {
+
+                break;
+            }
+        }
+
 
-        if (input.wasPressed(Keys.ESCAPE)){
+        if (input.wasPressed(Keys.ESCAPE)) {
             Window.close();
         }