diff --git a/bin/coursework/Animation.class b/bin/coursework/Animation.class index ea9fd11221e9b362801b9cf1f759bb0931b3b95c..c2bb568060dfc33acfe2ac65225322cbbea49b6d 100644 Binary files a/bin/coursework/Animation.class and b/bin/coursework/Animation.class differ diff --git a/bin/coursework/Cage.class b/bin/coursework/Cage.class index f93cf6cd92afb4721aa5581143ec6bcac4afbf0f..052d4186f6d4b83626024f7aaf7222bdaceaa13a 100644 Binary files a/bin/coursework/Cage.class and b/bin/coursework/Cage.class differ diff --git a/bin/coursework/ConstraintsHandler.class b/bin/coursework/ConstraintsHandler.class index 0a68b66c3ee4a187021e0e0b1082d8babf7d6818..bade47a38ad4369566460ba344b569c3d12da6f3 100644 Binary files a/bin/coursework/ConstraintsHandler.class and b/bin/coursework/ConstraintsHandler.class differ diff --git a/bin/coursework/GameState.class b/bin/coursework/GameState.class index 05a8e904dce51e954e51bf717fb058b235294275..8027a7087fee2b670d9c16a28a14d56c83fb11eb 100644 Binary files a/bin/coursework/GameState.class and b/bin/coursework/GameState.class differ diff --git a/bin/coursework/Main.class b/bin/coursework/Main.class index 0bac322ce29c478d59d85bef452194620b73f727..5b83beb2a97814918f935971184bb5dd7dce3c19 100644 Binary files a/bin/coursework/Main.class and b/bin/coursework/Main.class differ diff --git a/src/coursework/Animation.java b/src/coursework/Animation.java index cdf17e1f032b4ae690e853df85ef2799cb7b7ff2..f3e9c9b44a6cbc4b6d9d43a10d722dd4c9a9a174 100644 --- a/src/coursework/Animation.java +++ b/src/coursework/Animation.java @@ -4,13 +4,15 @@ import javafx.animation.Timeline; import java.util.ArrayList; import java.util.List; import javafx.animation.KeyFrame; +import javafx.scene.control.Alert; +import javafx.scene.control.Alert.AlertType; import javafx.scene.layout.VBox; import javafx.util.Duration; public class Animation { private VBox[] gridBoxes; - private String[] colors = {"#FF0000", "#FF7F00", "#FFFF00", "#00FF00", "#00FFFF", "#0000FF", "#3F00FF", "#7F00FF", "rgba(255,0,0,0)"}; + private String[] colors = {"#FF0000", "#FF7F00", "#FFFF00", "#00FF00", "#00FFFF", "#0000FF", "#462370", "#7F00FF", "rgba(255,0,0,0)"}; private Integer[] indexArray; private List<Integer> indexList = new ArrayList<Integer>(); private int index = 0; @@ -42,7 +44,7 @@ public class Animation { count++; } if (count == 9) { - if (Main.N % 2 == 0) { + if (Main.N % 2 == 0 && colorIndex % 2 == 0 && colorIndex < 23 ) { //even int maxCentre = Main.N / 2; int minCentre = maxCentre - 1; @@ -53,48 +55,97 @@ public class Animation { int botRight = (maxCentre * Main.N + maxCentre); int[] gridIndicies = { topLeft, topRight, botLeft, botRight }; - if (colorIndex < colors.length) { + if (colorIndex/2 < colors.length) { for (int gridIndex : gridIndicies) { - gridBoxes[gridIndex].setStyle("-fx-background-color:"+colors[colorIndex]+";"); + gridBoxes[gridIndex].setStyle("-fx-background-color:"+colors[colorIndex/2]+";"); } } - if (colorIndex - 1 > 0 && colorIndex < colors.length + 1) { - gridBoxes[topLeft - 1].setStyle("-fx-background-color:"+colors[colorIndex - 1]+";"); - gridBoxes[topLeft - Main.N].setStyle("-fx-background-color:"+colors[colorIndex - 1]+";"); - gridBoxes[topLeft - Main.N - 1].setStyle("-fx-background-color:"+colors[colorIndex - 1]+";"); - - gridBoxes[topRight + 1].setStyle("-fx-background-color:"+colors[colorIndex - 1]+";"); - gridBoxes[topRight - Main.N].setStyle("-fx-background-color:"+colors[colorIndex - 1]+";"); - gridBoxes[topRight - Main.N + 1].setStyle("-fx-background-color:"+colors[colorIndex - 1]+";"); - - gridBoxes[botLeft - 1].setStyle("-fx-background-color:"+colors[colorIndex - 1]+";"); - gridBoxes[botLeft + Main.N].setStyle("-fx-background-color:"+colors[colorIndex - 1]+";"); - gridBoxes[botLeft + Main.N - 1].setStyle("-fx-background-color:"+colors[colorIndex - 1]+";"); - - gridBoxes[botRight + 1].setStyle("-fx-background-color:"+colors[colorIndex - 1]+";"); - gridBoxes[botRight + Main.N].setStyle("-fx-background-color:"+colors[colorIndex - 1]+";"); - gridBoxes[botRight + Main.N + 1].setStyle("-fx-background-color:"+colors[colorIndex - 1]+";"); + if (colorIndex/2 - 1 > 0 && colorIndex/2 < colors.length + 1 && Main.N > 2) { + int[] ringCombinations1 = {1, Main.N + 1, Main.N}; + for (int ringVal : ringCombinations1) { + gridBoxes[botRight + ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 1]+";"); + gridBoxes[topLeft - ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 1]+";"); + } + int[] ringCombinations2 = {- 1, Main.N - 1, Main.N}; + for (int ringVal : ringCombinations2) { + gridBoxes[botLeft + ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 1]+";"); + gridBoxes[topRight - ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 1]+";"); + } + } + if (colorIndex/2 - 2 > 0 && colorIndex/2 < colors.length + 2 && Main.N > 4) { + int[] ringCombinations1 = {2, Main.N + 2, 2*Main.N + 2, 2*Main.N + 1, 2*Main.N}; + for (int ringVal : ringCombinations1) { + gridBoxes[botRight + ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 2]+";"); + gridBoxes[topLeft - ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 2]+";"); + } + int[] ringCombinations2 = {- 2, Main.N - 2, 2*Main.N - 2, 2*Main.N - 1, 2*Main.N}; + for (int ringVal : ringCombinations2) { + gridBoxes[botLeft + ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 2]+";"); + gridBoxes[topRight - ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 2]+";"); + } + } + if (colorIndex/2 - 3 > 0 && colorIndex/2 < colors.length + 3 && Main.N > 6) { + int[] ringCombinations1 = {3, Main.N + 3, 2*Main.N + 3, 3*Main.N + 3, 3*Main.N + 2, 3*Main.N + 1, 3*Main.N}; + for (int ringVal : ringCombinations1) { + gridBoxes[botRight + ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 3]+";"); + gridBoxes[topLeft - ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 3]+";"); + } + int[] ringCombinations2 = {- 3, Main.N - 3, 2*Main.N - 3, 3*Main.N - 3, 3*Main.N - 2, 3*Main.N - 1, 3*Main.N}; + for (int ringVal : ringCombinations2) { + gridBoxes[botLeft + ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 3]+";"); + gridBoxes[topRight - ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 3]+";"); + } } + colorIndex++; + } + else if (colorIndex % 2 == 0) { + //odd + int centrePoint = (Main.N - 1) / 2; + int centre = (centrePoint * Main.N) + centrePoint; - + if (colorIndex/2 < colors.length) { + gridBoxes[centre].setStyle("-fx-background-color:"+colors[colorIndex/2]+";"); + } + if (colorIndex/2 - 1 > 0 && colorIndex/2 < colors.length + 1) { + int[] firstRing = {- 1 - Main.N, - Main.N, 1 - Main.N, - 1, + 1, - 1 + Main.N, Main.N, 1 + Main.N }; + for (int ringVal : firstRing) { + gridBoxes[centre + ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 1]+";"); + } + } + if (colorIndex/2 - 2 > 0 && colorIndex/2 < colors.length + 2 && Main.N > 3) { + int[] secondRing = { -2*Main.N - 2, - 2*Main.N - 1, - 2*Main.N, - 2*Main.N + 1, - 2*Main.N + 2, - Main.N - 2, - Main.N + 2, 2, -2, Main.N - 2, Main.N + 2, + 2*Main.N - 2, 2*Main.N - 1, 2*Main.N, 2*Main.N + 1, 2*Main.N + 2 }; + for (int ringVal : secondRing) { + gridBoxes[centre + ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 2]+";"); + } + } + if (colorIndex/2 - 3 > 0 && colorIndex/2 < colors.length + 3 && Main.N > 5) { + int[] thirdRing = { -3*Main.N - 3, - 3*Main.N - 2, -3*Main.N - 1, - 3*Main.N, - 3*Main.N + 1, - 3*Main.N + 2, - 3*Main.N + 3, - Main.N - 3, - Main.N + 3, 3, -3, Main.N - 3, + Main.N + 3, 2*Main.N - 3, 2*Main.N + 3, -2*Main.N + 3, -2*Main.N - 3, 3*Main.N - 3, 3*Main.N - 2, 3*Main.N - 1, 3*Main.N, 3*Main.N + 1, 3*Main.N + 2, 3*Main.N + 3}; + for (int ringVal : thirdRing) { + gridBoxes[centre + ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 3]+";"); + } + } + colorIndex++; } else { - //odd - int centre = Main.N - 1 / 2; - - gridBoxes[centre * Main.N + centre].setStyle("-fx-background-color:"+colors[colorIndex]+";"); + colorIndex++; } - colorIndex++; + } + if (colorIndex == 23) { + Alert alert = new Alert(AlertType.INFORMATION); + alert.setContentText("Congratulations! You have completed this Mathdoku puzzel."); + alert.setTitle("Puzzel Complete"); + alert.show(); } }); timeline.getKeyFrames().add(keyframe); - timeline.setCycleCount(indexArray.length + 20); + timeline.setCycleCount(indexArray.length + 30); timeline.play(); - } - + private void initialiseIndex() { for (int i = 0; i < Main.N; i++) { for (int j = 0; j < Main.N; j++) { diff --git a/src/coursework/Main.java b/src/coursework/Main.java index 9c8ff2fc07cda09e28392ba7e34623683e2570c9..70ac3b204c3effc53081848cf2e089449f5627f5 100644 --- a/src/coursework/Main.java +++ b/src/coursework/Main.java @@ -36,7 +36,7 @@ import javafx.stage.Stage; public class Main extends Application { - final static public int N = 6; + final static public int N = 8; private Scene scene; private Stage stage; @@ -119,7 +119,7 @@ public class Main extends Application { gridPane.add(vbox, j, i); textField.textProperty().addListener((observable, oldValue, newValue) -> { - textFieldClickEvent(i, j); + textFieldDataChange(i, j); }); square.getRectangle().toFront(); @@ -384,8 +384,6 @@ public class Main extends Application { } showMistakes = showMistakesCheck.isSelected(); constraints.highlightCells(showMistakes); - Animation animation = new Animation(); - animation.go(); } private void undoButtonClickEvent() { @@ -514,7 +512,7 @@ public class Main extends Application { }); } - private void textFieldClickEvent(int i, int j) { + private void textFieldDataChange(int i, int j) { if (!clearing && !undoing) { undoStack.push(new GameState(GameState.getCurrentGameState(gridNumbers))); if (undoButton.isDisabled()) { @@ -567,6 +565,36 @@ public class Main extends Application { HBox bottomHBox = setupBottomHBox(); + ///// +// Button tempButton = new Button("SHOW ANSWER"); +// int[] answers = {5,6,3,4,1,2,6,1,4,5,2,3,4,5,2,3,6,1,3,4,1,2,5,6,2,3,6,1,4,5,1,2,5,6,3,4}; +// tempButton.setOnAction(e -> { +// if (N != 6) { +// Animation animation = new Animation(); +// animation.go(); +// } +// else { +// BufferedReader file; +// try { +// file = new BufferedReader(new FileReader(new File("C:\\Java Eclipse Workspace\\Programming II Coursework\\mathdokuCage.txt"))); +// +// String line; +// while ((line = file.readLine()) != null) { +// createNewCage(line); +// } +// file.close(); +// +// for (int i = 0; i < gridNumbers.length; i++) { +// gridNumbers[i].setText(answers[i] + ""); +// } +// } +// catch (IOException ex) { +// System.err.println(ex); +// } +// } +// }); + ///// + vBox.getChildren().addAll(topHBox, gridHBox, bottomHBox); stageWidthResizeEvent(stage, gridPane);