From 4b4264b2d7eb8db41553ccd25965e8f486ee3974 Mon Sep 17 00:00:00 2001
From: Nimrod Abramovich <grumpydormin@gmail.com>
Date: Sun, 22 Mar 2020 10:21:09 +0000
Subject: [PATCH] changed N to be run argument

---
 bin/coursework/Animation.class          | Bin 8298 -> 8833 bytes
 bin/coursework/Cage.class               | Bin 5207 -> 5262 bytes
 bin/coursework/ConstraintsHandler.class | Bin 5376 -> 5458 bytes
 bin/coursework/GameState.class          | Bin 871 -> 952 bytes
 bin/coursework/Main.class               | Bin 24331 -> 24533 bytes
 src/coursework/Animation.java           |  84 ++++++++++++------------
 src/coursework/Cage.java                |  14 ++--
 src/coursework/ConstraintsHandler.java  |  36 +++++-----
 src/coursework/GameState.java           |   4 +-
 src/coursework/Main.java                |  29 ++++++--
 10 files changed, 95 insertions(+), 72 deletions(-)

diff --git a/bin/coursework/Animation.class b/bin/coursework/Animation.class
index c2bb568060dfc33acfe2ac65225322cbbea49b6d..4d61f7b250ee2567433b3817e00f91bddb71c632 100644
GIT binary patch
literal 8833
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
D6<hnK

literal 8298
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
W6T>ftKMemEBpLQF>}2@wAPE2=`c;nr

diff --git a/bin/coursework/Cage.class b/bin/coursework/Cage.class
index 052d4186f6d4b83626024f7aaf7222bdaceaa13a..4e07610a39165c13072741687aa69b631c7d6493 100644
GIT binary patch
literal 5262
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
W!%nb)kemyOUr?)(k>N4e`X>N!saCB3

literal 5207
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

diff --git a/bin/coursework/ConstraintsHandler.class b/bin/coursework/ConstraintsHandler.class
index bade47a38ad4369566460ba344b569c3d12da6f3..1dcc198f9f50cec7a6778bde2872599103f25065 100644
GIT binary patch
literal 5458
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

literal 5376
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

diff --git a/bin/coursework/GameState.class b/bin/coursework/GameState.class
index 8027a7087fee2b670d9c16a28a14d56c83fb11eb..f2191bde75af2628511e506635f2c9a30ca52de6 100644
GIT binary patch
delta 481
zcmaFPwu7DP)W2Q(7#J8#7z`$I8L=_?F)}cEPP7Ve=jCDGWZ+|DVAjwK<78lD5a3~8
zXW-ys5MmHvXAov&;7`skEh<he&o9c>_f5>q<6#hG5MyLuNlz{D1MBhx>5`Z@`v{}b
z<OD`hHWdanb_UhS)r`u_>I@o_7cxc)@&=bACTII57K9`w<)pGRa7^ZBQm<!X;9_89
zU}IolU;<gmz`(%Fz{tSKz{SAGz|FwG5Wv91z{J47AfUCKfk#VwD+B)y2Eok?;v2y_
zBpDbOgcw*D7#O%1SQxk&I2m{t_!)Q^q!<_&#31?@q#0xwKtKR&J|hDogDis_)O7uN
z29N*)1FO~+2L26jGuapzL3V=8;Q_N*q2_Qh$TKKFbvH4vFfcPPFsN)|5Z}Zgp0Srf
z(TCY~IRn48jFybiHU{P37A8g+?R^XXf7Aw<&CCFDuNVU>0|SEy12=;xgMb%<7=t8(
zD1#D%1lTeKh=B~63|b5f4BQNoP)GAJh%#t1urV+(=zu-T^p`<^ok5q8n}Lx*5A1Ax
E08vjk;s5{u

delta 417
zcmdnN{+x~L)W2Q(7#J8#7}O_n8BKKY6XfP$U}xZAWMJ0N4C7>AWZ;{4^N5TDBZELz
zVp*boPGVlVesD=qW?niMgA{`dJA?G(os7!NvJ7&Q?=wb<GI}yH@CKJ8CTII57K9`w
z<)pGRuub-4Qm<!ZU}9ipU}IolU}j)sU}xZ9U}WHAU|?`#U}9imU|`_V+RnhGrM;Db
zcOwG>0}}&30|Nse12Y2y11AFu0~Z4)12=;J0|SE?L^XpTgAfA<aDh!_WME_vW)Ojz
zsm}o7Gcd4fZDHWu05+~3WF8v>BiK}sIXqxCE7TlL22lnvsP0+@7O=hY0uFl_#C@1;
zmoxBd%V^0MZDWuOZee1S(cZW4|3__*xy)c^iZQS<Ffa%)urUZTa5IQ7h%g8<$TEn5
zovQ#biosZ(L4kpRfsH{D>Rt{8Q3gc@B?cx2WsvU~nEo<wvookLax*Y8sDhoW1^{9<
BFn0g|

