100 lines
2.5 KiB
Java
100 lines
2.5 KiB
Java
package school_project;
|
|
|
|
|
|
import school_project.Utils.Array;
|
|
|
|
import java.io.Serializable;
|
|
|
|
/**
|
|
* 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 implements Serializable, Cloneable{
|
|
|
|
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{
|
|
|
|
for (boolean[] row: matrix){
|
|
if(row.length != matrix[0].length){
|
|
throw new IllegalArgumentException("The argument should be a square matrix");
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < matrix.length; i++) {
|
|
if(!Array.isRowOnlyFalse(matrix, i)) {
|
|
for (int j = 0; j < i; j++) {
|
|
matrix = Array.MatrixRemoveRow(matrix, 0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
for (int i = matrix.length-1; i >= 0; i--) {
|
|
if(!Array.isRowOnlyFalse(matrix, i)) {
|
|
for (int j = matrix.length-1; j > i; j--) {
|
|
matrix = Array.MatrixRemoveRow(matrix, j);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < matrix[0].length; i++) {
|
|
if(!Array.isColumnOnlyFalse(matrix, i)) {
|
|
for (int j = 0; j < i; j++) {
|
|
matrix = Array.MatrixRemoveColumn(matrix, 0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
for (int i = matrix[0].length-1; i >= 0; i--){
|
|
if(!Array.isColumnOnlyFalse(matrix, i)) {
|
|
for (int j = matrix[0].length-1; j > i; j--) {
|
|
matrix = Array.MatrixRemoveColumn(matrix, j);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
height = matrix.length;
|
|
width = matrix[0].length;
|
|
|
|
this.matrix = matrix;
|
|
}
|
|
|
|
public int getHeight() {
|
|
return height;
|
|
}
|
|
|
|
public int getWidth() {
|
|
return width;
|
|
}
|
|
|
|
public boolean[][] getShape() {
|
|
return matrix;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
String ret = "";
|
|
for (boolean[] row : matrix) {
|
|
for (boolean el : row) {
|
|
if(el) ret = ret.concat("⬛");
|
|
else ret = ret.concat("⬜");
|
|
}
|
|
ret = ret.concat("\n");
|
|
}
|
|
return ret;
|
|
}
|
|
}
|