From c68e6807680bc30bd1d9c5c7c295baf6c898a199 Mon Sep 17 00:00:00 2001 From: "Debucquoy Anthony (tonitch)" Date: Sat, 29 Apr 2023 19:01:31 +0200 Subject: [PATCH 01/10] Show Map and pieces shape in gameui --- app/src/main/java/school_project/GameUI.java | 29 +++++++++++++++ .../school_project/Utils/MatrixShape.java | 37 +++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 app/src/main/java/school_project/GameUI.java create mode 100644 app/src/main/java/school_project/Utils/MatrixShape.java diff --git a/app/src/main/java/school_project/GameUI.java b/app/src/main/java/school_project/GameUI.java new file mode 100644 index 0000000..82b4cf8 --- /dev/null +++ b/app/src/main/java/school_project/GameUI.java @@ -0,0 +1,29 @@ +package school_project; + +import javafx.geometry.Pos; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.HBox; +import javafx.scene.paint.Color; +import school_project.Utils.MatrixShape; + +public class GameUI extends BorderPane { + public final static int SEGMENT_SIZE = 50; + public GameUI(Map level) { + super(); + + MatrixShape grid = new MatrixShape(level); + grid.setAlignment(Pos.CENTER); + grid.setColor(Color.WHITE); + + HBox pieces = new HBox(); + pieces.setSpacing(10); + for (Piece p : level.getPieces()) { + MatrixShape _piece = new MatrixShape(p); + _piece.setColor(Color.RED); // TODO: Change with piece color + pieces.getChildren().add(_piece); + } + + setCenter(grid); + setBottom(pieces); + } +} diff --git a/app/src/main/java/school_project/Utils/MatrixShape.java b/app/src/main/java/school_project/Utils/MatrixShape.java new file mode 100644 index 0000000..8574295 --- /dev/null +++ b/app/src/main/java/school_project/Utils/MatrixShape.java @@ -0,0 +1,37 @@ +package school_project.Utils; + +import javafx.scene.layout.GridPane; +import javafx.scene.paint.Color; +import javafx.scene.paint.Paint; +import javafx.scene.shape.Rectangle; +import school_project.GameUI; +import school_project.Shape; + +import java.util.ArrayList; + +public class MatrixShape extends GridPane { + public MatrixShape(){ + super(); + } + public MatrixShape(Shape shape){ + super(); + boolean[][] shape_matrix = shape.getShape(); + for (int i = 0; i < shape_matrix.length; i++) { + for (int j = 0; j < shape_matrix[i].length; j++) { + if(shape_matrix[i][j]){ + Rectangle _cell = new Rectangle(GameUI.SEGMENT_SIZE, GameUI.SEGMENT_SIZE); + add(_cell, j, i); + } + } + } + } + + public void setColor(Paint p) { + getChildren().forEach(node -> { + if(node instanceof Rectangle r){ + r.setFill(p); + r.setStroke(Color.BLACK); + } + }); + } +} From 4583bbd7e62bc3819a39ffe1b1b37081f0fef1a5 Mon Sep 17 00:00:00 2001 From: Anthony Debucquoy Date: Mon, 1 May 2023 19:48:42 +0200 Subject: [PATCH 02/10] set default color of pieces --- app/src/main/java/school_project/GameUI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/school_project/GameUI.java b/app/src/main/java/school_project/GameUI.java index 82b4cf8..d15a53b 100644 --- a/app/src/main/java/school_project/GameUI.java +++ b/app/src/main/java/school_project/GameUI.java @@ -19,7 +19,7 @@ public class GameUI extends BorderPane { pieces.setSpacing(10); for (Piece p : level.getPieces()) { MatrixShape _piece = new MatrixShape(p); - _piece.setColor(Color.RED); // TODO: Change with piece color + _piece.setColor(p.getColor()); pieces.getChildren().add(_piece); } From 15e1745ad1ef97ee63881e8ed78e87e76f7530e1 Mon Sep 17 00:00:00 2001 From: Anthony Debucquoy Date: Wed, 3 May 2023 11:11:16 +0200 Subject: [PATCH 03/10] Adding Gap and texture --- app/src/main/java/school_project/GameUI.java | 10 +++++++--- .../java/school_project/Utils/MatrixShape.java | 16 +++++++++++----- app/src/main/resources/school_project/tile.png | Bin 0 -> 3894 bytes 3 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 app/src/main/resources/school_project/tile.png diff --git a/app/src/main/java/school_project/GameUI.java b/app/src/main/java/school_project/GameUI.java index d15a53b..04f911f 100644 --- a/app/src/main/java/school_project/GameUI.java +++ b/app/src/main/java/school_project/GameUI.java @@ -1,24 +1,28 @@ package school_project; +import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.paint.Color; import school_project.Utils.MatrixShape; +import java.io.FileNotFoundException; + public class GameUI extends BorderPane { public final static int SEGMENT_SIZE = 50; - public GameUI(Map level) { + public final static int SPACE_SIZE = 5; + public GameUI(Map level) throws FileNotFoundException { super(); - MatrixShape grid = new MatrixShape(level); + MatrixShape grid = new MatrixShape(level, true); grid.setAlignment(Pos.CENTER); grid.setColor(Color.WHITE); HBox pieces = new HBox(); pieces.setSpacing(10); for (Piece p : level.getPieces()) { - MatrixShape _piece = new MatrixShape(p); + MatrixShape _piece = new MatrixShape(p, false); _piece.setColor(p.getColor()); pieces.getChildren().add(_piece); } diff --git a/app/src/main/java/school_project/Utils/MatrixShape.java b/app/src/main/java/school_project/Utils/MatrixShape.java index 8574295..1db303a 100644 --- a/app/src/main/java/school_project/Utils/MatrixShape.java +++ b/app/src/main/java/school_project/Utils/MatrixShape.java @@ -1,25 +1,31 @@ package school_project.Utils; +import javafx.scene.Node; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; import javafx.scene.layout.GridPane; import javafx.scene.paint.Color; import javafx.scene.paint.Paint; import javafx.scene.shape.Rectangle; +import org.checkerframework.common.reflection.qual.GetClass; +import school_project.Controller; import school_project.GameUI; import school_project.Shape; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.util.ArrayList; public class MatrixShape extends GridPane { - public MatrixShape(){ - super(); - } - public MatrixShape(Shape shape){ + public MatrixShape(Shape shape, boolean texture) throws FileNotFoundException { super(); + setHgap(GameUI.SPACE_SIZE); + setVgap(GameUI.SPACE_SIZE); boolean[][] shape_matrix = shape.getShape(); for (int i = 0; i < shape_matrix.length; i++) { for (int j = 0; j < shape_matrix[i].length; j++) { if(shape_matrix[i][j]){ - Rectangle _cell = new Rectangle(GameUI.SEGMENT_SIZE, GameUI.SEGMENT_SIZE); + Node _cell = texture ? new ImageView(new Image(new FileInputStream(Controller.class.getResource("tile.png").getFile()))) : new Rectangle(GameUI.SEGMENT_SIZE, GameUI.SEGMENT_SIZE); add(_cell, j, i); } } diff --git a/app/src/main/resources/school_project/tile.png b/app/src/main/resources/school_project/tile.png new file mode 100644 index 0000000000000000000000000000000000000000..98e7c6e14906aa68290f5643571a61a830614a7d GIT binary patch literal 3894 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 Date: Wed, 3 May 2023 18:21:54 +0200 Subject: [PATCH 04/10] Piece rotation --- app/src/main/java/school_project/GameUI.java | 12 ++++-- .../school_project/Utils/MatrixShape.java | 38 +++++++++++++------ 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/school_project/GameUI.java b/app/src/main/java/school_project/GameUI.java index 04f911f..b5e0b76 100644 --- a/app/src/main/java/school_project/GameUI.java +++ b/app/src/main/java/school_project/GameUI.java @@ -2,6 +2,7 @@ package school_project; import javafx.geometry.Insets; import javafx.geometry.Pos; +import javafx.scene.input.MouseButton; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.paint.Color; @@ -15,15 +16,20 @@ public class GameUI extends BorderPane { public GameUI(Map level) throws FileNotFoundException { super(); - MatrixShape grid = new MatrixShape(level, true); + MatrixShape grid = new MatrixShape(level); grid.setAlignment(Pos.CENTER); grid.setColor(Color.WHITE); HBox pieces = new HBox(); pieces.setSpacing(10); for (Piece p : level.getPieces()) { - MatrixShape _piece = new MatrixShape(p, false); - _piece.setColor(p.getColor()); + MatrixShape _piece = new MatrixShape(p); + _piece.setOnMouseClicked(event -> { + if(event.getButton() == MouseButton.SECONDARY){ + ((Piece) _piece.shape).RotateRight(1); + _piece.update(); + } + }); pieces.getChildren().add(_piece); } diff --git a/app/src/main/java/school_project/Utils/MatrixShape.java b/app/src/main/java/school_project/Utils/MatrixShape.java index 1db303a..3d79f28 100644 --- a/app/src/main/java/school_project/Utils/MatrixShape.java +++ b/app/src/main/java/school_project/Utils/MatrixShape.java @@ -7,37 +7,53 @@ import javafx.scene.layout.GridPane; import javafx.scene.paint.Color; import javafx.scene.paint.Paint; import javafx.scene.shape.Rectangle; -import org.checkerframework.common.reflection.qual.GetClass; import school_project.Controller; import school_project.GameUI; +import school_project.Piece; import school_project.Shape; import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.util.ArrayList; public class MatrixShape extends GridPane { - public MatrixShape(Shape shape, boolean texture) throws FileNotFoundException { + public Shape shape; + private Paint color; + public MatrixShape(Shape shape) { super(); + this.shape = shape; + if(shape instanceof Piece p){ + color = p.getColor(); + } + + update(); + setHgap(GameUI.SPACE_SIZE); setVgap(GameUI.SPACE_SIZE); + } + + public void update(){ + getChildren().clear(); boolean[][] shape_matrix = shape.getShape(); for (int i = 0; i < shape_matrix.length; i++) { for (int j = 0; j < shape_matrix[i].length; j++) { if(shape_matrix[i][j]){ - Node _cell = texture ? new ImageView(new Image(new FileInputStream(Controller.class.getResource("tile.png").getFile()))) : new Rectangle(GameUI.SEGMENT_SIZE, GameUI.SEGMENT_SIZE); + Node _cell; + if(shape instanceof Piece p){ + _cell = new Rectangle(GameUI.SEGMENT_SIZE, GameUI.SEGMENT_SIZE); + ((Rectangle) _cell).setFill(color); + }else{ + try { + _cell = new ImageView(new Image(new FileInputStream(Controller.class.getResource("tile.png").getFile()))); + } catch (FileNotFoundException e) { + throw new RuntimeException(e); + } + } add(_cell, j, i); } } } } - public void setColor(Paint p) { - getChildren().forEach(node -> { - if(node instanceof Rectangle r){ - r.setFill(p); - r.setStroke(Color.BLACK); - } - }); + color = p; } } From 7b6291bda9abd2840f7937dc348be6a9ccf92cbf Mon Sep 17 00:00:00 2001 From: Anthony Debucquoy Date: Thu, 4 May 2023 13:12:22 +0200 Subject: [PATCH 05/10] Keep the Shape Size Signed-off-by: Anthony Debucquoy --- app/src/main/java/school_project/Utils/MatrixShape.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/school_project/Utils/MatrixShape.java b/app/src/main/java/school_project/Utils/MatrixShape.java index 3d79f28..c2f9c94 100644 --- a/app/src/main/java/school_project/Utils/MatrixShape.java +++ b/app/src/main/java/school_project/Utils/MatrixShape.java @@ -1,22 +1,20 @@ package school_project.Utils; +import javafx.geometry.Rectangle2D; import javafx.scene.Node; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.GridPane; -import javafx.scene.paint.Color; import javafx.scene.paint.Paint; import javafx.scene.shape.Rectangle; -import school_project.Controller; -import school_project.GameUI; -import school_project.Piece; -import school_project.Shape; +import school_project.*; import java.io.FileInputStream; import java.io.FileNotFoundException; public class MatrixShape extends GridPane { public Shape shape; + public Vec2 boundary_size = new Vec2(); private Paint color; public MatrixShape(Shape shape) { super(); @@ -52,6 +50,7 @@ public class MatrixShape extends GridPane { } } } + boundary_size = new Vec2((GameUI.SEGMENT_SIZE + GameUI.SPACE_SIZE) * shape.getWidth(), (GameUI.SEGMENT_SIZE + GameUI.SPACE_SIZE) * shape.getHeight()); } public void setColor(Paint p) { color = p; From e3d28b21b4a32cda39912aef283f0421ccb0da44 Mon Sep 17 00:00:00 2001 From: Anthony Debucquoy Date: Thu, 4 May 2023 13:14:10 +0200 Subject: [PATCH 06/10] Positionning on the screen Signed-off-by: Anthony Debucquoy --- app/src/main/java/school_project/GameUI.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/school_project/GameUI.java b/app/src/main/java/school_project/GameUI.java index b5e0b76..84cd28a 100644 --- a/app/src/main/java/school_project/GameUI.java +++ b/app/src/main/java/school_project/GameUI.java @@ -2,26 +2,27 @@ package school_project; import javafx.geometry.Insets; import javafx.geometry.Pos; +import javafx.scene.Group; import javafx.scene.input.MouseButton; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.paint.Color; +import javafx.stage.Screen; import school_project.Utils.MatrixShape; import java.io.FileNotFoundException; -public class GameUI extends BorderPane { +public class GameUI extends Group{ public final static int SEGMENT_SIZE = 50; public final static int SPACE_SIZE = 5; public GameUI(Map level) throws FileNotFoundException { super(); MatrixShape grid = new MatrixShape(level); - grid.setAlignment(Pos.CENTER); - grid.setColor(Color.WHITE); + grid.setLayoutX(Screen.getPrimary().getBounds().getWidth()/2 - grid.boundary_size.x/2); + grid.setLayoutY(Screen.getPrimary().getBounds().getHeight()/2 - grid.boundary_size.y/2); - HBox pieces = new HBox(); - pieces.setSpacing(10); + Group pieces = new Group(); for (Piece p : level.getPieces()) { MatrixShape _piece = new MatrixShape(p); _piece.setOnMouseClicked(event -> { @@ -30,10 +31,13 @@ public class GameUI extends BorderPane { _piece.update(); } }); + _piece.setOnMouseDragged(event -> { + _piece.setLayoutX(event.getSceneX()); + _piece.setLayoutY(event.getSceneY()); + }); pieces.getChildren().add(_piece); } - setCenter(grid); - setBottom(pieces); + getChildren().addAll(grid, pieces); } } From 592780bb730878b70db568807cbb92b9d46806ca Mon Sep 17 00:00:00 2001 From: Anthony Debucquoy Date: Thu, 4 May 2023 22:12:13 +0200 Subject: [PATCH 07/10] DownDate to java 11 --- .../java/school_project/MapGenerator.java | 20 ++++++++++++------- app/src/main/java/school_project/Piece.java | 3 ++- .../school_project/Utils/MatrixShape.java | 7 ++++--- app/src/main/java/school_project/Vec2.java | 3 ++- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/school_project/MapGenerator.java b/app/src/main/java/school_project/MapGenerator.java index f6a44b8..e782f97 100644 --- a/app/src/main/java/school_project/MapGenerator.java +++ b/app/src/main/java/school_project/MapGenerator.java @@ -20,13 +20,19 @@ public class MapGenerator { // define map size depending on the difficulty switch (difficulty){ - case Easy -> map_size = new Vec2(rand.nextInt(3, 5), rand.nextInt(3, 5)); - case Medium -> map_size = new Vec2(rand.nextInt(5, 8), rand.nextInt(5, 8)); - case Difficult -> { - map_size = new Vec2(rand.nextInt(8, 10), rand.nextInt(8, 10)); + case Easy: + map_size = new Vec2(rand.nextInt(2) + 3, rand.nextInt(2) + 3); + break; + case Medium: + map_size = new Vec2(rand.nextInt(3)+5, rand.nextInt(3)+5); + break; + case Difficult: + map_size = new Vec2(rand.nextInt(2)+8, rand.nextInt(2)+8); depth = 2; - } - default -> map_size = new Vec2(); + break; + default: + map_size = new Vec2(); + break; } // Cut edges @@ -57,7 +63,7 @@ public class MapGenerator { while (EmptySlots.size() > 0){ Collections.shuffle(EmptySlots); Vec2 selected = EmptySlots.get(0); - int size = rand.nextInt(1, 4); + int size = rand.nextInt(3)+1; boolean[][] shape = new boolean[size][size]; for(int i = 0; i < size; i++){ for (int j = 0; j < size; j++) { diff --git a/app/src/main/java/school_project/Piece.java b/app/src/main/java/school_project/Piece.java index ac01953..7ce450e 100644 --- a/app/src/main/java/school_project/Piece.java +++ b/app/src/main/java/school_project/Piece.java @@ -68,7 +68,8 @@ public class Piece extends Shape{ @Override public boolean equals(Object obj) { - if(obj instanceof Piece pieceObj){ + if(obj instanceof Piece){ + Piece pieceObj = (Piece) obj; if( pieceObj.getPosition().equals(this.getPosition()) && pieceObj.getShape().equals(getShape())) { return true; } diff --git a/app/src/main/java/school_project/Utils/MatrixShape.java b/app/src/main/java/school_project/Utils/MatrixShape.java index c2f9c94..fed4045 100644 --- a/app/src/main/java/school_project/Utils/MatrixShape.java +++ b/app/src/main/java/school_project/Utils/MatrixShape.java @@ -1,6 +1,5 @@ package school_project.Utils; -import javafx.geometry.Rectangle2D; import javafx.scene.Node; import javafx.scene.image.Image; import javafx.scene.image.ImageView; @@ -19,7 +18,8 @@ public class MatrixShape extends GridPane { public MatrixShape(Shape shape) { super(); this.shape = shape; - if(shape instanceof Piece p){ + if(shape instanceof Piece){ + Piece p = (Piece) shape; color = p.getColor(); } @@ -36,7 +36,8 @@ public class MatrixShape extends GridPane { for (int j = 0; j < shape_matrix[i].length; j++) { if(shape_matrix[i][j]){ Node _cell; - if(shape instanceof Piece p){ + if(shape instanceof Piece){ + Piece p = (Piece) shape; _cell = new Rectangle(GameUI.SEGMENT_SIZE, GameUI.SEGMENT_SIZE); ((Rectangle) _cell).setFill(color); }else{ diff --git a/app/src/main/java/school_project/Vec2.java b/app/src/main/java/school_project/Vec2.java index 6529e15..05d2576 100644 --- a/app/src/main/java/school_project/Vec2.java +++ b/app/src/main/java/school_project/Vec2.java @@ -21,7 +21,8 @@ public class Vec2 implements Serializable { @Override public boolean equals(Object obj) { - if (obj instanceof Vec2 vec) { + if (obj instanceof Vec2) { + Vec2 vec = (Vec2) obj; return this.x == vec.x && this.y == vec.y; } return false; From 6280b39c20d9e8061b996fa185749ae797e54444 Mon Sep 17 00:00:00 2001 From: Anthony Debucquoy Date: Thu, 4 May 2023 23:24:18 +0200 Subject: [PATCH 08/10] Cleaner code --- .../main/java/school_project/Controller.java | 39 +++++++++++++------ app/src/main/java/school_project/GameUI.java | 18 ++++----- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/school_project/Controller.java b/app/src/main/java/school_project/Controller.java index c979cac..9af36d9 100644 --- a/app/src/main/java/school_project/Controller.java +++ b/app/src/main/java/school_project/Controller.java @@ -4,26 +4,43 @@ package school_project; import javafx.application.Application; -import javafx.scene.Group; +import javafx.scene.Parent; import javafx.scene.Scene; -import javafx.scene.control.Button; + +import javafx.scene.input.KeyCombination; +import javafx.stage.Screen; import javafx.stage.Stage; +import school_project.Parsers.FileParserFactory; + +import java.io.File; +import java.io.IOException; + public class Controller extends Application { + private Stage stage; + Parent root; + public static Vec2 screen_size; @Override - public void start(Stage primaryStage) throws Exception { - primaryStage.setTitle("test"); - Button btn = new Button("test"); - btn.setOnAction(event -> System.out.println("hey")); + public void start(Stage primaryStage) throws IOException { + stage = primaryStage; + screen_size = new Vec2( + (int) Screen.getPrimary().getBounds().getWidth(), + (int) Screen.getPrimary().getBounds().getHeight() + ); - Group root = new Group(); - root.getChildren().add(btn); + stage.setTitle("ROAD TO MASTER YOU"); - Scene scene = new Scene(root, 300,300); - primaryStage.setScene(scene); + // Full Screen mode + stage.setFullScreen(true); + stage.setFullScreenExitHint(""); + primaryStage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH); - primaryStage.show(); + root = new GameUI(FileParserFactory.loadMapFromFile(new File(getClass().getResource("level11.level").getFile()))); + + Scene scene = new Scene(root, screen_size.x, screen_size.y); + stage.setScene(scene); + stage.show(); } public static void main(String[] args) { diff --git a/app/src/main/java/school_project/GameUI.java b/app/src/main/java/school_project/GameUI.java index 84cd28a..9de6550 100644 --- a/app/src/main/java/school_project/GameUI.java +++ b/app/src/main/java/school_project/GameUI.java @@ -1,13 +1,7 @@ package school_project; -import javafx.geometry.Insets; -import javafx.geometry.Pos; import javafx.scene.Group; import javafx.scene.input.MouseButton; -import javafx.scene.layout.BorderPane; -import javafx.scene.layout.HBox; -import javafx.scene.paint.Color; -import javafx.stage.Screen; import school_project.Utils.MatrixShape; import java.io.FileNotFoundException; @@ -19,10 +13,13 @@ public class GameUI extends Group{ super(); MatrixShape grid = new MatrixShape(level); - grid.setLayoutX(Screen.getPrimary().getBounds().getWidth()/2 - grid.boundary_size.x/2); - grid.setLayoutY(Screen.getPrimary().getBounds().getHeight()/2 - grid.boundary_size.y/2); - Group pieces = new Group(); + //center the grid + grid.setLayoutX((Controller.screen_size.x - grid.boundary_size.x) >> 1); + grid.setLayoutY((Controller.screen_size.y - grid.boundary_size.y) >> 1); + + getChildren().add(grid); + for (Piece p : level.getPieces()) { MatrixShape _piece = new MatrixShape(p); _piece.setOnMouseClicked(event -> { @@ -35,9 +32,8 @@ public class GameUI extends Group{ _piece.setLayoutX(event.getSceneX()); _piece.setLayoutY(event.getSceneY()); }); - pieces.getChildren().add(_piece); + getChildren().add(_piece); } - getChildren().addAll(grid, pieces); } } From 7c37c46830d91e5027be4206c0c9b11b174d519f Mon Sep 17 00:00:00 2001 From: Anthony Debucquoy Date: Fri, 5 May 2023 00:15:38 +0200 Subject: [PATCH 09/10] Correct position on draging pieces --- app/src/main/java/school_project/GameUI.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/school_project/GameUI.java b/app/src/main/java/school_project/GameUI.java index 9de6550..6b81899 100644 --- a/app/src/main/java/school_project/GameUI.java +++ b/app/src/main/java/school_project/GameUI.java @@ -9,6 +9,8 @@ import java.io.FileNotFoundException; public class GameUI extends Group{ public final static int SEGMENT_SIZE = 50; public final static int SPACE_SIZE = 5; + private final Vec2 piece_pos_click = new Vec2(); + public GameUI(Map level) throws FileNotFoundException { super(); @@ -22,16 +24,23 @@ public class GameUI extends Group{ for (Piece p : level.getPieces()) { MatrixShape _piece = new MatrixShape(p); + + // Pieces Events _piece.setOnMouseClicked(event -> { if(event.getButton() == MouseButton.SECONDARY){ ((Piece) _piece.shape).RotateRight(1); _piece.update(); } }); - _piece.setOnMouseDragged(event -> { - _piece.setLayoutX(event.getSceneX()); - _piece.setLayoutY(event.getSceneY()); + _piece.setOnMousePressed(event -> { + piece_pos_click.x = (int) event.getX(); + piece_pos_click.y = (int) event.getY(); }); + _piece.setOnMouseDragged(event -> { + _piece.setLayoutX(event.getSceneX() - piece_pos_click.x); + _piece.setLayoutY(event.getSceneY() - piece_pos_click.y); + }); + getChildren().add(_piece); } From 60bf1fa5d087c48157fb606ba943e843edc15cba Mon Sep 17 00:00:00 2001 From: Anthony Debucquoy Date: Fri, 5 May 2023 12:03:40 +0200 Subject: [PATCH 10/10] make white space on detached pieces --- app/src/main/java/school_project/GameUI.java | 13 +++++++++++++ .../main/java/school_project/Utils/MatrixShape.java | 9 +++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/school_project/GameUI.java b/app/src/main/java/school_project/GameUI.java index 6b81899..139109a 100644 --- a/app/src/main/java/school_project/GameUI.java +++ b/app/src/main/java/school_project/GameUI.java @@ -22,9 +22,22 @@ public class GameUI extends Group{ getChildren().add(grid); + Vec2 piece_space = new Vec2(SPACE_SIZE, SPACE_SIZE); + int column = 0; for (Piece p : level.getPieces()) { MatrixShape _piece = new MatrixShape(p); + _piece.setLayoutX(piece_space.x); + _piece.setLayoutY(piece_space.y); + + piece_space.y += _piece.boundary_size.y; + + if(piece_space.y >= Controller.screen_size.y){ + column++; + piece_space.y = SPACE_SIZE; + piece_space.x = (SEGMENT_SIZE*3 + SPACE_SIZE*4 )* column; + } + // Pieces Events _piece.setOnMouseClicked(event -> { if(event.getButton() == MouseButton.SECONDARY){ diff --git a/app/src/main/java/school_project/Utils/MatrixShape.java b/app/src/main/java/school_project/Utils/MatrixShape.java index fed4045..5ed0f34 100644 --- a/app/src/main/java/school_project/Utils/MatrixShape.java +++ b/app/src/main/java/school_project/Utils/MatrixShape.java @@ -4,6 +4,7 @@ import javafx.scene.Node; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.GridPane; +import javafx.scene.layout.Pane; import javafx.scene.paint.Paint; import javafx.scene.shape.Rectangle; import school_project.*; @@ -34,8 +35,8 @@ public class MatrixShape extends GridPane { boolean[][] shape_matrix = shape.getShape(); for (int i = 0; i < shape_matrix.length; i++) { for (int j = 0; j < shape_matrix[i].length; j++) { + Node _cell; if(shape_matrix[i][j]){ - Node _cell; if(shape instanceof Piece){ Piece p = (Piece) shape; _cell = new Rectangle(GameUI.SEGMENT_SIZE, GameUI.SEGMENT_SIZE); @@ -47,8 +48,12 @@ public class MatrixShape extends GridPane { throw new RuntimeException(e); } } - add(_cell, j, i); } + else{ + _cell = new Pane(); + ((Pane) _cell).setPrefSize(GameUI.SEGMENT_SIZE, GameUI.SEGMENT_SIZE); + } + add(_cell, j, i); } } boundary_size = new Vec2((GameUI.SEGMENT_SIZE + GameUI.SPACE_SIZE) * shape.getWidth(), (GameUI.SEGMENT_SIZE + GameUI.SPACE_SIZE) * shape.getHeight());