diff --git a/bin/coursework/Main.class b/bin/coursework/Main.class
index 5b83beb2a97814918f935971184bb5dd7dce3c19..91322a5f64f24da6b9668f57097e6994f74b2337 100644
GIT binary patch
literal 24533
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

literal 24331
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
XnL(0Cl}U-k#X*uOf+>i_l|d2!cVfA7

diff --git a/src/coursework/Animation.java b/src/coursework/Animation.java
index f3e9c9b..c1f8c7d 100644
--- a/src/coursework/Animation.java
+++ b/src/coursework/Animation.java
@@ -11,6 +11,7 @@ import javafx.util.Duration;
 
 public class Animation {
 
+	private int N;
 	private VBox[] gridBoxes;
 	private String[] colors = {"#FF0000", "#FF7F00", "#FFFF00", "#00FF00", "#00FFFF", "#0000FF", "#462370", "#7F00FF", "rgba(255,0,0,0)"};
 	private Integer[] indexArray;
@@ -21,6 +22,7 @@ public class Animation {
 
 	public Animation() {
 		gridBoxes = Main.getGridBoxes();
+		N = Main.getN();
 	}
 	
 	public void go() {
@@ -30,7 +32,7 @@ public class Animation {
 			if (index != indexArray.length) {
 				for (int j = 0; j < colors.length; j++) {
 					if (index - j >= 0) {
-						if (indexArray[index - j] >= 0 && indexArray[index] - j <= Main.N*Main.N) {
+						if (indexArray[index - j] >= 0 && indexArray[index] - j <= N*N) {
 							gridBoxes[indexArray[index - j]].setStyle("-fx-background-color:"+colors[j]+";");
 						}
 					}
@@ -44,15 +46,15 @@ public class Animation {
 				count++;
 			}
 			if (count == 9) {
-				if (Main.N % 2 == 0  && colorIndex % 2 == 0 && colorIndex < 23 ) {
+				if (N % 2 == 0  && colorIndex % 2 == 0 && colorIndex < 23 ) {
 					//even
-					int maxCentre = Main.N / 2;
+					int maxCentre = N / 2;
 					int minCentre = maxCentre - 1;
 					
-					int topLeft = (minCentre * Main.N) + minCentre;
-					int topRight = (minCentre * Main.N) + maxCentre;
-					int botLeft = (maxCentre * Main.N) + minCentre;
-					int botRight = (maxCentre * Main.N + maxCentre);
+					int topLeft = (minCentre * N) + minCentre;
+					int topRight = (minCentre * N) + maxCentre;
+					int botLeft = (maxCentre * N) + minCentre;
+					int botRight = (maxCentre * N + maxCentre);
 					int[] gridIndicies = { topLeft, topRight, botLeft, botRight };
 					
 					if (colorIndex/2 < colors.length) {
@@ -60,37 +62,37 @@ public class Animation {
 							gridBoxes[gridIndex].setStyle("-fx-background-color:"+colors[colorIndex/2]+";");
 						}
 					}
-					if (colorIndex/2 - 1 > 0 && colorIndex/2 < colors.length + 1 && Main.N > 2) {						
-						int[] ringCombinations1 = {1, Main.N + 1, Main.N};
+					if (colorIndex/2 - 1 > 0 && colorIndex/2 < colors.length + 1 && N > 2) {						
+						int[] ringCombinations1 = {1, N + 1, 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};
+						int[] ringCombinations2 = {- 1, N - 1, 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};
+					if (colorIndex/2 - 2 > 0 && colorIndex/2 < colors.length + 2 && N > 4) {
+						int[] ringCombinations1 = {2, N + 2, 2*N + 2, 2*N + 1, 2*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};
+						int[] ringCombinations2 = {- 2, N - 2, 2*N - 2, 2*N - 1, 2*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};
+					if (colorIndex/2 - 3 > 0 && colorIndex/2 < colors.length + 3 && N > 6) {
+						int[] ringCombinations1 = {3, N + 3, 2*N + 3, 3*N + 3, 3*N + 2, 3*N + 1, 3*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};
+						int[] ringCombinations2 = {- 3, N - 3, 2*N - 3, 3*N - 3, 3*N - 2, 3*N - 1, 3*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]+";");
@@ -100,29 +102,29 @@ public class Animation {
 				}
 				else if (colorIndex % 2 == 0) {
 					//odd 
-					int centrePoint = (Main.N - 1) / 2;
-					int centre = (centrePoint * Main.N) + centrePoint;
+					int centrePoint = (N - 1) / 2;
+					int centre = (centrePoint * 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 };
+						int[] firstRing = {- 1 - N, - N, 1 - N, - 1, + 1, - 1 + N, N, 1 + 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 };
+					if (colorIndex/2 - 2 > 0 && colorIndex/2 < colors.length + 2 && N > 3) {
+						int[] secondRing = { -2*N - 2, - 2*N - 1, - 2*N, - 2*N + 1, - 2*N + 2, - N - 2, - N + 2, 2, -2, N - 2, N + 2,
+								2*N - 2, 2*N - 1, 2*N, 2*N + 1, 2*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};
+					if (colorIndex/2 - 3 > 0 && colorIndex/2 < colors.length + 3 && N > 5) {
+						int[] thirdRing = { -3*N - 3, - 3*N - 2, -3*N - 1, - 3*N, - 3*N + 1, - 3*N + 2, - 3*N + 3, - N - 3, - N + 3, 3, -3, N - 3,
+								N + 3, 2*N - 3, 2*N + 3, -2*N + 3, -2*N - 3, 3*N - 3, 3*N - 2, 3*N - 1, 3*N, 3*N + 1, 3*N + 2, 3*N + 3};
 						for (int ringVal : thirdRing) {
 							gridBoxes[centre + ringVal].setStyle("-fx-background-color:"+colors[colorIndex/2 - 3]+";");
 						}
@@ -147,29 +149,29 @@ public class Animation {
 	}
 		
 	private void initialiseIndex() {
-		for (int i = 0; i < Main.N; i++) {
-			for (int j = 0; j < Main.N; j++) {
+		for (int i = 0; i < N; i++) {
+			for (int j = 0; j < N; j++) {
 				if (i % 2 == 0) {
-					indexList.add(i*Main.N + j);
+					indexList.add(i*N + j);
 				}
 				else {
-					indexList.add((i+1) * Main.N - 1 - j);
+					indexList.add((i+1) * N - 1 - j);
 				}
 			}
 		}
 		
-		if (getPrevious(indexList) % Main.N == 0) {
+		if (getPrevious(indexList) % N == 0) {
 			// even n
-			for (int j = 0; j < Main.N / 2; j++) {
-				moveUpDown(1, Main.N - 1);
+			for (int j = 0; j < N / 2; j++) {
+				moveUpDown(1, N - 1);
 				moveLeftRight(1, 1);
-				moveUpDown(-1, Main.N - 1);
-				if (j != Main.N/2 - 1) {
+				moveUpDown(-1, N - 1);
+				if (j != N/2 - 1) {
 					moveLeftRight(1, 1);
 				}
 			}
 			
-			int count = Main.N - 1;
+			int count = N - 1;
 			moveLeftRight(-1, count);
 			moveUpDown(1, count);
 			moveLeftRight(1, count);
@@ -186,15 +188,15 @@ public class Animation {
 		}
 		else {
 			// odd n
-			for (int j = 0; j < Main.N / 2; j++) {
-				moveUpDown(1, Main.N - 1);
+			for (int j = 0; j < N / 2; j++) {
+				moveUpDown(1, N - 1);
 				moveLeftRight(-1, 1);
-				moveUpDown(-1, Main.N - 1);
+				moveUpDown(-1, N - 1);
 				moveLeftRight(-1, 1);
 			}
-			moveUpDown(1, Main.N - 1);
+			moveUpDown(1, N - 1);
 			
-			int count = Main.N - 1;
+			int count = N - 1;
 			moveLeftRight(1, count);
 			moveUpDown(-1, count);
 			moveLeftRight(-1, count);
@@ -222,7 +224,7 @@ public class Animation {
 	private void moveUpDown(int value, int n) {
 		// value == 1 to move up, value == -1 to move down
 		for (int i  = 0; i < n; i++) {
-			indexList.add(getPrevious(indexList) - Main.N*value);
+			indexList.add(getPrevious(indexList) - N*value);
 		}
 	}
 	
diff --git a/src/coursework/Cage.java b/src/coursework/Cage.java
index b2d1783..6d7ed6a 100644
--- a/src/coursework/Cage.java
+++ b/src/coursework/Cage.java
@@ -11,6 +11,7 @@ import javafx.scene.paint.Color;
 
 public class Cage {
 
+	private static int N;
 	private int[] squareIds;
 	private int value;
 	private String operator;
@@ -25,6 +26,7 @@ public class Cage {
 		this.gridSquares = Main.getGridSquares();
 		this.gridNumbers = Main.getGridNumbers();
 		this.cageLabels = Main.getCageLabels();
+		N = Main.getN();
 		buildCage();
 		setCageInfo();
 	}
@@ -150,16 +152,16 @@ public class Cage {
 					final double WIDTH = 2;
 					
 					if (rowDiff == -1 && colDiff == 0) {
-						gridSquares[aCoord[0]*Main.N + aCoord[1]].setRightStroke(WIDTH, Color.GREY);
+						gridSquares[aCoord[0]*N + aCoord[1]].setRightStroke(WIDTH, Color.GREY);
 					}
 					else if (rowDiff == 1 && colDiff == 0) {
-						gridSquares[aCoord[0]*Main.N + aCoord[1]].setLeftStroke(WIDTH, Color.GREY);
+						gridSquares[aCoord[0]*N + aCoord[1]].setLeftStroke(WIDTH, Color.GREY);
 					}
 					else if (rowDiff == 0 && colDiff == -1) {
-						gridSquares[aCoord[0]*Main.N + aCoord[1]].setBottomStroke(WIDTH, Color.GREY);
+						gridSquares[aCoord[0]*N + aCoord[1]].setBottomStroke(WIDTH, Color.GREY);
 					}
 					else if (rowDiff == 0 && colDiff == 1) {
-						gridSquares[aCoord[0]*Main.N + aCoord[1]].setTopStroke(WIDTH, Color.GREY);
+						gridSquares[aCoord[0]*N + aCoord[1]].setTopStroke(WIDTH, Color.GREY);
 					}
 				}
 			}
@@ -174,8 +176,8 @@ public class Cage {
 	}
 	
 	public static int[] idToCoord(int id) {
-		int row = id / Main.N;
-		int col = id % Main.N;
+		int row = id / N;
+		int col = id % N;
 		return new int[] {row, col};
 	}
 	
diff --git a/src/coursework/ConstraintsHandler.java b/src/coursework/ConstraintsHandler.java
index 989872b..15940de 100644
--- a/src/coursework/ConstraintsHandler.java
+++ b/src/coursework/ConstraintsHandler.java
@@ -8,10 +8,11 @@ import javafx.scene.layout.VBox;
 
 public class ConstraintsHandler {
 
-	private TextField[] gridNumbers = new TextField[Main.N*Main.N];
-	private VBox[] gridBoxes = new VBox[Main.N*Main.N];
+	private static int N;
+	private TextField[] gridNumbers = new TextField[N*N];
+	private VBox[] gridBoxes = new VBox[N*N];
 	private List<Cage> gridCages = new ArrayList<Cage>();
-	private boolean[][] gridErrors = new boolean[Main.N*Main.N][3];
+	private boolean[][] gridErrors = new boolean[N*N][3];
 	private boolean constraintChecked = false;	
 	
 	public ConstraintsHandler() {}
@@ -21,6 +22,7 @@ public class ConstraintsHandler {
 		gridBoxes = Main.getGridBoxes();
 		gridCages = Main.getGridCages();
 		gridErrors = Main.getGridErrors();
+		N = Main.getN();
 	}
 	
 	public boolean checked() {
@@ -49,8 +51,8 @@ public class ConstraintsHandler {
 		boolean repeat = false;
 		HashSet<String> rowValues = new HashSet<String>();
 		String number;
-		for (int i = 0; i < Main.N; i++) {
-			number = gridNumbers[row*Main.N + i].getText();
+		for (int i = 0; i < N; i++) {
+			number = gridNumbers[row*N + i].getText();
 			if (rowValues.contains(number) && !number.equals("")) {
 				repeat = true;
 			}
@@ -74,8 +76,8 @@ public class ConstraintsHandler {
 		boolean repeat = false;
 		HashSet<String> colValues = new HashSet<String>();
 		String number;
-		for (int i = 0; i < Main.N; i++) {
-			number = gridNumbers[i*Main.N + col].getText();
+		for (int i = 0; i < N; i++) {
+			number = gridNumbers[i*N + col].getText();
 			if (colValues.contains(number) && !number.equals("")) {
 				repeat = true;
 			}
@@ -91,7 +93,7 @@ public class ConstraintsHandler {
 			Cage searchCage = null;
 			for (Cage cage : gridCages) {
 				for (int id : cage.getCageIds()) {
-					if (id == (row*Main.N + col)) {
+					if (id == (row*N + col)) {
 						searchCage = cage;
 						break;
 					}
@@ -106,31 +108,31 @@ public class ConstraintsHandler {
 	}
 	
 	private void clearRow(int row) {
-		for (int i = 0; i < Main.N; i++) {
-			gridErrors[row*Main.N + i][0] = false;		
+		for (int i = 0; i < N; i++) {
+			gridErrors[row*N + i][0] = false;		
 		}
 	}
 	
 	private void clearColumn(int col) {
-		for (int i = 0; i < Main.N; i++) {
-			gridErrors[i*Main.N + col][1] = false;
+		for (int i = 0; i < N; i++) {
+			gridErrors[i*N + col][1] = false;
 		}
 	}
 	
 	private void highlightRow(int row) {
-		for (int i = 0; i < Main.N; i++) {
-			gridErrors[row*Main.N + i][0] = true;
+		for (int i = 0; i < N; i++) {
+			gridErrors[row*N + i][0] = true;
 		}
 	}
 	
 	private void highlightColumn(int col) {
-		for (int i = 0; i < Main.N; i++) {
-			gridErrors[i*Main.N + col][1] = true;
+		for (int i = 0; i < N; i++) {
+			gridErrors[i*N + col][1] = true;
 		}
 	}
 	
 	public void highlightCells(boolean showMistakes) {
-		for (int i = 0; i < Main.N*Main.N; i++) {
+		for (int i = 0; i < N*N; i++) {
 			if ((gridErrors[i][0] || gridErrors[i][1] || gridErrors[i][2]) && showMistakes) {
 				gridBoxes[i].setStyle("-fx-background-color: rgba(255,0,0,0.5);");
 			}
diff --git a/src/coursework/GameState.java b/src/coursework/GameState.java
index 092aa5e..e38448c 100644
--- a/src/coursework/GameState.java
+++ b/src/coursework/GameState.java
@@ -4,10 +4,12 @@ import javafx.scene.control.TextField;
 
 public class GameState {
 
+	private static int N;
 	private String[] gridValues;
 	
 	public GameState(String[] gridValues) {
 		this.gridValues = gridValues;
+		N = Main.getN();
 	}
 	
 	public String[] getGameState() {
@@ -15,7 +17,7 @@ public class GameState {
 	}
 	
 	public static String[] getCurrentGameState(TextField[] gridNumbers) {
-		String[] gridValues = new String[Main.N*Main.N];
+		String[] gridValues = new String[N*N];
 		for (int k = 0; k < gridValues.length; k++) {
 			gridValues[k] = gridNumbers[k].getText();
 		}
diff --git a/src/coursework/Main.java b/src/coursework/Main.java
index 70ac3b2..bc3a1da 100644
--- a/src/coursework/Main.java
+++ b/src/coursework/Main.java
@@ -36,17 +36,17 @@ import javafx.stage.Stage;
 
 public class Main extends Application {
 	
-	final static public int N = 8;
+	private static int N;
 	
 	private Scene scene;
 	private Stage stage;
 	
-	private static Square[] gridSquares = new Square[N*N];
-	private static TextField[] gridNumbers = new TextField[N*N];
-	private static Label[] cageLabels = new Label[N*N];
-	private static VBox[] gridBoxes = new VBox[N*N];
-	private static List<Cage> gridCages = new ArrayList<Cage>();
-	private static boolean[][] gridErrors = new boolean[N*N][3];
+	private static Square[] gridSquares;
+	private static TextField[] gridNumbers;
+	private static Label[] cageLabels;
+	private static VBox[] gridBoxes;
+	private static List<Cage> gridCages;
+	private static boolean[][] gridErrors;
 	
 	private static boolean showMistakes = false;
 	private Pane previousPane = null;
@@ -63,6 +63,10 @@ public class Main extends Application {
 	private Button redoButton;
 	
 	//////////////////////////////////////////////////////////////////////////////////
+	public static int getN() {
+		return N;
+	}
+	
 	public static Square[] getGridSquares() {
 		return gridSquares;
 	}
@@ -607,7 +611,18 @@ public class Main extends Application {
 		stage.show();
 	}
 	
+	private static void initialiseVariables() {
+		gridSquares = new Square[N*N];
+		gridNumbers = new TextField[N*N];
+		cageLabels = new Label[N*N];
+		gridBoxes = new VBox[N*N];
+		gridCages = new ArrayList<Cage>();
+		gridErrors = new boolean[N*N][3];
+	}
+	
 	public static void main(String[] args) {
+		N = Integer.parseInt(args[0]);
+		initialiseVariables();
 		launch(args);
 	}
 		
-- 
GitLab