From ee4da0a718a03685426a51e33a2366030770e148 Mon Sep 17 00:00:00 2001
From: zlatax <64391879+zlatax@users.noreply.github.com>
Date: Sat, 3 Apr 2021 20:42:08 +0900
Subject: [PATCH] loadEnvironment fixed, update conditions working perfectly

---
 project-1/src/APoint.java         |  5 ++
 project-1/src/Entity.java         |  8 +++
 project-1/src/Player.java         | 10 ----
 project-1/src/Point.java          | 37 ------------
 project-1/src/ShadowTreasure.java | 99 +++++++++++++++++++++----------
 5 files changed, 81 insertions(+), 78 deletions(-)
 delete mode 100644 project-1/src/Point.java

diff --git a/project-1/src/APoint.java b/project-1/src/APoint.java
index f2b4146..7003065 100644
--- a/project-1/src/APoint.java
+++ b/project-1/src/APoint.java
@@ -34,4 +34,9 @@ public class APoint {
 
         return new APoint(xd,yd);
     }
+
+    @Override
+    public String toString() {
+        return "X: "+this.x+"\tY: "+this.y;
+    }
 }
diff --git a/project-1/src/Entity.java b/project-1/src/Entity.java
index a1d92a7..540f81b 100644
--- a/project-1/src/Entity.java
+++ b/project-1/src/Entity.java
@@ -12,6 +12,10 @@ public class Entity {
         this.pos = pos;
     }
 
+    public Image getImg() {
+        return img;
+    }
+
     public APoint getPos() {
         return pos;
     }
@@ -19,4 +23,8 @@ public class Entity {
     public void setPos(APoint pos) {
         this.pos = pos;
     }
+
+//    @Override
+//    public String toString() {
+//    }
 }
