diff --git a/bin/coursework/Cage.class b/bin/coursework/Cage.class index cf42078f2a031fef67fad643a5262c83393bbbda..f93cf6cd92afb4721aa5581143ec6bcac4afbf0f 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 50b401ba1f7cfe454d8d9798e6a8f2ef4f8247e8..3d978104687481173a895a9c50c1b4e9b64dec3b 100644 Binary files a/bin/coursework/Main.class and b/bin/coursework/Main.class differ diff --git a/bin/coursework/Square.class b/bin/coursework/Square.class index d244d5b2579894b681036730669ad911a3c75bf4..ef7b1b6f1ab6cf0ef440306e32c5b7b42af133f4 100644 Binary files a/bin/coursework/Square.class and b/bin/coursework/Square.class differ diff --git a/src/coursework/Cage.java b/src/coursework/Cage.java index ac9a83f5abb1a1431a981817852c3889ccf6fe9c..b2d17836b0680fef3f38f5fe4627242b75976bf1 100644 --- a/src/coursework/Cage.java +++ b/src/coursework/Cage.java @@ -27,7 +27,6 @@ public class Cage { this.cageLabels = Main.getCageLabels(); buildCage(); setCageInfo(); - setSquareCages(); } private boolean plusOperator() { @@ -71,21 +70,25 @@ public class Cage { List<Integer> sortedCageValues = new ArrayList<Integer>(); for (int id : squareIds) { gridValue = gridNumbers[id].getText(); - if (gridValue.equals("")) { - return true; + if (!gridValue.equals("")) { + sortedCageValues.add(Integer.parseInt(gridValue)); } else { - sortedCageValues.add(Integer.parseInt(gridValue)); + return false; } } - Collections.sort(sortedCageValues); + Collections.sort(sortedCageValues, Collections.reverseOrder()); int cageVal = sortedCageValues.get(0); - for (int i = 1; i < sortedCageValues.size() - 1; i++) { - cageVal -= sortedCageValues.get(i); + + for (int value : sortedCageValues) { + if (value != cageVal) { + cageVal -= value; + } } if (cageVal == value) { return false; } + return true; } @@ -94,18 +97,22 @@ public class Cage { List<Integer> sortedCageValues = new ArrayList<Integer>(); for (int id : squareIds) { gridValue = gridNumbers[id].getText(); - if (gridValue.equals("")) { - return true; + if (!gridValue.equals("")) { + sortedCageValues.add(Integer.parseInt(gridValue)); } else { - sortedCageValues.add(Integer.parseInt(gridValue)); + return false; } } - Collections.sort(sortedCageValues); + Collections.sort(sortedCageValues, Collections.reverseOrder()); int cageVal = sortedCageValues.get(0); - for (int i = 1; i < sortedCageValues.size() - 1; i++) { - cageVal /= sortedCageValues.get(i); + + for (int value : sortedCageValues) { + if (value != cageVal) { + cageVal /= value; + } } + if (cageVal == value) { return false; } @@ -172,12 +179,6 @@ public class Cage { return new int[] {row, col}; } - public void setSquareCages() { - for (Square square : gridSquares) { - square.setCage(this); - } - } - public int[] getCageIds() { return squareIds; } diff --git a/src/coursework/Main.java b/src/coursework/Main.java index e068d7c2648b683a2aa59e42609542dd9d034520..35d0332f9ce560bf5fd770704cfa63c64e12b973 100644 --- a/src/coursework/Main.java +++ b/src/coursework/Main.java @@ -111,15 +111,45 @@ public class Main extends Application { } } checkConstraints(j, i); + checkWinCondition(); }); square.getRectangle().toFront(); return gridPane; } + private void checkWinCondition() { + if (checkCellsFull() && checkConstraintErrors()) { + // win condition fulfilled + // animation and pop up + System.out.println("You won"); + } + } + + private boolean checkCellsFull() { + for (TextField textField : gridNumbers) { + if (!textField.getText().equals("")) { + return false; + } + } + return true; + } + + private boolean checkConstraintErrors() { + for (boolean[] cellErrors : highlightedError) { + for (boolean errorVal : cellErrors) { + if (errorVal) { + return false; + } + } + } + return true; + } + private void checkConstraints(int col, int row) { columnConstraint(row, col); rowConstraint(row, col); + cageConstraint(row, col); highlightCells(); } @@ -169,10 +199,19 @@ public class Main extends Application { private void cageConstraint(int row, int col) { if (gridCages.size() > 0) { - Cage cage = gridSquares[row*N + col].getCage(); - boolean cageConstraintsValue = cage.checkCageValues(); - for (int id : cage.getCageIds()) { - highlightedError[id][2] = cageConstraintsValue; + Cage searchCage = null; + for (Cage cage : gridCages) { + for (int id : cage.getCageIds()) { + if (id == (row*N + col)) { + searchCage = cage; + break; + } + } + } + + boolean validCageValues = searchCage.checkCageValues(); + for (int id : searchCage.getCageIds()) { + highlightedError[id][2] = validCageValues; } } } @@ -220,7 +259,7 @@ public class Main extends Application { vbox.getChildren().addAll(cageInfoLabel); vbox.setStyle("-fx-border-width: 0px;"); - vbox.setPadding(new Insets(5)); + vbox.setPadding(new Insets(2,0,0,5)); gridBoxes[i*N + j] = vbox; paneClickSquareEvent(i, j, square); @@ -494,75 +533,54 @@ public class Main extends Application { private HBox setupFontSizeHBox() { HBox hbox = new HBox(); - Button minus = new Button("-"); - Button font12 = new Button("Tiny"); - Button font16 = new Button("Small"); - Button font20 = new Button("Medium"); - Button font24 = new Button("Large"); - Button font28 = new Button("Huge"); - Button plus = new Button("+"); - - plus.setStyle("-fx-font-size:28px;"); - plus.setOnAction(e -> { - changeFontSize(fontSize + 1, minus, plus); - }); - minus.setStyle("-fx-font-size:12px;"); - minus.setOnAction(e -> { - changeFontSize(fontSize - 1, minus, plus); - }); + Button tiny = new Button("Tiny"); + Button small = new Button("Small"); + Button medium = new Button("Medium"); + Button large = new Button("Large"); + Button huge = new Button("Huge"); - font12.setStyle("-fx-font-size:12px;"); - font12.setOnAction(e -> { - changeFontSize(12, minus, plus); + + + tiny.setStyle("-fx-font-size:12px;"); + tiny.setOnAction(e -> { + changeFontSize(10); }); - font16.setStyle("-fx-font-size:16px;"); - font16.setOnAction(e -> { - changeFontSize(16, minus, plus); + small.setStyle("-fx-font-size:16px;"); + small.setOnAction(e -> { + changeFontSize(12); }); - font20.setStyle("-fx-font-size:20px;"); - font20.setOnAction(e -> { - changeFontSize(20, minus, plus); + medium.setStyle("-fx-font-size:20px;"); + medium.setOnAction(e -> { + changeFontSize(18); }); - font24.setStyle("-fx-font-size:24px;"); - font24.setOnAction(e -> { - changeFontSize(24, minus, plus); + large.setStyle("-fx-font-size:24px;"); + large.setOnAction(e -> { + changeFontSize(22); }); - font28.setStyle("-fx-font-size:28px;"); - font28.setOnAction(e -> { - changeFontSize(28, minus, plus); + huge.setStyle("-fx-font-size:28px;"); + huge.setOnAction(e -> { + changeFontSize(26); }); - hbox.getChildren().addAll(minus, font12, font16, font20, font24, font28, plus); + hbox.getChildren().addAll(tiny, small, medium, large, huge); hbox.setSpacing(10); hbox.setAlignment(Pos.CENTER); return hbox; } - private void changeFontSize(int size, Button minus, Button plus) { + private void changeFontSize(int size) { fontSize = size; for (TextField textField : gridNumbers) { textField.setStyle("-fx-focus-color: transparent; -fx-text-box-border: transparent;" + "-fx-background-color: -fx-text-box-border, -fx-control-inner-background;" - + "-fx-font-size:" + size + ";"); + + "-fx-font-size:" + size*1.8 + ";"); } for (Label label : cageLabels) { - label.setStyle("-fx-font-size:" + size + ";"); - } - if (fontSize == 10) { - minus.setDisable(true); - } - else if (fontSize > 10) { - minus.setDisable(false); - } - if (fontSize == 30) { - plus.setDisable(true); - } - else if (fontSize < 30) { - plus.setDisable(false); + label.setStyle("-fx-font-size:" + size*0.9 + ";"); } } @@ -589,7 +607,8 @@ public class Main extends Application { GridPane gridPane = setupGrid(); undoStack.push(new GameState(GameState.getCurrentGameState(gridNumbers))); - fontSize = (int) gridNumbers[0].getFont().getSize(); + fontSize = 18; + changeFontSize(fontSize); HBox fontSizeHBox = setupFontSizeHBox(); HBox topHBox = setupTopHBox(); HBox centerHBox = setupCenterHBox(); diff --git a/src/coursework/Square.java b/src/coursework/Square.java index 8aa589af591cec3ae69a91b9651dcf7442707176..c44142484257f3bdd77e279b62de530ba3b096b8 100644 --- a/src/coursework/Square.java +++ b/src/coursework/Square.java @@ -14,21 +14,12 @@ public class Square { private Line bottom; private Line left; private Group group = new Group(); - private Cage cage = null; public Square(double size) { this.size = size; draw(); } - public void setCage(Cage cage) { - this.cage = cage; - } - - public Cage getCage() { - return cage; - } - public void draw() { rectangle = new Rectangle(0, 0, size, size); rectangle.setFill(Color.WHITE);