diff --git a/bin/coursework/Cage.class b/bin/coursework/Cage.class index 870cdad95fc9207280743efe057850ed5f5306a1..35378411b02a029b9347a545d98c2226b59dd351 100644 Binary files a/bin/coursework/Cage.class and b/bin/coursework/Cage.class differ diff --git a/bin/coursework/Main.class b/bin/coursework/Main.class index b35577c6853cb8148f2dffd91cc66fa48d8aab8f..ed2ce99b3a07ae04a7b79c6a058d9939fb40ebf8 100644 Binary files a/bin/coursework/Main.class and b/bin/coursework/Main.class differ diff --git a/src/coursework/Cage.java b/src/coursework/Cage.java index a37ce8600565abdcfdfd5d4e9934914a51d13b76..c8db9610eaca3a1f16092739da60b20ab877fd15 100644 --- a/src/coursework/Cage.java +++ b/src/coursework/Cage.java @@ -10,7 +10,7 @@ public class Cage { private int[] squareIds; private int value; private String operator; - private Square[][] gridSquares; + private Square[] gridSquares; private Label[][] cageLabels; public Cage(int[] squareIds, int value, String operator) { @@ -26,6 +26,7 @@ public class Cage { public void buildCage() { if (squareIds.length == 1) return; + for (int idA : squareIds) { for (int idB : squareIds) { if (idA != idB) { @@ -38,16 +39,16 @@ public class Cage { final double WIDTH = 2; if (rowDiff == -1 && colDiff == 0) { - gridSquares[aCoord[0]][aCoord[1]].setRightStroke(WIDTH, Color.LIGHTGREY); + gridSquares[aCoord[0]*Main.N + aCoord[1]].setRightStroke(WIDTH, Color.LIGHTGREY); } else if (rowDiff == 1 && colDiff == 0) { - gridSquares[aCoord[0]][aCoord[1]].setLeftStroke(WIDTH, Color.LIGHTGREY); + gridSquares[aCoord[0]*Main.N + aCoord[1]].setLeftStroke(WIDTH, Color.LIGHTGREY); } else if (rowDiff == 0 && colDiff == -1) { - gridSquares[aCoord[0]][aCoord[1]].setBottomStroke(WIDTH, Color.LIGHTGREY); + gridSquares[aCoord[0]*Main.N + aCoord[1]].setBottomStroke(WIDTH, Color.LIGHTGREY); } else if (rowDiff == 0 && colDiff == 1) { - gridSquares[aCoord[0]][aCoord[1]].setTopStroke(WIDTH, Color.LIGHTGREY); + gridSquares[aCoord[0]*Main.N + aCoord[1]].setTopStroke(WIDTH, Color.LIGHTGREY); } } } diff --git a/src/coursework/Main.java b/src/coursework/Main.java index c55ff0dfc51c347620e5236ebbab9db99157ac30..7a28ea1bbee7c520bac574a44e2c8c8375d43b8d 100644 --- a/src/coursework/Main.java +++ b/src/coursework/Main.java @@ -43,20 +43,18 @@ public class Main extends Application { private Stage stage; final private double GRID_PERCENTAGE = 0.75; - private static Square[][] gridSquares = new Square[N][N]; + private static Square[] gridSquares = new Square[N*N]; private TextField[] gridNumbers = new TextField[N*N]; private static Label[][] cageLabels = new Label[N*N][2]; - private Rectangle gridOutline; private boolean isWider; - private HBox previous = null; + private HBox previousHBox = null; + private Square previousSquare = null; private GridPane setupGrid() { GridPane gridPane = new GridPane(); gridPane.setAlignment(Pos.CENTER); double size = scene.getWidth() * GRID_PERCENTAGE / N; - - //gridPane.add(setupGridOutline(size), 0, 0, N, N); - + for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { gridPane = addToGridPane(gridPane, size, i, j); @@ -71,7 +69,7 @@ public class Main extends Application { HBox hbox = setupGridHBox(square, textField, i, j); Group group = square.getGroup(); - gridSquares[i][j] = square; + gridSquares[i*N + j] = square; gridNumbers[i*N + j] = textField; gridPane.add(group, j, i); @@ -94,19 +92,9 @@ public class Main extends Application { vbox.setAlignment(Pos.CENTER); hbox.getChildren().add(vbox); hbox.setAlignment(Pos.CENTER); - hboxClickSquareEvent(hbox); + hboxClickSquareEvent(hbox, square); return hbox; - - } - - private Rectangle setupGridOutline(double size) { - gridOutline = new Rectangle(size*N + N*3, size*N + N*3, size*N + N*3, size*N + N*3); - gridOutline.setStroke(Color.BLACK); - gridOutline.setFill(Color.TRANSPARENT); - gridOutline.setStrokeWidth(2); - gridOutline.toBack(); - return gridOutline; } private Square setupGridSquare(double size) { @@ -198,13 +186,14 @@ public class Main extends Application { return bottomHBox; } - private void hboxClickSquareEvent(HBox hbox) { + private void hboxClickSquareEvent(HBox hbox, Square square) { hbox.addEventHandler(MouseEvent.MOUSE_CLICKED, e -> { - if (previous != null) { - previous.setStyle("-fx-border-width:0px;"); + if (previousHBox != null) { + previousHBox.setStyle("-fx-border-width:0px;"); } hbox.setStyle("-fx-border-color:red; -fx-border-width:2px;"); - previous = hbox; + previousHBox = hbox; + previousSquare = square; }); } @@ -238,17 +227,47 @@ public class Main extends Application { double newValue = isWider ? scene.getHeight() : scene.getWidth(); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { - Rectangle rectangle = gridSquares[i][j].getRectangle(); + Rectangle rectangle = gridSquares[i*N + j].getRectangle(); rectangle.setWidth(newValue * GRID_PERCENTAGE / N); rectangle.setHeight(newValue * GRID_PERCENTAGE / N); - gridSquares[i][j].resizeLines(newValue * GRID_PERCENTAGE / N); + gridSquares[i*N + j].resizeLines(newValue * GRID_PERCENTAGE / N); + } + } + } + + private HBox setupCenterHBox() { + HBox hbox = new HBox(); + for (int i = 1; i <= N; i++) { + Button button = new Button(i + ""); + double cellWidth = gridSquares[0].getRectangle().getWidth() / 2; + double fontSize = cellWidth * 0.4; + + button.setPrefSize(cellWidth, cellWidth); + button.setStyle("-fx-font-size:"+fontSize+"pt"); + button.setOnAction(e -> { + numbersButtonClickEvent(button); + }); + hbox.getChildren().add(button); + } + hbox.setSpacing(10); + hbox.setAlignment(Pos.CENTER); + return hbox; + } + + private void numbersButtonClickEvent(Button button) { + if (previousSquare != null) { + for (int i = 0; i < gridSquares.length; i++) { + if (previousSquare.equals(gridSquares[i])) { + gridNumbers[i].setText(button.getText()); + } } } - //gridOutline.setWidth(newValue * GRID_PERCENTAGE + N*2.5); - //gridOutline.setHeight(newValue * GRID_PERCENTAGE + N*2.5); + else { + // Some message about selecting a cell first + } } - public static Square[][] getGridSquares() { + public static Square[] getGridSquares() { return gridSquares; } @@ -267,9 +286,10 @@ public class Main extends Application { GridPane gridPane = setupGrid(); HBox topHBox = setupTopHBox(); + HBox centerHBox = setupCenterHBox(); HBox bottomHBox = setupBottomHBox(); - vBox.getChildren().addAll(topHBox, gridPane, bottomHBox); + vBox.getChildren().addAll(topHBox, gridPane, centerHBox, bottomHBox); stageWidthResizeEvent(stage, gridPane); stageHeightResizeEvent(stage, gridPane);