diff --git a/project-1/src/Player.java b/project-1/src/Player.java
index 3df6e68..c8e2d37 100644
--- a/project-1/src/Player.java
+++ b/project-1/src/Player.java
@@ -1,8 +1,6 @@
 import bagel.*;
 
 public class Player extends Entity{
-    private Image image;
-    private APoint pos;
     private int energy;  //displayed at position (20,760) in black font size 20 and font DejaVuSans-Bol(ttf file provided in res zip file)
     private static int stepsize = 10;
 
@@ -11,14 +9,6 @@ public class Player extends Entity{
         this.energy = energy;
     }
 
-    public Image getImage() {
-        return image;
-    }
-
-    public APoint getPos() {
-        return pos;
-    }
-
     public int getEnergy() {
         return energy;
     }
diff --git a/project-1/src/Point.java b/project-1/src/Point.java
deleted file mode 100644
index 47984c1..0000000
--- a/project-1/src/Point.java
+++ /dev/null
@@ -1,37 +0,0 @@
-import java.lang.Math;
-
-public class Point{
-    private double x,y;
-
-    public Point(double x, double y) {
-        this.x = x;
-        this.y = y;
-    }
-
-    public double getX() {
-        return x;
-    }
-
-    public void setX(double x) {
-        this.x = x;
-    }
-
-    public double getY() {
-        return y;
-    }
-
-    public void setY(double y) {
-        this.y = y;
-    }
-    
-    public double distanceTo(Point other) {
-        return Math.sqrt(Math.pow(this.x - other.getX(),2) + Math.pow((this.y - other.getY()) ,2));
-    }
-
-    public Point getDirection (Point other) {
-        double xd = (other.x-this.x)/distanceTo(other);
-        double yd = (other.y-this.getY())/distanceTo(other);
-
-        return new Point(xd,yd);
-    }
-}
diff --git a/project-1/src/ShadowTreasure.java b/project-1/src/ShadowTreasure.java
index 0b4b9e3..c2c9b90 100644
--- a/project-1/src/ShadowTreasure.java
+++ b/project-1/src/ShadowTreasure.java
@@ -1,17 +1,19 @@
 import bagel.*;
 
+import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.text.DecimalFormat;
 import java.util.Scanner;
-import java.lang.*;
-import java.io.File;
+
 
 /**
  * An example Bagel game.
  */
 public class ShadowTreasure extends AbstractGame {
 
+    public static final String UTF8_BOM = "\uFEFF";
+
     // for rounding double number; use this to print the location of the player
     private static DecimalFormat df = new DecimalFormat("0.00");
 
@@ -27,8 +29,8 @@ public class ShadowTreasure extends AbstractGame {
     }
     
     public ShadowTreasure() throws IOException {
-        super(1000, 800, "ShadowTreasure");
-        this.loadEnvironment("res/IO/environment.csv");
+        super(1024, 768, "ShadowTreasure");
+        this.loadEnvironment("test/test1/environment.csv"); // encoding includes 65279 char which fucks up the scanning part.
         // Add code to initialize other attributes as needed
         bg = new Image("res/images/background.png");
     }
@@ -39,43 +41,54 @@ public class ShadowTreasure extends AbstractGame {
     private void loadEnvironment(String filename){
         // Code here to read from the file and set up the environment
         try {
-            Scanner scanner = new Scanner(new File(filename));
+            Scanner scanner = new Scanner(new File(filename), "utf-8");
             double xcoor, ycoor;
-            int level;
+            int level, counter=0;
             while (scanner.hasNextLine()) {
-                Scanner linescan  = new Scanner(scanner.nextLine());
+                String line = scanner.nextLine();
+                if(counter==0 & line.startsWith(UTF8_BOM)) {
+                    line = line.substring(1); //remove BOM char
+                    counter++;
+                }
+                Scanner linescan  = new Scanner(line);
                 linescan.useDelimiter(",");
                 String item = linescan.next();
-                System.out.println("Next item: ("+item+")");
+
 
                 switch (item.toLowerCase()) {
                     case "player":
                         xcoor = Double.parseDouble(linescan.next());
                         ycoor = Double.parseDouble(linescan.next());
                         level = Integer.parseInt(linescan.next());
-                        System.out.println("Player: ("+xcoor+","+ycoor+"), "+level);
+//                        System.out.println("Player: ("+xcoor+","+ycoor+"), "+level);
                         player = new Player("res/images/player.png", new APoint(xcoor, ycoor), level);
                         break;
                     case "zombie":
                         xcoor = Double.parseDouble(linescan.next());
                         ycoor = Double.parseDouble(linescan.next());
-                        System.out.println("Zombie: ("+xcoor+","+ycoor+")");
+//                        System.out.println("Zombie: ("+xcoor+","+ycoor+")");
                         zombie = new Zombie("res/Images/Zombie.png", new APoint(xcoor, ycoor));
                         break;
-                    case "zandwich":
+                    case "sandwich":
                         xcoor = Double.parseDouble(linescan.next());
                         ycoor = Double.parseDouble(linescan.next());
-                        System.out.println("Sandwich: ("+xcoor+","+ycoor+")");
+//                        System.out.println("Sandwich: ("+xcoor+","+ycoor+")");
                         sandwich = new Sandwich("res/Images/Sandwich.png", new APoint(xcoor, ycoor));
                         break;
+                    default:
+                        throw new IllegalStateException("Unexpected value: " + item.toLowerCase());
                 }
                 linescan.close();
             }
             scanner.close();
+
+            System.out.println("player: "+player.getPos().toString());
+            System.out.println("zombie: "+zombie.getPos().toString());
+            System.out.println("sandwich: "+sandwich.getPos().toString());
         } catch(FileNotFoundException e) {
             System.out.println("File was not found!\n"+e);
         } catch(Exception e) {
-            System.out.println("There is an unexpected error!\n"+e);
+            System.out.println("There is an unexpected error! "+e+"\n"+e.getStackTrace()[0].getLineNumber());
         }
     }
 
@@ -84,27 +97,51 @@ public class ShadowTreasure extends AbstractGame {
      */
     @Override
     public void update(Input input) {
-        bg.draw(0,0);
-        deja.drawString("Energy",20,760);
-//        deja.drawString(String.format("energy: %d",player.getEnergy()),20,760);
-        // Logic to update the game, as per specification must go here
-        if(player.getPos().distanceTo(zombie.getPos()) < 50) {
-            player.addEnergy(-3);
-            System.exit(0);
-        } else if(player.getPos().distanceTo(sandwich.getPos())<50) {
-            player.addEnergy(5);
-            sandwich = null;
+        bg.drawFromTopLeft(0,0);
+        deja.drawString(String.format("energy: %d",player.getEnergy()),20,760);
+
+        if(count>10) {
+            // Logic to update the game, as per specification must go here
+            if (player.getPos().distanceTo(zombie.getPos()) < 50) {
+                player.addEnergy(-3);
+                System.exit(0);
+            } else if (sandwich != null && player.getPos().distanceTo(sandwich.getPos()) < 50) {
+                player.addEnergy(5);
+                sandwich = null;
+            }  // after user reaches sandwich, the object does ot exist therefore we need to rethink ocndiiton
+            if (player.getEnergy() >= 3) {
+                APoint dir = player.getPos().getDirection(zombie.getPos());
+                player.getPos().setX(player.getPos().getX() + dir.getX() * player.getStepsize());
+                player.getPos().setY(player.getPos().getY() + dir.getY() * player.getStepsize());
+            } else {
+                APoint dir = player.getPos().getDirection(sandwich.getPos());
+                player.getPos().setX(player.getPos().getX() + dir.getX() * player.getStepsize());
+                player.getPos().setY(player.getPos().getY() + dir.getY() * player.getStepsize());
+            }
+            count=0;
         }
-        if(player.getEnergy() >= 3) {
-            APoint dir = player.getPos().getDirection(zombie.getPos());
-            player.getPos().setX(player.getPos().getX()+dir.getX()*player.getStepsize());
-            player.getPos().setY(player.getPos().getY()+dir.getY()*player.getStepsize());
-        } else {
-            APoint dir = player.getPos().getDirection(sandwich.getPos());
-            player.getPos().setX(player.getPos().getX()+dir.getX()*player.getStepsize());
-            player.getPos().setY(player.getPos().getY()+dir.getY()*player.getStepsize());
+        count++;
+
+        // Keyboard input
+        if(input.wasPressed(Keys.ESCAPE)) {
+            Window.close();
         }
+
         // constant info on window
+
+        player.getImg().draw(player.getPos().getX(),player.getPos().getY());
+        zombie.getImg().draw(zombie.getPos().getX(),zombie.getPos().getY());
+        if(sandwich!=null) {
+            sandwich.getImg().draw(sandwich.getPos().getX(),sandwich.getPos().getY());
+        }
+
+    }
+
+    private static String removeUTF8BOM(String string) {
+        if (string.startsWith(UTF8_BOM)) {
+            string = string.substring(1);
+        }
+        return string;
     }
 
 
-- 
GitLab