From 696eaff2f7855bcc9ee850fb24317a5e63a72ad5 Mon Sep 17 00:00:00 2001 From: Nimrod Abramovich <grumpydormin@gmail.com> Date: Wed, 1 Apr 2020 12:20:35 +0100 Subject: [PATCH] regex for input & change N added for game load --- bin/coursework/Main.class | Bin 28079 -> 29824 bytes src/coursework/Main.java | 146 ++++++++++++++++++++++++++++---------- 2 files changed, 107 insertions(+), 39 deletions(-) diff --git a/bin/coursework/Main.class b/bin/coursework/Main.class index e11864fcd4a0c4e5737bfec1dfeeafb4b2b6f0e2..a1011f22830a280134bd2237cb846b343e56df25 100644 GIT binary patch delta 11220 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 delta 9561 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 DYt>>M diff --git a/src/coursework/Main.java b/src/coursework/Main.java index 39d3351..fb366a6 100644 --- a/src/coursework/Main.java +++ b/src/coursework/Main.java @@ -8,6 +8,9 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Stack; +import java.util.stream.Collectors; +import java.util.stream.Stream; + import javafx.application.*; import javafx.geometry.Insets; import javafx.geometry.Pos; @@ -174,12 +177,12 @@ public class Main extends Application { topHBox.setAlignment(Pos.BOTTOM_CENTER); topHBox.setSpacing(10); - Button loadGameFileButton = new Button("Load game - file"); + Button loadGameFileButton = new Button("Load Game - File"); CheckBox showMistakesCheck = new CheckBox("Show mistakes"); if (showMistakes) { showMistakesCheck.setSelected(true); } - Button loadGameTextInputButton = new Button("Load game - text input"); + Button loadGameTextInputButton = new Button("Load Game - Text"); loadGameFileButton.setPrefWidth(200); loadGameTextInputButton.setPrefWidth(loadGameFileButton.getPrefWidth()); @@ -348,21 +351,7 @@ public class Main extends Application { } } - /////////////////////////////////////////////////////////// - private void generateRandomGameEvent() { - // new popup selecting difficultly and n - Stage popupStage = new Stage(); - popupStage.initModality(Modality.APPLICATION_MODAL); - popupStage.initOwner(stage); - - VBox vbox = new VBox(); - vbox.setSpacing(5); - vbox.setAlignment(Pos.TOP_CENTER); - - HBox hboxBottom = new HBox(); - hboxBottom.setSpacing(86); - hboxBottom.setPadding(new Insets(10)); - + private Slider setupSlider() { Slider slider = new Slider(2,8,1); slider.setPrefWidth(150); slider.setMaxWidth(150); @@ -374,7 +363,10 @@ public class Main extends Application { slider.setSnapToTicks(true); slider.setValue(N); slider.setPadding(new Insets(10, 0, 0, 0)); - + return slider; + } + + private HBox setupRadioHBox() { HBox hboxMiddle = new HBox(); ToggleGroup tg = new ToggleGroup(); RadioButton easy = new RadioButton("Easy"); @@ -389,16 +381,33 @@ public class Main extends Application { radioVBox.setSpacing(5); hboxMiddle.getChildren().addAll(new Label("Difficulty:"), radioVBox); + return hboxMiddle; + } + + /////////////////////////////////////////////////////////// + private void generateRandomGameEvent() { + Stage popupStage = new Stage(); + popupStage.initModality(Modality.APPLICATION_MODAL); + popupStage.initOwner(stage); + + VBox vbox = new VBox(); + vbox.setSpacing(5); + vbox.setAlignment(Pos.TOP_CENTER); + + HBox hboxBottom = new HBox(); + hboxBottom.setSpacing(86); + hboxBottom.setPadding(new Insets(10)); + + Slider slider = setupSlider(); + Button generateButton = new Button("Generate"); generateButton.setAlignment(Pos.TOP_RIGHT); generateButton.setOnAction(e -> { popupStage.close(); - if ((int) slider.getValue() != N) { - N = (int) slider.getValue(); - resetGrid(); - } + N = (int) slider.getValue(); + resetGrid(); RandomGenerator rg = new RandomGenerator(N); - gridCages = rg.generate(); + gridCages = rg.generate(); }); Button cancelButton = new Button("Cancel"); @@ -411,10 +420,8 @@ public class Main extends Application { hboxTop.setSpacing(3); hboxTop.setAlignment(Pos.CENTER); - - hboxBottom.getChildren().addAll(cancelButton, generateButton); - vbox.getChildren().addAll(hboxTop, hboxMiddle, hboxBottom); + vbox.getChildren().addAll(hboxTop, setupRadioHBox(), hboxBottom); popupStage.setScene(new Scene(vbox, 250, 250)); popupStage.show(); @@ -427,16 +434,39 @@ public class Main extends Application { File selectedFile = fileChooser.showOpenDialog(stage); BufferedReader file = new BufferedReader(new FileReader(selectedFile)); - String line; - while ((line = file.readLine()) != null) { + + List<String> fileLines = file.lines().collect(Collectors.toList()); + int max = -1; + for (String line : fileLines) { + String[] rightHalfLine = line.split(" ")[1].split(","); + int[] lineIds = new int[rightHalfLine.length]; + for (int i = 0; i < lineIds.length; i++) { + lineIds[i] = Integer.parseInt(rightHalfLine[i]); + if (lineIds[i] > max) { + max = lineIds[i]; + } + } + } + + if (Math.sqrt(max) != N) { + N = (int) Math.sqrt(max); + resetGrid(); + } + + + for (String line : fileLines) { createNewCage(line); } file.close(); - } catch (FileNotFoundException e1) { + } + catch (FileNotFoundException e1) { e1.printStackTrace(); - } catch (IOException e2) { + } + catch (IOException e2) { e2.printStackTrace(); } + catch (NullPointerException e3) {} + } private void loadTextButtonClickEvent() { @@ -446,10 +476,17 @@ public class Main extends Application { VBox vbox = new VBox(); vbox.setPadding(new Insets(10)); - vbox.setSpacing(10); + vbox.setSpacing(5); + + HBox hboxBottom = new HBox(); + hboxBottom.setSpacing(163); - HBox hbox = new HBox(); - hbox.setSpacing(162); + + HBox hboxTop = new HBox(); + hboxTop.setSpacing(5); + hboxTop.setAlignment(Pos.CENTER); + + Slider slider = setupSlider(); TextArea textArea = new TextArea(); Button cancelButton = new Button("Cancel"); @@ -460,6 +497,10 @@ public class Main extends Application { Button loadButton = new Button("Load"); loadButton.setAlignment(Pos.TOP_RIGHT); loadButton.setOnAction(e -> { + if ((int) slider.getValue() != N) { + N = (int) slider.getValue(); + resetGrid(); + } String[] lines = textArea.getText().split("\n"); for (String line : lines) { if (!line.equals(null) && !line.equals("")) { @@ -469,8 +510,10 @@ public class Main extends Application { popupStage.hide(); }); - hbox.getChildren().addAll(cancelButton, loadButton); - vbox.getChildren().addAll(textArea, hbox); + Label sizeLabel = new Label("Size (NxN):"); + hboxTop.getChildren().addAll(sizeLabel, slider); + hboxBottom.getChildren().addAll(cancelButton, loadButton); + vbox.getChildren().addAll(hboxTop, textArea, hboxBottom); popupStage.setScene(new Scene(vbox, 300, 300)); popupStage.show(); @@ -610,11 +653,36 @@ public class Main extends Application { }); } - private void textFieldDataChange(int i, int j) { + private void textFieldDataChange(int i, int j) { if (!clearing && !undoing) { - undoStack.push(new GameState(GameState.getCurrentGameState(gridNumbers))); - if (undoButton.isDisabled()) { - undoButton.setDisable(false); + + boolean validInput = true; + try { + int textInput = Integer.parseInt(gridNumbers[i*N + j].getText()); + if (textInput < 1) { + validInput = false; + gridNumbers[i*N + j].setText(""); + } + else if (textInput > N) { + validInput = false; + gridNumbers[i*N + j].setText(gridNumbers[i*N + j].getText().substring(0, 1)); + } + } + catch (NumberFormatException ex) { + validInput = false; + if (gridNumbers[i*N + j].getText().length() == 2) { + gridNumbers[i*N + j].setText(gridNumbers[i*N + j].getText().substring(0, 1)); + } + else { + gridNumbers[i*N + j].setText(""); + } + } + + if (validInput) { + undoStack.push(new GameState(GameState.getCurrentGameState(gridNumbers))); + if (undoButton.isDisabled()) { + undoButton.setDisable(false); + } } } constraints.checkConstraints(j, i, showMistakes);; -- GitLab