From af92bbf6bcecb00be2208f4b8eeec63363122630 Mon Sep 17 00:00:00 2001 From: Nimrod Abramovich <grumpydormin@gmail.com> Date: Sat, 25 Apr 2020 17:14:57 +0100 Subject: [PATCH] final steps --- 2x2.txt | 2 + 3x3.txt | 4 + 4x4.txt | 6 + 4x4_divdiff.txt | 6 + 5x5.txt | 10 + 6x6.txt | 15 + 7x7.txt | 19 + 8x8.txt | 24 ++ __MACOSX/._2x2.txt | Bin 0 -> 285 bytes __MACOSX/._3x3.txt | Bin 0 -> 285 bytes __MACOSX/._4x4.txt | Bin 0 -> 284 bytes __MACOSX/._4x4_divdiff.txt | Bin 0 -> 285 bytes __MACOSX/._5x5.txt | Bin 0 -> 285 bytes __MACOSX/._6x6.txt | Bin 0 -> 285 bytes __MACOSX/._7x7.txt | Bin 0 -> 284 bytes __MACOSX/._8x8.txt | Bin 0 -> 285 bytes __MACOSX/._example.txt | Bin 0 -> 177 bytes bin/coursework/ConstraintsHandler.class | Bin 5458 -> 5352 bytes bin/coursework/Main.class | Bin 29947 -> 32893 bytes bin/coursework/Solver.class | Bin 3748 -> 0 bytes example.txt | 15 + instructions.docx | Bin 0 -> 20689 bytes src/coursework/ConstraintsHandler.java | 6 +- src/coursework/Main.java | 530 ++++++++++++++++-------- src/coursework/RandomGenerator.java | 10 - src/coursework/Solver.java | 137 ------ 26 files changed, 455 insertions(+), 329 deletions(-) create mode 100644 2x2.txt create mode 100644 3x3.txt create mode 100644 4x4.txt create mode 100644 4x4_divdiff.txt create mode 100644 5x5.txt create mode 100644 6x6.txt create mode 100644 7x7.txt create mode 100644 8x8.txt create mode 100644 __MACOSX/._2x2.txt create mode 100644 __MACOSX/._3x3.txt create mode 100644 __MACOSX/._4x4.txt create mode 100644 __MACOSX/._4x4_divdiff.txt create mode 100644 __MACOSX/._5x5.txt create mode 100644 __MACOSX/._6x6.txt create mode 100644 __MACOSX/._7x7.txt create mode 100644 __MACOSX/._8x8.txt create mode 100644 __MACOSX/._example.txt delete mode 100644 bin/coursework/Solver.class create mode 100644 example.txt create mode 100644 instructions.docx delete mode 100644 src/coursework/Solver.java diff --git a/2x2.txt b/2x2.txt new file mode 100644 index 0000000..a160185 --- /dev/null +++ b/2x2.txt @@ -0,0 +1,2 @@ +1 1 +5+ 2,3,4 \ No newline at end of file diff --git a/3x3.txt b/3x3.txt new file mode 100644 index 0000000..0124649 --- /dev/null +++ b/3x3.txt @@ -0,0 +1,4 @@ +6x 1,4 +6+ 2,3,6 +3x 5,7,8 +2 9 \ No newline at end of file diff --git a/4x4.txt b/4x4.txt new file mode 100644 index 0000000..8786526 --- /dev/null +++ b/4x4.txt @@ -0,0 +1,6 @@ +10+ 1,2,5 +4+ 3,7 +2÷ 4,8 +24x 6,10,11 +3x 9,13,14 +24x 12,15,16 \ No newline at end of file diff --git a/4x4_divdiff.txt b/4x4_divdiff.txt new file mode 100644 index 0000000..4b8227d --- /dev/null +++ b/4x4_divdiff.txt @@ -0,0 +1,6 @@ +2 1 +72x 2,5,6,7 +2- 3,4,8 +2÷ 9,13,14 +3x 10,11 +24x 12,15,16 \ No newline at end of file diff --git a/5x5.txt b/5x5.txt new file mode 100644 index 0000000..951031d --- /dev/null +++ b/5x5.txt @@ -0,0 +1,10 @@ +9+ 1,6 +1- 2,7 +2- 3,4 +7+ 5,9,10,15 +4 8 +12x 11,16,17 +7+ 12,13 +9+ 14,18,19 +100x 20,24,25 +6+ 21,22,23 \ No newline at end of file diff --git a/6x6.txt b/6x6.txt new file mode 100644 index 0000000..9fb2459 --- /dev/null +++ b/6x6.txt @@ -0,0 +1,15 @@ +48x 1,7,8,13 +11+ 2,3 +1- 4,5 +18x 6,12 +72x 9,15,16,21 +60x 10,11,17 +6x 14,20 +11+ 18,23,24 +7+ 19,25 +8x 22,27,28 +3 26 +13+ 29,34,35 +2÷ 30,36 +3 31 +9+ 32,33 \ No newline at end of file diff --git a/7x7.txt b/7x7.txt new file mode 100644 index 0000000..1cce200 --- /dev/null +++ b/7x7.txt @@ -0,0 +1,19 @@ +6x 1,2 +112x 3,9,10 +7 4 +18x 5,6,13 +13+ 7,14,21 +1- 8,15 +8+ 11,12 +18+ 16,22,23 +6+ 17,18,25 +3- 19,20 +20+ 24,30,31,32,38 +10+ 26,33,40 +4 27 +14+ 28,34,35 +10+ 29,36,37 +24x 39,45,46 +14+ 41,47,48 +12x 42,49 +7+ 43,44 \ No newline at end of file diff --git a/8x8.txt b/8x8.txt new file mode 100644 index 0000000..31a103e --- /dev/null +++ b/8x8.txt @@ -0,0 +1,24 @@ +8 1 +14x 2,10,11 +12x 3,4 +19+ 5,6,7,14 +2 8 +210x 9,17,18,25 +12x 12,19,20 +4 13 +480x 15,22,23,31 +192x 16,24,32 +432x 21,28,29,30,37 +12+ 26,27 +17+ 33,34,41 +70x 35,36,44 +8x 38,46 +10+ 39,40,48 +19+ 42,49,50,51 +8 43 +23+ 45,52,53,54 +2÷ 47,55 +35x 56,64 +3- 57,58 +14+ 59,60 +30x 61,62,63 diff --git a/__MACOSX/._2x2.txt b/__MACOSX/._2x2.txt new file mode 100644 index 0000000000000000000000000000000000000000..42c46acfca90295772f380a3264d88bdf2e42cb0 GIT binary patch literal 285 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3Cj$e65d#CmYX$}opHY^9DBu_p5(H5Q*71aa zfx!~Ohm*_<3=AM~eg+2d<osN{#DapHRK1YYiW1kn<ouM(ymW}t&kPI<0t^gN2sJs0 z#U-W1sVOOmC8^2*!4PGPAoHXc7=%FTQi}2mlJYC`5=%;oib3+BA#S=B)`rF=Muz5= r7A7nA%!~sGpO|i^0HV2sxCD~a6r7(ci#mY#49s5P0u$TTUttFT3Ry3b literal 0 HcmV?d00001 diff --git a/__MACOSX/._3x3.txt b/__MACOSX/._3x3.txt new file mode 100644 index 0000000000000000000000000000000000000000..976d7f6e53b6a757e53b5b4952a34d6698f75863 GIT binary patch literal 285 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3Cj$e65d#CmYX$}opHY^9DBu_p5(H5Q*71aa zfx!~Ohm*_<3=AM~eg+2d<osN{#DapHRK1YYiW1kn<ouM(ymW}t&kPI<0t^gN2sJs0 z#U-W1sVOOmC8^2*!4PGPAoHXc7=%FTQi}2mlJYC`5=%;oib3+BA#S=B)`rF=Muz5= r7AE`m%!~sGTfFU+2hm(YTmngI3eL}!MIAtV24=4qftg#Myy61@5rr^H literal 0 HcmV?d00001 diff --git a/__MACOSX/._4x4.txt b/__MACOSX/._4x4.txt new file mode 100644 index 0000000000000000000000000000000000000000..611c692c0f536f8ceea999f8ed3aeeecc69e2208 GIT binary patch literal 284 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3Cj$e65d#CmD+UG-pHYT^DBu_p5(H5Q*71aa zfx!a8hm*_<3=AM~eg+2d<osN{#DapHRK1YYiW1kn<ouM(ymW}t&kPI<0t^gN2sJs0 z#U-W1sVOOmC8^2*!4PGPAoC;{7=%FTQi}2mlJYC`5=%;oib3+BA#S=B)`rF=Muz5= q7AC*;%!~sGZ@6Ej1fscwxCD~a6r7(ci#mY#49s3}0$ab|l>z|sA23w_ literal 0 HcmV?d00001 diff --git a/__MACOSX/._4x4_divdiff.txt b/__MACOSX/._4x4_divdiff.txt new file mode 100644 index 0000000000000000000000000000000000000000..68c0f7762cd46549970d8f898d057867dd145a99 GIT binary patch literal 285 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3Cj$e65d#CmYX$}opHY^9DBu_p5(H5Q*71aa zfx!~Ohm*_<3=AM~eg+2d<osN{#DapHRK1YYiW1kn<ouM(ymW}t&kPI<0t^gN2sJs0 z#U-W1sVOOmC8^2*!4PGPAoHXc7=%FTQi}2mlJYC`5=%;oib3+BA#S=B)`rF=Muz5= r7A8)6XU2hq6ZGfmf@m%wE`cO91?T6=q7EQF1G87Oz^-}UX0ihS?Qky{ literal 0 HcmV?d00001 diff --git a/__MACOSX/._5x5.txt b/__MACOSX/._5x5.txt new file mode 100644 index 0000000000000000000000000000000000000000..363387bf316536769785f6e912114dec9e9a65b5 GIT binary patch literal 285 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3Cj$e65d#CmYX$}opHY^9DBu_p5(H5Q*71aa zfx!~Ohm*_<3=AM~eg+2d<osN{#DapHRK1YYiW1kn<ouM(ymW}t&kPI<0t^gN2sJs0 z#U-W1sVOOmC8^2*!4PGPAoHXc7=%FTQi}2mlJYC`5=%;oib3+BA#S=B)`rF=Muz5= q7A6UMXU2hqEm#gqf@m%wE`cO91?T6=q7EQF1G87GK>w8=mpB3HUN1lZ literal 0 HcmV?d00001 diff --git a/__MACOSX/._6x6.txt b/__MACOSX/._6x6.txt new file mode 100644 index 0000000000000000000000000000000000000000..31de9f1fb13e6e6a59b8a4dd8e39846abee3c039 GIT binary patch literal 285 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3Cj$e65d#CmYX$}opHY^9DBu_p5(H5Q*71aa zfx!~Ohm*_<3=AM~eg+2d<osN{#DapHRK1YYiW1kn<ouM(ymW}t&kPI<0t^gN2sJs0 z#U-W1sVOOmC8^2*!4PGPAoHXc7=%FTQi}2mlJYC`5=%;oib3+BA#S=B)`rF=Muz5= r7AEue&Wr;ID+oVk0?}MTTmngI3eL}!MIAtV24=4afrh=8FY*BZ^K>sW literal 0 HcmV?d00001 diff --git a/__MACOSX/._7x7.txt b/__MACOSX/._7x7.txt new file mode 100644 index 0000000000000000000000000000000000000000..58a293503ed04e525ce76d5388b757152b36b595 GIT binary patch literal 284 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3Cj$e65d#CmD+UG-pHYT^DBu_p5(H5Q*71aa zfx!a8hm*_<3=AM~eg+2d<osN{#DapHRK1YYiW1kn<ouM(ymW}t&kPI<0t^gN2sJs0 z#U-W1sVOOmC8^2*!4PGPAoC;{7=%FTQi}2mlJYC`5=%;oib3+BA#S=B)`rF=Muz5= q7AF7q&Wr;Izxek-7({akaS0@;DL6k@7Igse8JNAI1lIh2r3e5Ez%eKQ literal 0 HcmV?d00001 diff --git a/__MACOSX/._8x8.txt b/__MACOSX/._8x8.txt new file mode 100644 index 0000000000000000000000000000000000000000..e11d18f5c5c4ac57152a1a64e1fcca1c48663b56 GIT binary patch literal 285 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3Cj$e65d#CmYX$}opHY^9DBu_p5(H5Q*71aa zfx!~Ohm*_<3=AM~eg+2d<osN{#DapHRK1YYiW1kn<ouM(ymW}t&kPI<0t^gN2sJs0 z#U-W1sVOOmC8^2*!4PGPAoHXc7=%FTQi}2mlJYC`5=%;oib3+BA#S=B)`rF=Muz5= r7A6(@X2yYpSFA8p2GLwXTmngI3eL}!MIAtV24=5FfoXTnzvKh}0a`EK literal 0 HcmV?d00001 diff --git a/__MACOSX/._example.txt b/__MACOSX/._example.txt new file mode 100644 index 0000000000000000000000000000000000000000..d6d879cd142c9d26e6288a613b62f8fe7452201e GIT binary patch literal 177 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3Cj$e65d#B5Jp%)nzmb6`;207T1XT#qF@u4D zK@!S`QH%@>3{Y{Q<osN{l%o8Cr2GoK#FCPtVvr&(AufR=H3jGA%AyV+J_EB?m_YmU G%{c%!8x+R? literal 0 HcmV?d00001 diff --git a/bin/coursework/ConstraintsHandler.class b/bin/coursework/ConstraintsHandler.class index 1dcc198f9f50cec7a6778bde2872599103f25065..7a534da6f3ea82d122bf6ef01a70e4d0fc5acff5 100644 GIT binary patch delta 300 zcmcbl^+J>D)W2Q(7#J8#7_M#P66R3gWH`)ll%3%SBZELzVp*boPGVlVesE=RNop<+ z!!d^AlP7Q}$e(05&CYO&kwF-&Br{(>peQr1B)Fs~H8Gcm;mqXo9I=cSH|ugrbH#Zu zFfxcTFffENFfuSQFffQ|ZD;V-+Rm_NCIgSwc82{k8CY4?Ft1@?U|?p@VPIeoVqjrl zV3@?f!Z4XZh+ztY2*Wf6T?PgQ9*AxRJqCRS28K+qdPb4Sdxa&~4hfZRV>mJSws4yC zS%z~Aj9^(22Il_^VhpV8AbT0v8O~3R5t+?>f#D(pBZE2vJHw^POrmO9ml+w^8Ppj- d<Yfj1UZ(#HoCq!I3=9m63|AN!7?>EY0sxilLEHcU delta 438 zcmaE%c}a`w)W2Q(7#J8#818N466UC9XE@BrAd;M4T2!1`o?n!$@0gdFn^=;WpU1^; zh(R1g9OGd)&LG0bz?7cP$iSHhlV@ZQ^TDRinv>x)!&!EQGmH!ZS&3zd`Z<Yt>H5Ky z#U-h^JPhX;&NDJF=a-f+GKl(QB~JF_5Rt#gaG9Oq5+j2!Sb1i?en3%XUP*9CQEFl? z55twoH5{>wH#gtnkmjlvVPIqsWnf^)VPIllVqjp9*V@kDt+kzD&rAj}t?dl^XEN~b zW;hhNo#BX&_BMv28yOfFm>F~!7#PGDSQ!`?CNZ!uOlA;bn8F~%FqJ`$VLF2@SPpCy zgC2uE0|SE;0}I0mhLa4844GivjB*T24Eq>7KsJjoFfdGIU;>+EyouqIQ0X>?3zG|l z)1<F5T!ZQmVPO6bvW}gBk%5tso#FcAPr|dgZ!p|sU}R8dU}v~Bd4`CZ)@_iKI#|JN d1_oZH{|uZAtS~L=3=9m640jk97?>FD0sz*dXnOzv diff --git a/bin/coursework/Main.class b/bin/coursework/Main.class index ad335423a42f6e1153dad4b17f07b9fe36756ed1..027176c92ec43dbf9ae7bffae3c76c8e7c31dee8 100644 GIT binary patch literal 32893 zcmX^0Z`VEs1_l#W6LtnBMh5=m{L-T0)bjkIY<=Iv%sh4m7DfiSti-a!v<m&if`XjP z<iwK9{5*X}1e=k8(T|aV(UXyZwKzF7FO`u�RPa%-0VFiCTlCOA^yjq(OZBU=V4| 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 TGbykdIY=^HXS&F0%peH>lzu=z literal 29947 zcmX^0Z`VEs1_l#WUUmj1Mh5=m{L-T0)bjkIY<=Iv%sh4m7DfiSti-a!v<m&if`XjP z<iwK9{5*X}1e=k8(T|aV(UXyZwKzF7FO`u�RPa%-0VFiCTlCOA^yjq(OZBU=V4| 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	YwiNor!QH5b!2rXTD~-=Wnu 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 F0swB=XfXf) diff --git a/bin/coursework/Solver.class b/bin/coursework/Solver.class deleted file mode 100644 index 3f53a100d0f959129e4ecbda2c6aa57da6713928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3748 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 diff --git a/example.txt b/example.txt new file mode 100644 index 0000000..6db4b91 --- /dev/null +++ b/example.txt @@ -0,0 +1,15 @@ +11+ 1,7 +2÷ 2,3 +20x 4,10 +6x 5,6,12,18 +3- 8,9 +3÷ 11,17 +240x 13,14,19,20 +6x 15,16 +6x 21,27 +7+ 22,28,29 +30x 23,24 +6x 25,26 +9+ 30,36 +8+ 31,32,33 +2÷ 34,35 \ No newline at end of file diff --git a/instructions.docx b/instructions.docx new file mode 100644 index 0000000000000000000000000000000000000000..5522b0a58148cc3b040ad997a30b7500912f6c79 GIT binary patch literal 20689 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 K85nl?f_MO-DoQE< literal 0 HcmV?d00001 diff --git a/src/coursework/ConstraintsHandler.java b/src/coursework/ConstraintsHandler.java index 15940de..ba95450 100644 --- a/src/coursework/ConstraintsHandler.java +++ b/src/coursework/ConstraintsHandler.java @@ -142,12 +142,12 @@ public class ConstraintsHandler { } } - public void checkWinCondition() { + public boolean checkWinCondition() { updateData(); if (checkCellsFull() && checkConstraintErrors()) { - Animation animation = new Animation(); - animation.go(); + return true; } + return false; } private boolean checkCellsFull() { diff --git a/src/coursework/Main.java b/src/coursework/Main.java index cbb2058..21e2436 100644 --- a/src/coursework/Main.java +++ b/src/coursework/Main.java @@ -22,12 +22,10 @@ import javafx.scene.control.ButtonType; import javafx.scene.control.CheckBox; import javafx.scene.control.Label; import javafx.scene.control.RadioButton; -import javafx.scene.control.Slider; import javafx.scene.control.TextArea; import javafx.scene.control.TextField; import javafx.scene.control.ToggleGroup; import javafx.scene.input.MouseEvent; -import javafx.scene.layout.BorderPane; import javafx.scene.layout.GridPane; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; @@ -58,10 +56,10 @@ public class Main extends Application { private static boolean clearing = false; private static boolean undoing = false; private int fontSize; - private ConstraintsHandler constraints = new ConstraintsHandler(); + private static ConstraintsHandler constraints; - private Stack<GameState> undoStack = new Stack<GameState>(); - private Stack<GameState> redoStack = new Stack<GameState>(); + private static Stack<GameState> undoStack; + private static Stack<GameState> redoStack; private Button undoButton; private Button redoButton; @@ -96,7 +94,7 @@ public class Main extends Application { } // //////////////////////////////////////////////////////////////////////////////// - private GridPane setupGrid(int width, int height) { + private GridPane setupGrid(double width, double height) { GridPane gridPane = new GridPane(); gridPane.setAlignment(Pos.CENTER); double value = width < height ? width : height; @@ -172,36 +170,38 @@ public class Main extends Application { private HBox setupTopHBox() { HBox topHBox = new HBox(); - topHBox.setAlignment(Pos.BOTTOM_CENTER); - topHBox.setSpacing(10); + topHBox.setAlignment(Pos.BOTTOM_LEFT); + topHBox.setSpacing(6); Button loadGameFileButton = new Button("Load Game - File"); - CheckBox showMistakesCheck = new CheckBox("Show mistakes"); - showMistakesCheck.setMinWidth(showMistakesCheck.getPrefWidth()); - if (showMistakes) { - showMistakesCheck.setSelected(true); - } + loadGameFileButton.setPrefWidth(140); + loadGameFileButton.setPrefHeight(30); + loadGameFileButton.setStyle("-fx-font-size:14px;"); + Button loadGameTextInputButton = new Button("Load Game - Text"); - loadGameFileButton.setPrefWidth(120); + loadGameTextInputButton.setStyle("-fx-font-size:14px;"); loadGameTextInputButton.setPrefWidth(loadGameFileButton.getPrefWidth()); + loadGameTextInputButton.setPrefHeight(loadGameFileButton.getPrefHeight()); - Button generateRandomGameButton = new Button("Generate Random\nGame"); - generateRandomGameButton.setPrefWidth(loadGameFileButton.getPrefWidth()); - generateRandomGameButton.setPrefHeight(60); - generateRandomGameButton.setStyle("-fx-text-alignment:center;"); + Button generateRandomGameButton = new Button("Generate\nRandom Game"); + generateRandomGameButton.setPrefWidth(loadGameFileButton.getPrefWidth() - 20); + generateRandomGameButton.setPrefHeight((loadGameFileButton.getPrefHeight() * 2) + 5); + generateRandomGameButton.setStyle("-fx-text-alignment:center; -fx-font-size:14px;"); VBox leftVBox = new VBox(); leftVBox.setSpacing(5); + leftVBox.setAlignment(Pos.BOTTOM_CENTER); leftVBox.getChildren().addAll(loadGameFileButton, loadGameTextInputButton); -// VBox rightVBox = new VBox(); -// rightVBox.setSpacing(5); -// rightVBox.getChildren().addAll(, generateRandomGameButton); -// - topHBox.getChildren().addAll(leftVBox, showMistakesCheck, generateRandomGameButton); + Button changeFontSizeButton = new Button("Font\nSize"); + changeFontSizeButton.setStyle("-fx-font-size:14px; -fx-text-alignment: center;"); + changeFontSizeButton.setPrefHeight((loadGameFileButton.getPrefHeight() * 2) + 5); + changeFontSizeButton.setPrefWidth(60); - showMistakesCheck.selectedProperty().addListener((obs, oldVal, newVal) -> { - showMistakesCheckEvent(showMistakesCheck); + topHBox.getChildren().addAll(leftVBox, generateRandomGameButton, changeFontSizeButton); + + changeFontSizeButton.setOnAction(e -> { + changeFontSizePopup(); }); loadGameFileButton.setOnAction(e -> { @@ -226,7 +226,11 @@ public class Main extends Application { } } - private HBox setupBottomHBox() { + private VBox setupBottomHBox() { + VBox vbox = new VBox(); + vbox.setAlignment(Pos.CENTER); + vbox.setSpacing(10); + HBox bottomHBox = new HBox(); bottomHBox.setSpacing(10); bottomHBox.setAlignment(Pos.TOP_CENTER); @@ -234,7 +238,9 @@ public class Main extends Application { // undoButton = new Button("", new ImageView(new Image("file:Images/undo_icon.png"))); // redoButton = new Button("", new ImageView(new Image("file:Images/redo_icon.png"))); undoButton = new Button("Undo"); + undoButton.setStyle("-fx-font-size:14px;"); redoButton = new Button("Redo"); + redoButton.setStyle("-fx-font-size:14px;"); Button clearButton = new Button("Clear"); undoButton.setOnAction(e -> { undoButtonClickEvent(); @@ -245,81 +251,151 @@ public class Main extends Application { undoButton.setDisable(true); redoButton.setDisable(true); - clearButton.setPrefSize(100, 36); - undoButton.setPrefSize(80, 36); - redoButton.setPrefSize(80, 36); + clearButton.setStyle("-fx-font-size:14px;"); + clearButton.setPrefWidth(100); clearButtonClickEvent(clearButton); bottomHBox.getChildren().addAll(undoButton, clearButton, redoButton); - return bottomHBox; + + CheckBox showMistakesCheck = new CheckBox("Show mistakes"); + showMistakesCheck.setMinWidth(showMistakesCheck.getPrefWidth()); + showMistakesCheck.setStyle("-fx-font-size:14px;"); + if (showMistakes) { + showMistakesCheck.setSelected(true); + } + + showMistakesCheck.selectedProperty().addListener((obs, oldVal, newVal) -> { + showMistakesCheckEvent(showMistakesCheck); + }); + + vbox.getChildren().addAll(bottomHBox, showMistakesCheck); + + return vbox; } private VBox setupNumbersVBox() { VBox vbox = new VBox(); - Button balanceButtonTop = new Button(""); - balanceButtonTop.setPrefWidth(111); - balanceButtonTop.setVisible(false); - Button balanceButtonBottom = new Button(""); - balanceButtonBottom.setPrefWidth(111); - balanceButtonBottom.setVisible(false); - vbox.getChildren().add(balanceButtonTop); +// Button balanceButtonTop = new Button(""); +// balanceButtonTop.setPrefWidth(111); +// balanceButtonTop.setMinWidth(111); +// balanceButtonTop.setVisible(false); +// Button balanceButtonBottom = new Button(""); +// balanceButtonBottom.setPrefWidth(111); +// balanceButtonBottom.setMinWidth(111); +// balanceButtonBottom.setVisible(false); + //vbox.getChildren().add(balanceButtonTop); for (int i = 1; i <= N; i++) { Button button = new Button(i + ""); final double WIDTH = 50; button.setPrefSize(WIDTH, WIDTH); button.setMaxSize(WIDTH, WIDTH); - button.setStyle("-fx-font-size:"+18+"pt"); + button.setStyle("-fx-font-size:"+14+"pt"); button.setOnAction(e -> { numbersButtonClickEvent(button); }); vbox.getChildren().add(button); } - vbox.getChildren().add(balanceButtonBottom); - vbox.setSpacing(10); + //vbox.getChildren().add(balanceButtonBottom); + vbox.setSpacing(5); vbox.setAlignment(Pos.CENTER_LEFT); - vbox.setPadding(new Insets(10)); + vbox.setPadding(new Insets(0)); return vbox; } - private VBox setupFontSizeHBox() { - VBox vbox = new VBox(); - vbox.getChildren().addAll(setupButton("Tiny", 10, 71), setupButton("Small", 14, 81), setupButton("Medium", 18, 91), setupButton("Large", 22, 101), setupButton("Huge", 26, 111)); - vbox.setSpacing(15); + + private void changeFontSizePopup() { + Stage popupStage = new Stage(); + popupStage.initModality(Modality.APPLICATION_MODAL); + popupStage.initOwner(stage); + + VBox vbox = new VBox(); + + HBox hbox = new HBox(); + hbox.getChildren().addAll( + setupButton("Tiny", 10, 75, popupStage), + setupButton("Small", 14, 85, popupStage), + setupButton("Medium", 18, 95, popupStage), + setupButton("Large", 22, 105, popupStage), + setupButton("Huge", 26, 115, popupStage)); + hbox.setSpacing(10); + hbox.setAlignment(Pos.CENTER); + + Label headingLabel = new Label("Select font size:"); + headingLabel.setStyle("-fx-font-size: 18px;"); + vbox.setAlignment(Pos.CENTER); - vbox.setPadding(new Insets(10)); - return vbox; + vbox.getChildren().addAll(headingLabel, hbox); + + + popupStage.setScene(new Scene(vbox, 550, 110)); + popupStage.setTitle("Change font size"); + popupStage.show(); } - private Button setupButton(String name, int size, int width) { + private Button setupButton(String name, int size, int width, Stage popupStage) { Button button = new Button(name); button.setMinWidth(width); button.setPrefWidth(width); - button.setStyle("-fx-font-size:" + size + "px;"); button.setOnAction(e -> { - changeFontSizeEvent(size); + changeFontSizeEvent(size, popupStage); }); + if (fontSize == size) { + button.setStyle("-fx-font-size:" + size + "px; -fx-background-color: #99ddff; -fx-border-color: grey; fx-border-width: 1px; -fx-border-radius:3px;"); + } + else { + button.setStyle("-fx-font-size:" + size + "px;"); + } return button; } private void createNewCage(String line) { String[] splitLine = line.split(" "); - String[] shiftedIds = splitLine[1].split(","); - int[] ids = new int[shiftedIds.length]; - - for (int i = 0; i < shiftedIds.length; i++) { - ids[i] = Integer.parseInt(shiftedIds[i]) - 1; + if (splitLine.length < 2) { + Alert alert = new Alert(AlertType.WARNING); + alert.setContentText("The puzzle you have attempted to load is not in the correct format, please try again."); + alert.setTitle("Incorrect Format"); + alert.showAndWait(); + return; } - if (splitLine[0].contains("÷") || splitLine[0].contains("/")) { - splitLine[0] = splitLine[0].replace("÷", "�"); - } + int[] ids; + int value; + String operator; - int value = Integer.parseInt(splitLine[0].substring(0, splitLine[0].length()- 1)); - String operator = splitLine[0].substring(splitLine[0].length() - 1); + if (splitLine[1].contains(",")) { + String[] shiftedIds = splitLine[1].split(","); + ids = new int[shiftedIds.length]; + + for (int i = 0; i < shiftedIds.length; i++) { + ids[i] = Integer.parseInt(shiftedIds[i]) - 1; + } + + if (splitLine[0].contains("÷") || splitLine[0].contains("/")) { + splitLine[0] = splitLine[0].replace("÷", "�"); + } + + value = Integer.parseInt(splitLine[0].substring(0, splitLine[0].length()- 1)); + operator = splitLine[0].substring(splitLine[0].length() - 1); + } + else { + ids = new int[1]; + ids[0] = Integer.parseInt(splitLine[1]) - 1; + value = Integer.parseInt(splitLine[0]); + operator = ""; + } Cage cage = new Cage(ids, value, operator); gridCages.add(cage); + + System.out.print(value + operator + " "); + for (int i = 0; i < ids.length; i++) { + System.out.print(ids[i] + 1); + if (i < ids.length - 1) { + System.out.print(","); + } + } + System.out.print("\n"); } @@ -354,22 +430,7 @@ public class Main extends Application { } } } - - private Slider setupSlider() { - Slider slider = new Slider(2,8,1); - slider.setPrefWidth(150); - slider.setMaxWidth(150); - slider.setShowTickLabels(true); - slider.setShowTickMarks(true); - slider.setMinorTickCount(0); - slider.setMajorTickUnit(1); - slider.setBlockIncrement(1); - slider.setSnapToTicks(true); - slider.setValue(N); - slider.setPadding(new Insets(10, 0, 0, 0)); - return slider; - } - + /////////////////////////////////////////////////////////// private void generateRandomGameEvent() { Stage popupStage = new Stage(); @@ -381,10 +442,10 @@ public class Main extends Application { vbox.setAlignment(Pos.TOP_CENTER); HBox hboxBottom = new HBox(); - hboxBottom.setSpacing(86); + hboxBottom.setSpacing(100); hboxBottom.setPadding(new Insets(10)); - Slider slider = setupSlider(); + TextField textField = new TextField(); Button generateButton = new Button("Generate"); generateButton.setAlignment(Pos.TOP_RIGHT); @@ -395,7 +456,7 @@ public class Main extends Application { popupStage.hide(); }); - HBox hboxTop = new HBox(new Label("Size (NxN):"), slider); + HBox hboxTop = new HBox(new Label("Size (NxN):"), textField); hboxTop.setSpacing(3); hboxTop.setAlignment(Pos.CENTER); @@ -414,30 +475,51 @@ public class Main extends Application { hboxMiddle.getChildren().addAll(new Label("Difficulty:"), radioVBox); hboxBottom.getChildren().addAll(cancelButton, generateButton); + hboxBottom.setAlignment(Pos.CENTER); vbox.getChildren().addAll(hboxTop, hboxMiddle, hboxBottom); + vbox.setAlignment(Pos.CENTER); generateButton.setOnAction(e -> { - popupStage.close(); - N = (int) slider.getValue(); - resetGrid(); - int difficulty; - if (easy.isSelected()) { - difficulty = 1; + int textFieldValue = - 1; + try { + textFieldValue = Integer.parseInt(textField.getText()); } - else if (medium.isSelected()) { - difficulty = 2; + catch (NumberFormatException ex) { + Alert alert = new Alert(AlertType.WARNING); + alert.setContentText("The value for the board size to generate a puzzel is not valid, please try again."); + alert.setTitle("File Not Found"); + alert.showAndWait(); } - else if (hard.isSelected()) { - difficulty = 3; + if (textFieldValue > 0 && textFieldValue <= 10) { + N = textFieldValue; + popupStage.close(); + resetGrid(); + int difficulty; + if (easy.isSelected()) { + difficulty = 1; + } + else if (medium.isSelected()) { + difficulty = 2; + } + else if (hard.isSelected()) { + difficulty = 3; + } + else { + difficulty = 2; + } + RandomGenerator rg = new RandomGenerator(N, difficulty); + gridCages = rg.generate(); } - else { - difficulty = 2; + if (textFieldValue > 10) { + Alert alert = new Alert(AlertType.INFORMATION); + alert.setContentText("The maximum size is 10."); + alert.setTitle("Size Too Large"); + alert.showAndWait(); } - RandomGenerator rg = new RandomGenerator(N, difficulty); - gridCages = rg.generate(); }); - - popupStage.setScene(new Scene(vbox, 240, 170)); + popupStage.setMinHeight(200); + popupStage.setMinWidth(255); + popupStage.setScene(new Scene(vbox, 240, 160)); popupStage.show(); } @@ -452,34 +534,66 @@ public class Main extends Application { 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 (line.split(" ")[1].contains(",")) { + 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]; + } + } + } + else { + int value = Integer.parseInt(line.split(" ")[1]); + if (value > max) { + max = value; } } } - if (Math.sqrt(max) != N) { + if (Math.sqrt(max) != N && Math.sqrt(max) <= 10) { N = (int) Math.sqrt(max); resetGrid(); } - - for (String line : fileLines) { - createNewCage(line); + if (Math.sqrt(max) > 10) { + Alert alert = new Alert(AlertType.INFORMATION); + alert.setContentText("The maximum size is 10."); + alert.setTitle("Size Too Large"); + alert.showAndWait(); + } + else { + for (String line : fileLines) { + createNewCage(line); + } + file.close(); } - file.close(); } catch (FileNotFoundException e1) { - e1.printStackTrace(); + Alert alert = new Alert(AlertType.WARNING); + alert.setContentText("The file you have selected cannot be found, please try again."); + alert.setTitle("File Not Found"); + alert.showAndWait(); } catch (IOException e2) { - e2.printStackTrace(); + Alert alert = new Alert(AlertType.WARNING); + alert.setContentText("An error has occured when loading the file, please try again."); + alert.setTitle("File Loading Error"); + alert.showAndWait(); + } + catch (NullPointerException e3) { + Alert alert = new Alert(AlertType.WARNING); + alert.setContentText("You have not selected a file, please try again."); + alert.setTitle("No File Selected"); + alert.showAndWait(); + } + catch (NumberFormatException e4) { + Alert alert = new Alert(AlertType.WARNING); + alert.setContentText("The file you have selected is not in the correct format of a Mathdoku puzzle, please try again."); + alert.setTitle("Incorrect File Format"); + alert.showAndWait(); } - catch (NullPointerException e3) {} } @@ -493,15 +607,13 @@ public class Main extends Application { vbox.setSpacing(5); HBox hboxBottom = new HBox(); - hboxBottom.setSpacing(163); + hboxBottom.setSpacing(186); HBox hboxTop = new HBox(); hboxTop.setSpacing(5); hboxTop.setAlignment(Pos.CENTER); - Slider slider = setupSlider(); - TextArea textArea = new TextArea(); Button cancelButton = new Button("Cancel"); cancelButton.setAlignment(Pos.TOP_LEFT); @@ -511,25 +623,63 @@ 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("")) { - createNewCage(line); + try { + String[] lines = textArea.getText().split("\n"); + int max = -1; + for (String line : lines) { + if (line.split(" ")[1].contains(",")) { + 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]; + } + } + } + else { + int value = Integer.parseInt(line.split(" ")[1]); + if (value > max) { + max = value; + } + } + } + + if (Math.sqrt(max) != N && Math.sqrt(max) <= 10) { + N = (int) Math.sqrt(max); + resetGrid(); + } + + if (Math.sqrt(max) > 10) { + Alert alert = new Alert(AlertType.INFORMATION); + alert.setContentText("The maximum size is 10."); + alert.setTitle("Size Too Large"); + alert.showAndWait(); + } + else { + for (String line : lines) { + if (!line.equals(null) && !line.equals("")) { + createNewCage(line); + } + } + popupStage.hide(); } } - popupStage.hide(); + catch (NumberFormatException e4) { + Alert alert = new Alert(AlertType.WARNING); + alert.setContentText("The file you have selected is not in the correct format of a Mathdoku puzzle, please try again."); + alert.setTitle("Incorrect File Format"); + alert.showAndWait(); + popupStage.hide(); + } }); - Label sizeLabel = new Label("Size (NxN):"); - hboxTop.getChildren().addAll(sizeLabel, slider); hboxBottom.getChildren().addAll(cancelButton, loadButton); - vbox.getChildren().addAll(hboxTop, textArea, hboxBottom); + vbox.getChildren().addAll(textArea, hboxBottom); - popupStage.setScene(new Scene(vbox, 300, 300)); + popupStage.setScene(new Scene(vbox, 300, 200)); + popupStage.setMinHeight(220); + popupStage.setMinWidth(300); popupStage.show(); } @@ -568,7 +718,7 @@ public class Main extends Application { } } - private void numbersButtonClickEvent(Button button) { + private void numbersButtonClickEvent(Button button) { if (previousSquare != null) { for (int i = 0; i < gridSquares.length; i++) { if (previousSquare.equals(gridSquares[i])) { @@ -578,7 +728,7 @@ public class Main extends Application { } } - private void changeFontSizeEvent(int size) { + private void changeFontSizeEvent(int size, Stage popupStage) { fontSize = size; for (TextField textField : gridNumbers) { textField.setStyle("-fx-focus-color: transparent; -fx-text-box-border: transparent;" @@ -588,11 +738,14 @@ public class Main extends Application { for (Label label : cageLabels) { label.setStyle("-fx-font-size:" + size*0.9 + ";"); } + if (popupStage != null) { + popupStage.close(); + } } private void stageWidthResizeEvent(Stage stage, GridPane gridPane) { stage.widthProperty().addListener((obs, oldVal, newVal) -> { - if (newVal.doubleValue() < stage.getHeight()) { + if (newVal.doubleValue() - 0 < stage.getHeight()) { resizeGrid(); } }); @@ -600,16 +753,16 @@ public class Main extends Application { private void stageHeightResizeEvent(Stage stage, GridPane gridPane) { stage.heightProperty().addListener((obs, oldVal, newVal) -> { - if (newVal.doubleValue() < stage.getWidth()) { + if (newVal.doubleValue() < stage.getWidth() - 0) { resizeGrid(); } }); } public void resizeGrid() { - double width = scene.getWidth() - 200; - double height = scene.getHeight() - 150; - double newValue = height < width ? height : width; + double width = scene.getWidth() - 170; + double height = scene.getHeight() - 170; + double newValue = height < width ? height: width; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { Rectangle rectangle = gridSquares[i*N + j].getRectangle(); @@ -700,7 +853,10 @@ public class Main extends Application { } } constraints.checkConstraints(j, i, showMistakes);; - constraints.checkWinCondition(); + if (constraints.checkWinCondition()) { + Animation animation = new Animation(); + animation.go(); + } } private boolean lastOperationClear() { @@ -719,37 +875,40 @@ public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception { stage = primaryStage; - BorderPane borderPane = new BorderPane(); - int width = 350 + 80 * N; - int height = 275 + 80 * N; - - scene = new Scene(borderPane, width, height); - stage.setWidth(width); - stage.setHeight(height); - borderPane.setPadding(new Insets(20)); - GridPane gridPane = setupGrid(width - 200, height - 175); - undoStack.push(new GameState(GameState.getCurrentGameState(gridNumbers))); + GridPane gridPane = new GridPane(); + int size = N*80; + int extraWidth = 170; + int extraHeight = 170; - fontSize = 18; - changeFontSizeEvent(fontSize); + scene = new Scene(gridPane, size, size); + stage.setWidth(size + extraWidth); + stage.setHeight(size + extraHeight); + gridPane.setPadding(new Insets(20)); HBox topHBox = setupTopHBox(); - VBox fontSizeVBox = setupFontSizeHBox(); VBox numbersVBox = setupNumbersVBox(); - HBox bottomHBox = setupBottomHBox(); + VBox bottomHBox = setupBottomHBox(); + GridPane puzzleGrid = setupGrid(size, size); + undoStack.push(new GameState(GameState.getCurrentGameState(gridNumbers))); + + fontSize = 18; + changeFontSizeEvent(fontSize, null); - borderPane.setTop(topHBox); - borderPane.setLeft(fontSizeVBox); - borderPane.setRight(numbersVBox); - borderPane.setBottom(bottomHBox); - borderPane.setCenter(gridPane); + gridPane.add(topHBox, 0, 0, 2, 1); + gridPane.add(puzzleGrid, 0, 1); + gridPane.add(numbersVBox, 1, 1); + gridPane.add(bottomHBox, 0, 2); - stageWidthResizeEvent(stage, gridPane); - stageHeightResizeEvent(stage, gridPane); + gridPane.setVgap(10); + gridPane.setHgap(10); + gridPane.setAlignment(Pos.CENTER); + + stageWidthResizeEvent(stage, puzzleGrid); + stageHeightResizeEvent(stage, puzzleGrid); - stage.setMinWidth(width + 50); - stage.setMinHeight(height + 50); + stage.setMinWidth(size + extraWidth + 50); + stage.setMinHeight(size + extraHeight + 50); stage.setScene(scene); stage.setTitle("Mathdoku"); stage.show(); @@ -759,38 +918,48 @@ public class Main extends Application { private void resetGrid() { stage.close(); initialiseVariables(); - BorderPane borderPane = new BorderPane();; - int width = 350 + 80 * N; - int height = 275 + 80 * N; + GridPane gridPane = new GridPane();; - Stage newStage = new Stage(); - Scene newScene = new Scene(borderPane, width, height); - newStage.setWidth(width); - newStage.setHeight(height); - borderPane.setPadding(new Insets(20)); + int size = N*80; + int extraWidth = 170; + int extraHeight = 170; - GridPane gridPane = setupGrid(width - 200, height - 175); - undoStack.push(new GameState(GameState.getCurrentGameState(gridNumbers))); + if (N*80 + extraHeight + 50 > 1000) { + System.out.println("Here"); + size = (1000 - extraHeight); + } - fontSize = 18; - changeFontSizeEvent(fontSize); + Stage newStage = new Stage(); + Scene newScene = new Scene(gridPane, size + extraWidth, size + extraHeight); + newStage.setWidth(size + extraWidth + 50); + newStage.setHeight(size + extraHeight + 50); + gridPane.setPadding(new Insets(20)); HBox topHBox = setupTopHBox(); - VBox fontSizeVBox = setupFontSizeHBox(); VBox numbersVBox = setupNumbersVBox(); - HBox bottomHBox = setupBottomHBox(); + VBox bottomHBox = setupBottomHBox(); + GridPane puzzleGrid = setupGrid(size, size); + undoStack.push(new GameState(GameState.getCurrentGameState(gridNumbers))); + + fontSize = 18; + changeFontSizeEvent(fontSize, null); + + gridPane.add(topHBox, 0, 0, 2, 1); + gridPane.add(puzzleGrid, 0, 1); + gridPane.add(numbersVBox, 1, 1); + gridPane.add(bottomHBox, 0, 2); - borderPane.setTop(topHBox); - borderPane.setLeft(fontSizeVBox); - borderPane.setRight(numbersVBox); - borderPane.setBottom(bottomHBox); - borderPane.setCenter(gridPane); + gridPane.setVgap(10); + gridPane.setHgap(10); + gridPane.setAlignment(Pos.CENTER); - stageWidthResizeEvent(stage, gridPane); - stageHeightResizeEvent(stage, gridPane); + stageWidthResizeEvent(stage, puzzleGrid); + stageHeightResizeEvent(stage, puzzleGrid); - newStage.setMinWidth(width + 50); - newStage.setMinHeight(height + 50); + newStage.setMinWidth(size + extraWidth + 50); + newStage.setMinHeight(size + extraHeight + 50); + newStage.setMaxHeight(1000); + newStage.setMaxWidth(1200); newStage.setScene(newScene); newStage.setTitle("Mathdoku"); newStage.show(); @@ -810,6 +979,9 @@ public class Main extends Application { previousSquare = null; clearing = false; undoing = false; + undoStack = new Stack<GameState>(); + redoStack = new Stack<GameState>(); + constraints = new ConstraintsHandler(); } public static void main(String[] args) { diff --git a/src/coursework/RandomGenerator.java b/src/coursework/RandomGenerator.java index 7cda69e..6bc89c9 100644 --- a/src/coursework/RandomGenerator.java +++ b/src/coursework/RandomGenerator.java @@ -411,14 +411,4 @@ public class RandomGenerator { grid = temp; } -// private void output() { -// for (int i = 0; i < N; i++) { -// for (int j = 0; j < N; j++) { -// System.out.print(grid[i][j] + " "); -// } -// System.out.print("\n"); -// } -// System.out.print("\n"); -// } - } \ No newline at end of file diff --git a/src/coursework/Solver.java b/src/coursework/Solver.java deleted file mode 100644 index 58b843f..0000000 --- a/src/coursework/Solver.java +++ /dev/null @@ -1,137 +0,0 @@ -package coursework; - -import java.util.List; - -public class Solver { - - private int N; - private int[][] gridValues; // -1 = not possible | 1 = possible | 2 = definite - private List<Cage> gridCages; - - public Solver(int N, List<Cage> gridCages) { - this.N = N; - this.gridCages = gridCages; - gridValues = new int[N*N][N]; - } - - public void solvePuzzel() { - setDefaultValues(); - output(); - checkCageValues(); - } - - private void setDefaultValues() { - for (int i = 0; i < N*N; i++) { - for (int j = 0; j < N; j++) { - gridValues[i][j] = 1; // sets all values to possible - } - } - } - - private void checkCageValues() { - for (Cage cage : gridCages) { - int cageValue = cage.getCageValue(); - int length = cage.getCageIds().length; - - if (length == 1) { - gridValues[cage.getCageIds()[0]][cageValue - 1] = 2; - removePossibleValue(cage.getCageIds()[0], cageValue); - } - else { - String operator = cage.getCageOperator(); - int counter = 1; - switch (operator) { - case "+": - int[] possibleValues = new int[length]; - for (int i = 0; i < length; i++) { - possibleValues[i] = 1; - } - - while (valuesMultiplied(possibleValues) < Math.pow(N, length)) { - if (sumOfValues(possibleValues, cageValue)) { - for (int possibleVal : possibleValues) { - for (int id : cage.getCageIds()) { - gridValues[id][possibleVal - 1] = 1; - } - } - } - - - for (int j = 1; j <= counter; j++) { - - if (possibleValues[possibleValues.length - counter] == N) { - possibleValues[possibleValues.length - counter] = 0; - possibleValues[possibleValues.length - 2] += 1; - counter += 1; - } - - } - - - - - } - - break; - case "-": - - break; - case "x": - - break; - case "�": - - break; - } - } - } - } - - private boolean sumOfValues(int[] values, int cageValue) { - int sum = 0; - for (int value : values) { - sum += value; - } - return sum == cageValue; - } - - private int valuesMultiplied(int[] values) { - int result = 1; - for (int value : values) { - result *= value; - } - return result; - } - - private void removePossibleValue(int id, int cageValue) { - int row = (int) id / N; - int col = id % N; - - for (int i = 0; i < N; i++) { - if (i != col) - gridValues[row*N + i][cageValue - 1] = -1; - } - for (int i = 0; i < N; i++) { - if (i != row) - gridValues[i*N + col][cageValue - 1] = -1; - } - for (int i = 0; i < N; i++) { - if (i != cageValue - 1) - gridValues[id][i] = -1; - } - } - - private void output() { - for (int i = 0; i < N; i++) { - for (int j = 0; j < N; j++) { - System.out.print("["); - for (int k = 0; k < N; k++) { - System.out.print(gridValues[i*N + j][k]); - System.out.print(","); - } - System.out.print("], "); - } - System.out.print("\n"); - } - } -} -- GitLab