From e06abe60de96ccc534e8e3b3b0401cea56e3dcfe Mon Sep 17 00:00:00 2001 From: Anthony Debucquoy Date: Mon, 27 Feb 2023 00:52:19 +0100 Subject: [PATCH] Starting Piece Shape and Maps, WIP: wrong algorithm --- app/src/main/java/school_project/Piece.java | 31 ++++++++++ app/src/main/java/school_project/Shape.java | 40 +++++++++++++ .../test/java/school_project/PieceTest.java | 60 +++++++++++++++++++ .../test/java/school_project/ShapeTest.java | 48 +++++++++++++++ 4 files changed, 179 insertions(+) create mode 100644 app/src/main/java/school_project/Piece.java create mode 100644 app/src/main/java/school_project/Shape.java create mode 100644 app/src/test/java/school_project/PieceTest.java create mode 100644 app/src/test/java/school_project/ShapeTest.java diff --git a/app/src/main/java/school_project/Piece.java b/app/src/main/java/school_project/Piece.java new file mode 100644 index 0000000..f5dde6b --- /dev/null +++ b/app/src/main/java/school_project/Piece.java @@ -0,0 +1,31 @@ +package school_project; + +public class Piece extends Shape{ + + public Piece() { + super(); + } + + public Piece(boolean[][] matrix) { + super(matrix); + } + + /** + * Rotate the matrix of the piece. Used when the player right click + * TODO: ALGORITHME INCORECTE, A REFAIRE + * + * @param times Set the amount of time the rotation should be executed. Should be set between 1 and 3. + */ + public void RotateRight(int times){ + while(times > 0) { + boolean[][] temp_matrix = new boolean[width][height]; + for (int i = 0; i < height; i++) { + for (int j = 0; j < width; j++) { + temp_matrix[j][i] = matrix[i][j]; + } + } + times--; + matrix = temp_matrix; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/school_project/Shape.java b/app/src/main/java/school_project/Shape.java new file mode 100644 index 0000000..7f52580 --- /dev/null +++ b/app/src/main/java/school_project/Shape.java @@ -0,0 +1,40 @@ +package school_project; + + +public class Shape { + + protected boolean[][] matrix; + protected int height, width; + + public Shape() { + matrix = new boolean[0][0]; + } + + public Shape(boolean[][] matrix){ + this.setShape(matrix); + } + + public void setShape(boolean[][] matrix) throws IllegalArgumentException{ + height = matrix.length; + width = matrix[0].length; + + for (boolean[] row: matrix){ + if(row.length != width){ + throw new IllegalArgumentException("The argument should be a square matrix"); + } + } + this.matrix = matrix; + } + + public int getHeight() { + return height; + } + + public int getWidth() { + return width; + } + + public boolean[][] getShape() { + return matrix; + } +} \ No newline at end of file diff --git a/app/src/test/java/school_project/PieceTest.java b/app/src/test/java/school_project/PieceTest.java new file mode 100644 index 0000000..ad9e23c --- /dev/null +++ b/app/src/test/java/school_project/PieceTest.java @@ -0,0 +1,60 @@ +package school_project; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class PieceTest { + + @Test + void rotateRight() { + boolean[][] piece1_matrix = { + {true, false, false}, + {false, true, false}, + {true, true, false}, + }; + + boolean[][] piece1_matrix_result = { + {true, false, true}, + {false, true, true}, + {false, false, false}, + }; + + boolean[][] piece2_matrix = { + {true}, + {false}, + {true}, + }; + + boolean[][] piece2_matrix_result = { + {true, false, true}, + }; + + boolean[][] piece3_matrix_result = { + {false, false, false}, + {true, true, false}, + {true, false, true}, + }; + + Piece piece1 = new Piece(); + piece1.setShape(piece1_matrix); + + Piece piece2 = new Piece(piece2_matrix); + + Piece piece3 = new Piece(piece1_matrix); + + Piece piece4 = new Piece(piece1_matrix); + + piece1.RotateRight(1); + assertArrayEquals(piece1_matrix_result, piece1.getShape()); + + piece2.RotateRight(1); + assertArrayEquals(piece2_matrix_result, piece2.getShape()); + + piece3.RotateRight(3); + assertArrayEquals(piece3_matrix_result, piece3.getShape()); + + piece4.RotateRight(3); + assertNotEquals(piece1_matrix_result, piece4.getShape()); + } +} \ No newline at end of file diff --git a/app/src/test/java/school_project/ShapeTest.java b/app/src/test/java/school_project/ShapeTest.java new file mode 100644 index 0000000..c5e6fd3 --- /dev/null +++ b/app/src/test/java/school_project/ShapeTest.java @@ -0,0 +1,48 @@ +package school_project; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ShapeTest { + + @Test + void setShape() { + boolean[][] matrix_shape1 = { + {true, false}, + {true, true}, + {true, false} + }; + boolean[][] matrix_shape2 = { + {true, false, true}, + {true, true, true}, + {true, false, true}, + }; + boolean[][] matrix_shape3 = { + {true, false, true}, + {true, true} + }; + + boolean[][] matrix_shape4 = { + {true}, + {false}, + {true} + }; + + Shape shape1 = new Shape(); + shape1.setShape(matrix_shape1); + assertEquals(3, shape1.getHeight()); + assertEquals(2, shape1.getWidth()); + + Shape shape2 = new Shape(matrix_shape2); + assertEquals(3, shape2.getHeight()); + assertEquals(3, shape2.getWidth()); + + assertThrows(IllegalArgumentException.class, () -> new Shape(matrix_shape3)); + + Shape shape4 = new Shape(matrix_shape4); + assertEquals(3, shape4.getHeight()); + assertEquals(1, shape4.getWidth()); + + } +} \ No newline at end of file