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
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
TGbykdIY=^HXS&F0%peH>lzu=z

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