From 24df4e376c04d085046aeabd2794b5ccd6c2aebd Mon Sep 17 00:00:00 2001 From: Debucquoy Date: Tue, 21 Mar 2023 14:14:39 +0100 Subject: [PATCH] Adding Pieces positions --- app/src/main/java/school_project/Map.java | 29 ++++++++++++++- app/src/main/java/school_project/Piece.java | 17 ++++++++- app/src/main/java/school_project/Shape.java | 4 +++ app/src/test/java/school_project/MapTest.java | 35 +++++++++++++++++++ 4 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 app/src/test/java/school_project/MapTest.java diff --git a/app/src/main/java/school_project/Map.java b/app/src/main/java/school_project/Map.java index eb288d8..69a99b3 100644 --- a/app/src/main/java/school_project/Map.java +++ b/app/src/main/java/school_project/Map.java @@ -1,19 +1,46 @@ package school_project; import java.util.ArrayList; +import java.util.Arrays; /** * Represent the map with its pieces. * Every piece has a position element that represent its position on the map */ public class Map extends Shape{ - private ArrayList pieces; + private final ArrayList pieces = new ArrayList<>(); public Map(boolean[][] matrix) { super(matrix); } public void addPiece(Piece piece){ + piece.setLinked_map(this); pieces.add(piece); } + + /** + * Return a matrix with all used space on the map to see if a piece can fit in a space + * + * @return matrix of boolean with false being the not used space + */ + public boolean[][] getUsedSpace(){ + + // Copy of the map to avoid side effect + boolean[][] used = new boolean[height][width]; + for (int i = 0; i < height; i++) { + used[i] = Arrays.copyOf(matrix[i], width); + } + + for (Piece p : pieces) { + for(int x = 0; x < p.height; x++){ + for(int y = 0; y < p.width; y++){ + if (p.getShape()[x][y]){ + used[p.getPosition().x + x][p.getPosition().y + y] = false; + } + } + } + } + return used; + } } diff --git a/app/src/main/java/school_project/Piece.java b/app/src/main/java/school_project/Piece.java index b1f1d85..a358dd2 100644 --- a/app/src/main/java/school_project/Piece.java +++ b/app/src/main/java/school_project/Piece.java @@ -9,6 +9,7 @@ package school_project; public class Piece extends Shape{ private Vec2 Position; + private Map linked_map; public Piece() { super(); @@ -22,7 +23,21 @@ public class Piece extends Shape{ return Position; } - public void getPo + public void setPosition(Vec2 position){ + if (linked_map == null) { + return; + } + + this.Position = position; + } + + /** + * set the map the piece is into the the map argument + * @param map map where to place the piece + */ + public void setLinked_map(Map map){ + this.linked_map = map; + } /** * Rotate the matrix of the piece. Used when the player right click diff --git a/app/src/main/java/school_project/Shape.java b/app/src/main/java/school_project/Shape.java index 7f52580..eda3a9c 100644 --- a/app/src/main/java/school_project/Shape.java +++ b/app/src/main/java/school_project/Shape.java @@ -1,6 +1,10 @@ package school_project; +/** + * Base class for everything that is a shape kind, like map and pieces + * it contain a matrix of boolean where the shape is defined by the true's + */ public class Shape { protected boolean[][] matrix; diff --git a/app/src/test/java/school_project/MapTest.java b/app/src/test/java/school_project/MapTest.java new file mode 100644 index 0000000..289997b --- /dev/null +++ b/app/src/test/java/school_project/MapTest.java @@ -0,0 +1,35 @@ +package school_project; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class MapTest { + + @Test + void getUsedSpace() { + boolean[][] map_matrix = { + {false, true, true, false}, + {false, true, true, true}, + {true, true, true, false}, + {false, true, true, true} + }; + Map testMap = new Map(map_matrix); + + boolean[][] piece1_matrix = { + {true, true}, + {true, true}, + }; + Piece piece1 = new Piece(piece1_matrix); + testMap.addPiece(piece1); + piece1.setPosition(new Vec2(0,1)); + + boolean[][] result_matrix = { + {false, false, false, false}, + {false, false, false, true}, + {true, true, true, false}, + {false, true, true, true} + }; + assertArrayEquals(result_matrix, testMap.getUsedSpace()); + } +} \ No newline at end of file