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); + } + }); + } +} -- 2.50.1 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); } -- 2.50.1 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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 literal 0 HcmV?d00001 -- 2.50.1 From 382af6b541ee19a9576e44883d8aa7d465017e65 Mon Sep 17 00:00:00 2001 From: Anthony Debucquoy 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; } } -- 2.50.1 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; -- 2.50.1 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); } } -- 2.50.1 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; -- 2.50.1 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); } } -- 2.50.1 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); } -- 2.50.1 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()); -- 2.50.1