From c0daed351897646cc2d44a65dee085675ef13a9b Mon Sep 17 00:00:00 2001
From: Nimrod Abramovich <grumpydormin@gmail.com>
Date: Sun, 15 Mar 2020 21:27:26 +0000
Subject: [PATCH] animation completed

---
 bin/coursework/Animation.class          | Bin 5755 -> 8298 bytes
 bin/coursework/Cage.class               | Bin 5207 -> 5207 bytes
 bin/coursework/ConstraintsHandler.class | Bin 5376 -> 5376 bytes
 bin/coursework/GameState.class          | Bin 871 -> 871 bytes
 bin/coursework/Main.class               | Bin 24444 -> 24331 bytes
 src/coursework/Animation.java           | 109 +++++++++++++++++-------
 src/coursework/Main.java                |  38 +++++++--
 7 files changed, 113 insertions(+), 34 deletions(-)

diff --git a/bin/coursework/Animation.class b/bin/coursework/Animation.class
index ea9fd11221e9b362801b9cf1f759bb0931b3b95c..c2bb568060dfc33acfe2ac65225322cbbea49b6d 100644
GIT binary patch
delta 4341
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

delta 1781
zcmaFm@LPxL)W2Q(7#J8#818Q5n#0Iu>}Fu#=C*ka<9@cu2RWOW*%^*bzQZNUcxdu3
zE@QUS3}@LH&P+DuR%brPaDH+u_XEaLlkIq9R4#HcFfv@>VOYqph@YL|vH-&(Mg|_w
zyu8#R=bXgi;?!bxhMSY?c(hn<Gcw3cZsd{UWMp9T$<NO&Etq_t=Yp&V0}BH$gDnF;
zg9n2EgD-<1LlA=yLpXydLmY$H<TJc+Mj{E@7_zmuG30M#U|?WkaAaU$kYiwHU|^7B
zU}2DA;9-zvP+^E+&}WEcux5y3uxCh^9K&a<u!n(}fti7UF^bt{IfFa1?Q#Z7Y1V>S
z43b(~7!0Ka*e0*%6OU!fU`dfl*}+h@lc9!*A-si&QAU7m;s4_;jEvGC#!fAe>g^2m
z+ZdV!*a~Jb<bX_5)?(q<&d{#K!m^#ATZ;+AmS&yLzzGom>1A8^{~pI=HGW&&a*zf&
zs0Jp41}!ifs`fENo@4S9{*wA+23Cd?1}=tF1_6dN24#kH1~rCE23v*{1~-Oe27iV;
zh6IKJhE#?^hHQo+hC+s7hH{1yh8l)ah9-srhAxImh8~70hDi+73^N#N80In5GAv}M
zXIR3}z_5y;kzoTv6T@bPW`>;%Ee!h^S{V*8)H57oXlFRd(8X|$p_}1K5<?HeErwo(
z2Mm1-&ltKG-Z4yI_`)!W;TywbhCd8b7?~KRGIB6XXXIv>!N|ujlTn0W7NZoyY(`mz
zIgH8-a~U-mrZeg>%x5%YSioq`u#nM~VF_a-!%_w(1_lNXP`oilO@1jL>#4yook4(s
zk)emdia`*}I?bRA75m2E4i%fhz`&ryAoz!YmGKV)3!}6c(=P@NX&ELt*<TE7AQ36W
z$^L@Qj4LKj7K~(MoBUQ#g?B9jE5kYlC5E*OS_~T|%L#SyZed_$*vcT!u!TXLVf*B*
zLY`c#z6`7kybKJ?2Pbm~TQRCkb{5{N%yg2?R)!_TPF8>|LpH&T1w_jvn6b)0_-rx)
zY?Dnzl*F{QFzD=C#Na8(5oyJ<&y1VdjB7cA$>e+y`N<PRB<fFVZDBBHNtwr_3Sxj2
zvm`8H64%<oU@ywTl47)*VR59;((Me(L2@89EGb6Y7*+|b+s3eJ8^eZe3|k;d1=vVZ
z3pH7l2%}k9CL2l!yJNSPl>~c1YQbi?U^j~m>L?=I#3sN7a+Dhmg9O+Th&PKJ>?TR<
zMzKRIlEx{U0M=cPDIW=n*o3VN=Afd88C(?2V^C*cV31+pVUT4IWRPQ!VvuLBV^Cno
zV~}O2Vo+gdVNhe3$)L_Kk3oas8iP8+a|SJjj|@5tzZmox{xBFYGB6l1axfS(3NV;3
zN-&r*DlnKaS~6HLx-!&TGDb02F*Y(-GIlfAGA?4UV?4`X&-jzUfk~agi7AM|nW>J!
zg=r0g8`E_LcV=b=4`xFKFXk8qZ{`jLALeZg5zGe|qQUvDih&1|)ES%^To@R@tep(I
z7#JD&7;?Zlj)`G5gAc<r1_1^phCfWZ7<PkL^^6Qm+ZgsR2rw`+axkr9*vlZmz``iN
zw2WaNg8&07qXg4DhW!iz3~Y=FOw$++FbFWPGg>m$G8|+$#K6HA#h}h`m_dMnlL3^4
z!x(t}FbFdKW{6?>#US*DL6Xtx7lZhJhC~Klb_Pavh9it%z|L@tfsqkJG8p{#XJBLC
zM3-gw&!ok`1QBIm;ACKCI1a8APB5HgU|`^3U}U(!z|3%o;VQ#5hU*Lr44~TS2E#3e
HI}DNlhUd2A

diff --git a/bin/coursework/Cage.class b/bin/coursework/Cage.class
index f93cf6cd92afb4721aa5581143ec6bcac4afbf0f..052d4186f6d4b83626024f7aaf7222bdaceaa13a 100644
GIT binary patch
delta 43
tcmcbvab07BwICzMWE(+sMvloTV6q29Zr&ou#l*&uV<RQNG5Lt_WB~u>3l#tW

delta 43
tcmcbvab07BwICzgWE(+sMz+Z*V6q29Zr&ou#l*&zV<RQNHu;F~WB~s73kd)K

diff --git a/bin/coursework/ConstraintsHandler.class b/bin/coursework/ConstraintsHandler.class
index 0a68b66c3ee4a187021e0e0b1082d8babf7d6818..bade47a38ad4369566460ba344b569c3d12da6f3 100644
GIT binary patch
delta 161
zcmZqBYS7xy%PHrumqBbRgM^lV!(Ildtqd|+yBXvnw=*bgWl+=-aM-+>Q;~_0WAa&U
zeMXMWf4R#TnK?3~Ctu*!VdU7nm{*;Vkz?~|zB)!ejtrRuBWC817A8g+0glPx0wsJL
j8PW+xEO4QlU?Gqy7MQANL6|DI&|Sfej1HUog$kJf3#%uG

delta 161
zcmZqBYS7xy%PFU_mqBbRgM^lV%3cPktqd|+yBXvnw=*bgWl+=-P}#hiQ;~_0ZSq-e
zeMYv;f4R#Tnb|U=Ctu*!VPxC9m{*;Vk!|y7zB)!ewhWmBBWC817A8g+0k+BE0wsKG
j8PW+xEO4QlU?Gqy7MQANL6|DI&|Sfej4GS^g$kJf)$S(!

diff --git a/bin/coursework/GameState.class b/bin/coursework/GameState.class
index 05a8e904dce51e954e51bf717fb058b235294275..8027a7087fee2b670d9c16a28a14d56c83fb11eb 100644
GIT binary patch
delta 13
UcmaFP_MC0QOD0B#$*-7d0V<FMvj6}9

delta 13
UcmaFP_MC0QOD0B@$*-7d0V)IqmjD0&

diff --git a/bin/coursework/Main.class b/bin/coursework/Main.class
index 0bac322ce29c478d59d85bef452194620b73f727..5b83beb2a97814918f935971184bb5dd7dce3c19 100644
GIT binary patch
delta 4643
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
O4w6g}OhGKJ43YpgdGKBU

delta 4752
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
Zlf|1sl1Y_GiN(i3k|}~Ih{cyd5&$763NHWv

diff --git a/src/coursework/Animation.java b/src/coursework/Animation.java
index cdf17e1..f3e9c9b 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 9c8ff2f..70ac3b2 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);
-- 
GitLab