Game UI #38
@ -4,26 +4,43 @@
|
|||||||
package school_project;
|
package school_project;
|
||||||
|
|
||||||
import javafx.application.Application;
|
import javafx.application.Application;
|
||||||
import javafx.scene.Group;
|
import javafx.scene.Parent;
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.scene.control.Button;
|
|
||||||
|
import javafx.scene.input.KeyCombination;
|
||||||
|
import javafx.stage.Screen;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
import school_project.Parsers.FileParserFactory;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
|
||||||
public class Controller extends Application {
|
public class Controller extends Application {
|
||||||
|
private Stage stage;
|
||||||
|
Parent root;
|
||||||
|
public static Vec2 screen_size;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage primaryStage) throws Exception {
|
public void start(Stage primaryStage) throws IOException {
|
||||||
primaryStage.setTitle("test");
|
stage = primaryStage;
|
||||||
Button btn = new Button("test");
|
screen_size = new Vec2(
|
||||||
btn.setOnAction(event -> System.out.println("hey"));
|
(int) Screen.getPrimary().getBounds().getWidth(),
|
||||||
|
(int) Screen.getPrimary().getBounds().getHeight()
|
||||||
|
);
|
||||||
|
|
||||||
Group root = new Group();
|
stage.setTitle("ROAD TO MASTER YOU");
|
||||||
root.getChildren().add(btn);
|
|
||||||
|
|
||||||
Scene scene = new Scene(root, 300,300);
|
// Full Screen mode
|
||||||
primaryStage.setScene(scene);
|
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) {
|
public static void main(String[] args) {
|
||||||
|
61
app/src/main/java/school_project/GameUI.java
Normal file
61
app/src/main/java/school_project/GameUI.java
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
package school_project;
|
||||||
|
|
||||||
|
import javafx.scene.Group;
|
||||||
|
import javafx.scene.input.MouseButton;
|
||||||
|
import school_project.Utils.MatrixShape;
|
||||||
|
|
||||||
|
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();
|
||||||
|
|
||||||
|
MatrixShape grid = new MatrixShape(level);
|
||||||
|
|
||||||
|
//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);
|
||||||
|
|
||||||
|
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){
|
||||||
|
((Piece) _piece.shape).RotateRight(1);
|
||||||
|
_piece.update();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
_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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -20,13 +20,19 @@ public class MapGenerator {
|
|||||||
|
|
||||||
// define map size depending on the difficulty
|
// define map size depending on the difficulty
|
||||||
switch (difficulty){
|
switch (difficulty){
|
||||||
case Easy -> map_size = new Vec2(rand.nextInt(3, 5), rand.nextInt(3, 5));
|
case Easy:
|
||||||
case Medium -> map_size = new Vec2(rand.nextInt(5, 8), rand.nextInt(5, 8));
|
map_size = new Vec2(rand.nextInt(2) + 3, rand.nextInt(2) + 3);
|
||||||
case Difficult -> {
|
break;
|
||||||
map_size = new Vec2(rand.nextInt(8, 10), rand.nextInt(8, 10));
|
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;
|
depth = 2;
|
||||||
}
|
break;
|
||||||
default -> map_size = new Vec2();
|
default:
|
||||||
|
map_size = new Vec2();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cut edges
|
// Cut edges
|
||||||
@ -57,7 +63,7 @@ public class MapGenerator {
|
|||||||
while (EmptySlots.size() > 0){
|
while (EmptySlots.size() > 0){
|
||||||
Collections.shuffle(EmptySlots);
|
Collections.shuffle(EmptySlots);
|
||||||
Vec2 selected = EmptySlots.get(0);
|
Vec2 selected = EmptySlots.get(0);
|
||||||
int size = rand.nextInt(1, 4);
|
int size = rand.nextInt(3)+1;
|
||||||
boolean[][] shape = new boolean[size][size];
|
boolean[][] shape = new boolean[size][size];
|
||||||
for(int i = 0; i < size; i++){
|
for(int i = 0; i < size; i++){
|
||||||
for (int j = 0; j < size; j++) {
|
for (int j = 0; j < size; j++) {
|
||||||
|
@ -68,7 +68,8 @@ public class Piece extends Shape{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object obj) {
|
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())) {
|
if( pieceObj.getPosition().equals(this.getPosition()) && pieceObj.getShape().equals(getShape())) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
64
app/src/main/java/school_project/Utils/MatrixShape.java
Normal file
64
app/src/main/java/school_project/Utils/MatrixShape.java
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
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.layout.Pane;
|
||||||
|
import javafx.scene.paint.Paint;
|
||||||
|
import javafx.scene.shape.Rectangle;
|
||||||
|
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();
|
||||||
|
this.shape = shape;
|
||||||
|
if(shape instanceof Piece){
|
||||||
|
Piece p = (Piece) shape;
|
||||||
|
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++) {
|
||||||
|
Node _cell;
|
||||||
|
if(shape_matrix[i][j]){
|
||||||
|
if(shape instanceof Piece){
|
||||||
|
Piece p = (Piece) shape;
|
||||||
|
_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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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());
|
||||||
|
}
|
||||||
|
public void setColor(Paint p) {
|
||||||
|
color = p;
|
||||||
|
}
|
||||||
|
}
|
@ -21,7 +21,8 @@ public class Vec2 implements Serializable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object obj) {
|
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 this.x == vec.x && this.y == vec.y;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
BIN
app/src/main/resources/school_project/tile.png
Normal file
BIN
app/src/main/resources/school_project/tile.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.8 KiB |
Loading…
Reference in New Issue
Block a user