From 39ce81d82cbf069e14111aecfbb7957ee7257faa Mon Sep 17 00:00:00 2001
From: Nimrod Abramovich <grumpydormin@gmail.com>
Date: Wed, 26 Feb 2020 14:20:04 +0000
Subject: [PATCH] Cage updated to include info

---
 bin/coursework/Cage.class | Bin 1432 -> 2486 bytes
 bin/coursework/Main.class | Bin 10433 -> 11417 bytes
 src/coursework/Cage.java  |  51 ++++++++++++++++-----
 src/coursework/Main.java  |  92 ++++++++++++++++++++++++++------------
 4 files changed, 103 insertions(+), 40 deletions(-)

diff --git a/bin/coursework/Cage.class b/bin/coursework/Cage.class
index a752da327002b690e4bfc92e5e9d2519376df0d7..870cdad95fc9207280743efe057850ed5f5306a1 100644
GIT binary patch
literal 2486
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
Kj0_E66B+?cb^jay

delta 1034
zcmdlcJcFC-)W2Q(7#J8#7(6F(Su!z4Pjm?jV6(~0%Pg^DWMI>Xj`q|HV`N})&QD3@
zVqj(v<YC}t5MpFt*3b;&WME_v;bCB9VB=yCV~}8H5NBlIPtGqbDo!oWFUr>UP0Y;W
zVUT2ynrz3YFC)Xlz|FwJ#lXlQ$HO2GGJ`XzG&3i~IWawT@(V^6D`o~&9tJfAbw&oZ
z)WXuloMJ`>Q4OE0#Ii*FoW#6zegCAa)Z`Lt%_uep1_<C}&}PtOXV94($t26H$DlvC
zl1W?MkinRp!HAJT5XmLMg{6r_sXPoO45pJ0Gnv#IGMMu)STL9}GVm6smiVNml?0a*
z<!7gIF&Hvf@i16}WcZ6yOPumcO7e3Na<)7Sb|5*P;?$Cm`~rvsBLiEaXI@Hb1tSAf
zv?n72TN0GVUX)+%l9`sq$iSYQp95j>2A3oz^Jn`e7K9`w<)pGRu(2~ZOjc)AVq}@@
z#j0G-$iU0M$H2(I&%nSC$-u<G#K6EHs<oX#KudcogRs^P2GOky(puXXWH&M}FfcJF
zFfcHPF|aZ)Fz_(2Fz_;PGVn17Fz_>oFbFUxg5|&lFeou7gM&;I6k80842+-{fLO!$
zg@J{En}LDhvDOxbdf`YbmVI{2w#ykVNwUZo`Dkrn5RSCs*k{JhY{s^nVY4KMD4UTL
ztF|QTHU^bh3=6bb^dwnX^is??wVCxKS()`x%(z53nHDf8h;q$hkk;D5Ag#@;XQa)d
zXC%U)v57%z8-u}ehD=dT7OYC@p=!*QGq{Oz&SFp$<ziZZ-5AT|49XxSa-v);3m7D@
z*<{ng#wf}r%D(WwPYV;HjO@by`k-KA1_zrTgD?XFgD`_Ig9w8bgD8VBgBXKtJ%c!d
zJA)KM5Q8*BI)e;D7K1E9DT5qC7lS-QFM|TZ3<gDpwG2uO8yJ)sb~C6jTwoAkxWypM
z@Q6VZ9Ns42xOfZ=Z()Yx4E78T42%p~49gfC85|f`8EhFQGdMADFmN)sGjuXIGjK3)
zF}N@=FcdOy{Ab`RV_;<mMGqr8gDV5We+Cf-PId-Hb_O>_un2@?_|M?Rz>OphlV@aP
bU{F%}&mfOg7t?<RP88!A7#ZBbsmKEWN4T;O

diff --git a/bin/coursework/Main.class b/bin/coursework/Main.class
index 5e29507a106c3cdfc1cc053e01c9b5fdfba7ce59..bd8e82f3de7abd33e65466a9ef376d862e3b6e08 100644
GIT binary patch
literal 11417
zcmX^0Z`VEs1_l!*X?6xCMh5=m{L-T0)bjkIY<=Iv%sh4m7DfiSti-a!v<m&if`XjP
z<iwK9{5*X}1e=k8(T|aV(UXyZ*Ev70xFj*JBrGwfG?kfwfq{*Yf!{sI(<MH@HOSf3
zFT~N^m63tbh0Xp20~jzeaHkh#rUVz3CKja@Gct%qNBbZ-0U~Y<RpnQjo0M8q%*db^
z?E`gEadK*2s(x~QUP)1Yj($jLMTuKxYEFtZBLi1*VtT4iVp3{OF(ZRqG!7kL1u*md
zOG|Px^HLcZ<WP+-&PXgs)elNdE=kNw&q=jrWMBo`%g7*tsxTPj8f!)d_RQk&%#_q3
zMh3<xMh1?8qSUg?{L*4Z1}RkaIf<3|r6u|vPWctqj0_w$$vK&MnI(3N49psuVT=qc
z&iN^+><oOI42%p4JPf=HeC!NDAdWH*gCK(tBLlxrW?m{JR6-Jya#9%?gnaUo6LZ26
zi!wocs34mS*jO$GW(Ex&1~mp5kQrJ$44e#H><l`H_yv0kGcZA_^>`Tg83aHq10DuR
z1}R1cmXeIjVnzl*<mdvW7;8ob&f?UP(gOFQ%oIij1r1HCeg??~B<7`Bvon}6GRUAr
zCp1`KO1KzI88kQ<EE%lX8LSu?grREFQ}c6EONuJ>1M-V`7;G4985!6>Nz65fkwFw@
zC$b`IkU{o53=RyAj0`-*sU?m%ndy1Csd*)g3=$exb!dixyzI=wAj%-d#o)@|&d%V*
z$RGrD0VKS@k<P>5!Qjcrz>%I>5}uh-k^zoF7d8h8a4KiuVqj$O<zet+@MmP;O-xA%
z$%lE4k--seHN-qL-&?zQdJ+gikiA8jDWKrQNW18!F*2|eXI7;$GB9Q`GB9Q_GVlhM
zBqnG3CKiAb3&^42JPZ*Gk&F!d@Mwf&Lq-NM4Hr%1_=bpEgEU3+FvKv#GBOCkHNi6@
zBZD$XA4;HM=2(y+@jMI(42g^kyl_K6S%Z-wPy>stun2>M8m57`f(>M(H5WrNLn=E%
z3L}FcMsdT#kj9V>3e(gQ_oDpL0+7GaVgM`-PEVOU3|S1>j10_)DJjUw2;wTg{FGE{
zPfyJ-kbSv440#Osj0`;KsU`5j1WOJ<FK)OP3K@#o8H&)e37R?{h7txDMh5nhe7B-}
zP?}~d2A8Ug48mAKkCB111XfxyGAIxVOhyKljHLVuMh4b&NRXhFe2@TPXQ*XlkU)uO
zX!-*MIu}C?g9bZ80}dr&PWcsF4D}!-&5R6ED5k(-7hGI(Ftjo<FmN$6F|>n9vkpcE
zQAifj&q>Tn*AFf!%FIi*28DS&Ll+N2H$xAo{zxrx&dAJ3DN4;_WKcyEO3C>-IjPB@
zDy>-GKdCsis0>ta`eYWDShF+qF)|3ExC0cQ+zb;KCb2V2WMoi;%HcMHhhZ|q6h;QN
z#FP}roE%U>g49D0m-;7Vr6!kHYes>*Z4U~bE|B3fKuKyQny--5)-c$EGRqtuhPe#$
z7#T!B5#yYbnVb#Dj;>|k5=|BoCTSJ=kfewd5!T?!r3@UO*lQ$ETv#(Q@Pg`4&%CsJ
zaJVxv$Y4(<U|DNM2A-tEoW#6jNUh7rAOO$B@QPItqaZ*_#MW#MMzA8YkYOb#epfLv
zuxq%uxVS(H<25`C!VDsu4C@#+ursVjPfG=fnRzAp&iOg{MLY}}88$I8usZoTI(uVO
zy+{hJK^bfd55rc5ZIHSvxTGjQJC%_EJqRIs0zg(+gB-JtVFwSxPLL(sAwiCQ!2ymz
zu6`jP({}SP>;aj^UYuIumYI{o<^b^&14!}!55qx*LyQc3#i=C_tDsc|i-rp*)fO@w
z;bAxm%FApe`A&(+*`UJXI4CF%u{m%+3<3$A=3zL)a28UPh2$4NjACSv({MqJCWy1a
zVFJz-$qeUt7%qTxf=YO&{F0LVT!?0nsh4;dE`#JiWw1|b8q|d#nX5bu*FZ8LcL!yr
zXTYVj88p}&1Yi!+X1LA6a0lc;?&8!E-^@I)@7U}gAQU{{VR*>!h>-!LAfPBUEf`!Q
zv1)+gn2SN1!JdQRDI<fdZd!$IT7GhAv2HRbLah`^iW2jR3lfV`^Gd8i>Ynp3ykO{H
zWZ(dYWMxh&2g55y21SrQP~oPVlwYBnlwXvRT7;?>5@w|ZA^8QMf{Bqq22mhj<`z)X
z;~fvfdr%95*U3L5#NRg_($HXYP=R@>hT$_0!xxaRxj>F7NKDSmOJ`^J#>gNIEhQiZ
z!%8xz(vp(=JPw8*j0^%k`H3kC>4~|i3c3nunK`Lk3||@AIT(I}D(8&+a)sQ?;*!Md
z)M5^Xzl;oG$f`lURLIOLC@o=g$b>oND<dNhBNNCephgZTe8Dlm#qgDpg@=(9)J_3a
zL2wBn1_nlU9!3sEPDTc{jKsVYP(xA{5hAIe0!1HOtayNBi>yIraq}?pF!Dko(Lc`-
zT!w;DA1v`<(FQ7a*h^r6E|im>nBtz8o9dRClL`qBMh01!c5K0A4QgLx<d^$G0|cf?
z9A*-z&EW|O4wwumg_jmU(l{upIT<V&MR^#-Kyk?x;vWEwNOndE^x8EuH!(d`-xEZJ
zWu}(1GfJVCHApHr7-bk4Btda!1=dllUz(SaAD@|=pQl%lm(Il~$<WTlD9$L)!=T2f
zfLXF283oRwUm2A^DwP=-G$6$|q{4t!ZKy#6s*|iW!#EgK(VS3}isS?iMs-F8R_C15
z#3D8aCqz=w=3&$UB^6M12c-y)R8Y=lbBKc}VPrJmVKihkVq_3a2I+=`EV#Y_Ckapk
z2Gv2RNgQ0+a3z6D8Bh!`GH`*y24V~&0~g4ZFb+484V;V?j8^Q7mW&LtC>aQx+Vy?&
zON&#%_VX}WGukjR@cR0P2D`>P`*=EgySgwkNWk2Llng^E3sS9x7#JDtK&joHk--C{
zT?y{Jz_dY<A4;VOlR`2PksoRp9eEg?7@Zjz_!Co7z%GMIGBTJ!;xMg3A4x0NF?fvB
z3=?8tVsr($)Qyor57VXaCMlAkP%Et&8AOXq64O(`89yi$)Zzy_iIKq+?iR2D{a}zX
zYnVGwd=2ZOfKnu*7o!h5qc>9D2c!?8n}^XCGyuR`4(j*>6y+DB7L`;oG8iCAkfhYa
zykh+VsFZ$CYGR6iUQVS;erZxpDols95Cbz~01smzV-O<)dvZo%UV3T@BSQwJ&*82`
zxPg!lU|Jw9DFY2p=sSb005$be^HPhfxfnwj!`K-^85wk-2@ax|fU|iR!x<wO8MqTu
zQeZ|gGN{2r8Da)j3qhqJD>xRA2NIC{#K<59mWJd>q-f+~^kR(VVT=O>J6{Gk$HGEU
zh=GMMfRO=I36&N&C#I(svoj{4j_ZI#IT%wI85p&>7!w)OKqXB&sP7W(=?M-el)?s7
zvVgjZ`W%eej0}tw9E`b)42-(qoC``<pj5)hzy@lef!aijjD<W5;tUd846cmDJd7ov
z+J-YdwFKe^E`~zJG9JcqP>BPow87~UBv{GASOpRU4IRLgCNtLXFxG-Zxr@L_7&O{Z
z4DNztrbIyLNJa)u&<GOPBt`~~ywq~=;1eSQXAx|`hLM3U9n_aY8fOyM(8Mv)#G9U4
z0tz8;qqZ1Sx`9+eQv@V`zzR6967XnHNn%k6BZD|R*1^#R$sLgL&$S{swE*19U}x-x
zj$uH887{--&<QJZT^aj9kurgiK?-3cXlzM80Mht@G?eNYKC?4UW@He9x(+_r;h9&Q
zT2jpBU;;IeaT3EyE{1x>89a<L8D~LKM?hjqN@iX<BZD;D3N-zoe9yqhIERP9n8AdL
zfst_@4`Tv@42ZRWhv7BD8xU&|52G-IwS<S!ozVj%wv2}{n$d&Jp%v2P<6`t;xD86O
zt9cmLfT9!BEb-0EgT^zX7vnk}#`TOFpzS!2KT*OGB%lu-WdT=nn;025d=pDDQu4D)
zL8fluVcZI91cqdm<fMWGxAQRW0JWf5iZk-d85vm0oIssdmfXb5JoH`|v{D7Nycrqy
z@-XgW+|9_qmXlbTmz=@Kz>-*$Ud+fKjNEU7>R@Ex$VtpiN=Z~PK(5gt#WAEk1TJ*J
zDS$B*sSARs1YwpTBZCb*Mj+`8xfTLv&@@=54!tr22ha&d22oHG7}E091sBU!1_c$?
zpdRLP4#v}r4BANYkhXPEYKpZ2k|;!%Q2}URQl5aN2*(?7F=#WM=V816iV#re2h<>A
zXS{@HI$?O7ok0Mh-<Xl17U6lMq7c;u&;S7yJ)l7^c;Sy+*djXf;PL>X29o6<Bc@nH
zG{d+UuQT3cXS~74AOOl#$m)3*Z-ELk?i6sX1vV6v(u%nlOd0R;Fx~@6a;2x1_<#p>
zBS69rco-j|3P*y*Al*Tk<OvUB9%DWu19N^-F(ZQt%!By6z{tRspOX@nm;)N;MR%Sx
zBLf?x@B{Y|kVk<l3sS*@dyEX0L|9{^4OWEgb!$7&@H8~Bn}G7OJ0k;EaDHh~GPv>1
z$iN9|Jn4bl#K<7vl%HQxTvC)+;G0^Kk)Kk`#rTQw3p?XyMg}F23W&*>d1d+8sro+P
z9ORo?l9-m5T#{c@$;0@S@f#xpcP>JRk>Ly^QK0CA7!GOi6s!2;=VzA|Ajc^*mm+xv
zY9&M?qWy)%RJ@W9E0L|jG#Ju2LowMoF()TDvn17;pN;V&asda)60o8|fbj<?dHm*K
zJji&6pN;XC0OKKu7!v~z<59+A{OpYX85xuyA%d?Y5MW}0YGmVKJj-~9pPh+SfbkF`
zgEw3+zSM>kaL~agOcBj60VYl^21X_x9>yz-SNYkQxXCacPkt0&;)B{C#KZUoY=fWx
z6CWc3k7r(9YLRnJVsUY5F*}nuBZDeN+JZzhB)VWJgq=weI^ls5IVegQ8Q37ni9wNp
zkpVP~#mOMaz{<eJz{tSPz`(%7z`-B{nmvK@xf!@X(=%W>eg@D`2p4FE2Fw>`5CK=i
zq6}hSzBmJDQh*6Gi^9ObAj!bNAk84dz{nuWz`$U|zyww+Ccq}Zc9cPmX)}YofC}qT
z21TaL3`!fp`aweuTwrx74BQNA460yJ1_nmZ%nsC?5C&!jMg|53DXr}c>RKWU+*=tm
zwFFf5GH7pQ(A8qx%Ak)hON@b)fq_AufrUYtftx{<L4-kzL6SipY%UMP6b3^E(5M^}
zs38Eg;Ti)Q0~-SagU@aT)5z@%=04h+7%a9i*lBHHaN5S;BErC(EyCcH@5yY&vYbJY
z*^G5LgP@kShA4|D>vjeopB7d|QC0!Ah5z5RurP|UfLQmmH!v_TFf)Msr^dj^z`&r(
zz`>x$z|Wx1AkSdTpvqvvpv_>)V8&p=;J{$a;Kg78cB2W{{XS4Paxl0s1TX|LFfzz9
z=rRN`fI>=%L4zTffsKKML4!epA%uaAft4YYfq_AYf#n~ADm#NIGvglyRz}`m44e#1
zph+62AAd5iGH@|4Fhpx<Y-b3wVgpf8R_t1mY?AB{kHlGVNV08XNV4MG#2_!qVkF8c
z$rh}&g+UkOr3_Kl1WEQ_ZAng1R#BF13>n&z98eZWQ_ePq0<f2vz+Tn@TV=z*&S1;H
z$6&`G!(h*#%;3nN$Kb?Z%izM`&fv-r$l%Tp$>0I@b__U(qM_bqV2Fl#8^nTm8^nTm
z8^nTmo1Gzqp_HMFfsKKW!Iz<&p@M-OY*QtJ6axo?GJ^#}6+<;R7!nu~A;G|?&%g?{
zt8+I)P2_flIxE)Q4E2%Q85*tFb~7|Z3bkx!XtQERFgZ3cD9H-2Wr(sQ7%@w-2P1J=
zBsqdXe(z-4%g`GMl8j{0365ly<Otr$(9gsWF3AQ?MpGqOw=qnUWZTIw9VEyK7M!Ie
z$-13kwj?Vkoj?N3h=B)`1{pXRd>Moo{1{{z{24SD0vXI1f*9NwLKu=6LK(6d!Wb$T
z!WkMEA{g2jqL2cw6CQY-;6MT8m`-q@fO26cIL&}^e<wK2urP2kG%$byij_f#p`2kp
z!vY3223dw2hJ_4^7}yy!7!ny4Gc01@U|?cc!mtz)cnk{}c)=w|q}FbR!bo)y2Cr-p
zhGofk7~2_EY-L!jwS{5zCWf`!7&b##+qW_70<lCG_HJX?4`OX&I1Hi?fguIXkns%q
z3<(UD42cZR3`q>W49N^33@Knwi-8M`NVumX!P$e6feAF-2X$^M0}BHS0|SHcZieJY
z_3aGD{B%VaPJkV93eGwQXI+G|uIQpWB!hvIA(KIvA&WtlA)7&+A&0?`As6fr1#pNM
z!yRG_bqFVe7C0W58JIwmiBKnXF|dQ3WU`w<J90b2bw6Eo5r!N2+Zb+v7<aSPMHud8
zZ)3Qx3r-}Db%ma6V|b=3^b$lO+$0AsxeFOM7>XDK8HyR?8A=$`7)lv*7|Ixo7|M~{
zWde7X3DjL23_9Rc0dm)ChBr`mJ!N18mps|fYym0(-)>`=r7gnnVH?Az-3(tNg}!fR
z_~{E~{o2m((+|x0vz_6m6^o7t!@q5e43aE5+ZdU*F*0axW0(fX6gt6?EV`gP!2-<_
zI=dLz7#OxOav_x#dJNnQ3=Gu_91JxK{0y}WVhr^R3JeVlS`3X0rVLFCHVn-St_-aV
z2@LHFnGD@v??DR6Y^e7*7?K(J7^FZ;3mCi^`56Tmm>9Ge92o@}1sIq?#Vn%`qW}X7
z0~4r!2k|l^D+34E%iVA<L;R|}iBV)5!z{4(T6QyvNA6~nj1*>+-p(kyol$N(qaq{>
zkfc=LQs6)lW>f=*iX@8&qsBHyEfB4{jgdi1l4U!iK5E!VvIIx6>O#W?BS`ugI2a}{
z@H0$g5M!9kV8}3q!G~cgLj=P#h6IM`3>geF81fiqF?2G_MhcQ{c#t$R8iRwxkRgiE
z1RNwj4EBts;2?=$FlID^1PN&34H6^_?w}xIU|`_a-o$9GrM-*M78F$ui0Tzo0WmPl
zXW(O42DTEC3;Cf|GBEIiixfr%CeR=&)KF&zCU9Qm*4Em^=mIj33*Eq#3|tKBkPPI8
z8^{fICCET`Mh~cgK@2S5JSU*NjnPv}TW1%eKgiTzbW=An@H1=&n+nOJ0&r6W7$X^@
zz^wrRa7Dw!zy#{#V=+GlY<@ge^LH`uGaMk=`~+CLi17gfE68rfs@;r<tb4d3Sp?Yp
z1-OM7leaUbLWP)F{3BUd{aJ+>Gmr$?{3BTeIQ<1ggc-Atgaz0^;vD{L!i+f(VfH;-
zk<1`b4*y720dD_DHUU9@0X8&kTp(=%AZ<`fz}f_OK*GErjY1%e!v2B`AJBC2ft2uL
znkWGhm&6no0f|c?i?e}TC?E<Fmj+oS<1fID8Ug}hAW3n50Xewk5KVF*ae0s?1%Ck!
zG);;iNhS1v6OaW7EBgy@LX;y?iW9hfdze9(;Ru5U!%+r%hGPt2496MD7)~(sGMr@C
zz;KG;1jA{D2MlKzelVP66lFNasLODk(Tm{%V<N*v#!80E;1mFETQXKbQy3$tHw;Nl
zjM@yW;Cj7QYYSt+Oa@+Xo073;IRh7%#o%Je&TPiHoFRhQjB7cA2dL@AX(Y;Jw2dLh
zid&Lff?WjK`rO7?ips5kt3_5+-NMBv$^~kJZg1ga6y*f5mV-PDX^cWzX4e>`7_KuY
zFx+5JW4Os+!f=bhnc+4=5W^jY42ByFMGV&&Y8W1ZJr=|Onxw6TdW?agmaz`J00_jY
zX8^6j0<jtxxENR&q!^MJ8yUD5*coIQ;=v6LP6lNLe{h3?i@}7!gt3W1gn=8}Toqwp
z6Le$#%fJq4uKs3l0X0}T8JihfAOXjq0?H%|3=Axr7~~OEAE?{H!0-g@Hc-Qcld+Yt
z4O52_x{eoc9gK|aj2#S2jGzHZ76wMfE>LHM(T;%|+~SxAZ4UZs?PhR|)DdCq5n=4v
z&e*q=!AS>HKQK<z+08g9QiO2|9BpTuwvBPR4!Fjis<oYQwx8B^#<^PC8RuKEXl-X)
zXvM0tjRDq3WPw$Ptk6PVOIvq4<6<zmR9l2``8LLt5Nee+IDs&()fQ&lxQ%hM_BO_C
zpm>Bd7QGmR7#JAdGH@`wV~}Ea&!EWgfx&{|BZED|X9gFBuM8dx-x>TEelUbE{9-6z
z_`^`f@Ry;6;Xgw&BLhPhBO}8kMka=tjLZyk8Ck#~V+Zj)Jf7!4i%1TJX^cA=7BDa|
zxG+S43rl7OKZXEsZOg(C!r%q2WLOzE8Fw-6hQ@<210y)@ShaRA?m;*iTzN2p7GZLL
ztpw*823E%Xj0YGP1h_y$1W*IC89+Ti1_nliW=OnuB57n~Jj{56fkA)?G>!n(n9aZh
zt{UXDwlL@)17|jUVaDUz7*A>oGoISUcv4Fn+FgX?21s{t0Rub3LIy#G#S9V*OBiGs
zmV#}8)NOL`5Rqd%%y@=@37mSF85jixm_XwYP>Z`5n7{$30_rbCTCwgkV_~*i&LAks
zDr@AcBh<2u@mvctqpT>)!vF6<o`P5}1a1qiVh~|i%^=0Fib0uSE!b*EeWe1oS_SM?
zMg|cEHgMYw;s`MYrvD853~cNSjO>gT85kMa880(1@Cq=2MlYc5n#8~kc9*gw>o&$~
z+S?d!&zQp?p~bwFu|P{_8{-|FZH)JIwlO~1#`qZIEEaI@4dSd#47?1R8H5<NFeou>
z13OC#>|ABIvy>U1GCl)`w=&~%#upG-#+QsQ7+4u!F)%PdA{eCVH3Ks&+>`{EKw}@c
z-1ipjJ{BU}x0`{NVGn~4!(Ij@hW%7@9|JSvJJ2Wu<9o&rpvA-ttc>3om>GXE{$czJ
vX8mJgWMT%fm{^$DnK-~KE+$?kelSabNtj85Nt6M!sEd(Fj7fq?ia`<p5XcI|

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

diff --git a/src/coursework/Cage.java b/src/coursework/Cage.java
index 9427afa..a37ce86 100644
--- a/src/coursework/Cage.java
+++ b/src/coursework/Cage.java
@@ -1,43 +1,72 @@
 package coursework;
 
+import java.util.Arrays;
+
+import javafx.scene.control.Label;
 import javafx.scene.paint.Color;
 
 public class Cage {
 
-	private int[][] squareIds;
+	private int[] squareIds;
 	private int value;
 	private String operator;
 	private Square[][] gridSquares;
+	private Label[][] cageLabels;
 	
-	public Cage(int[][] squareIds) {
+	public Cage(int[] squareIds, int value, String operator) {
 		this.squareIds = squareIds;
+		this.value = value;
+		this.operator = operator;
 		this.gridSquares = Main.getGridSquares();
+		this.cageLabels = Main.getCageLabels();
 		buildCage();
+		setCageInfo();
 	}
 	
 	public void buildCage() {
-		for (int aIndex[] : squareIds) {
-			for (int bIndex[] : squareIds) {
-				if (!aIndex.equals(bIndex)) {
-					int rowDiff = aIndex[1] - bIndex[1];
-					int colDiff = aIndex[0] - bIndex[0];
+		if (squareIds.length == 1)
+			return;
+		for (int idA : squareIds) {
+			for (int idB : squareIds) {
+				if (idA != idB) {
+					int[] aCoord = idToCoord(idA);
+					int[] bCoord = idToCoord(idB);
+					
+					int rowDiff = aCoord[1] - bCoord[1];
+					int colDiff = aCoord[0] - bCoord[0];
 					
+					final double WIDTH = 2;
 					
 					if (rowDiff == -1 && colDiff == 0) {
-						gridSquares[aIndex[0]][aIndex[1]].setRightStroke(2, Color.LIGHTGREY);
+						gridSquares[aCoord[0]][aCoord[1]].setRightStroke(WIDTH, Color.LIGHTGREY);
 					}
 					else if (rowDiff == 1 && colDiff == 0) {
-						gridSquares[aIndex[0]][aIndex[1]].setLeftStroke(2, Color.LIGHTGREY);
+						gridSquares[aCoord[0]][aCoord[1]].setLeftStroke(WIDTH, Color.LIGHTGREY);
 					}
 					else if (rowDiff == 0 && colDiff == -1) {
-						gridSquares[aIndex[0]][aIndex[1]].setBottomStroke(2, Color.LIGHTGREY);
+						gridSquares[aCoord[0]][aCoord[1]].setBottomStroke(WIDTH, Color.LIGHTGREY);
 					}
 					else if (rowDiff == 0 && colDiff == 1) {
-						gridSquares[aIndex[0]][aIndex[1]].setTopStroke(2, Color.LIGHTGREY);
+						gridSquares[aCoord[0]][aCoord[1]].setTopStroke(WIDTH, Color.LIGHTGREY);
 					}
 				}
 			}
 		}
 	}
+	
+	public void setCageInfo() {
+		if (squareIds.length > 1)
+			Arrays.sort(squareIds);
+		int minVal = squareIds[0];
+		cageLabels[minVal][0].setText(value + " " + operator);
+		cageLabels[minVal][1].setText(value + " " + operator);
+		cageLabels[minVal][1].setVisible(false);
+	}
+	
+	public static int[] idToCoord(int id) {
+		int row = id / Main.N;
+		int col = id % Main.N;
+		return new int[] {row, col};
+	}
 
 }
\ No newline at end of file
diff --git a/src/coursework/Main.java b/src/coursework/Main.java
index 716f236..06dabe9 100644
--- a/src/coursework/Main.java
+++ b/src/coursework/Main.java
@@ -8,10 +8,12 @@ import javafx.scene.Group;
 import javafx.scene.Node;
 import javafx.scene.Scene;
 import javafx.scene.control.Button;
+import javafx.scene.control.Label;
 import javafx.scene.control.TextField;
 import javafx.scene.image.Image;
 import javafx.scene.image.ImageView;
 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;
@@ -28,15 +30,16 @@ import javafx.stage.Stage;
 
 public class Main extends Application {
 	
+	final static public int N = 6;
 	
 	final private double GRID_PERCENTAGE = 0.75;
-	final static private int N = 4;
 	private static Square[][] gridSquares = new Square[N][N];
 	private TextField[] gridNumbers = new TextField[N*N];
+	private static Label[][] cageLabels = new Label[N*N][2];
 	private Rectangle gridOutline;
 	Scene scene;
 	private boolean isWider;
-	private Rectangle previous = null;
+	private HBox previous = null;
 	
 	private GridPane setupGrid() {
 		GridPane gridPane = new GridPane();
@@ -56,8 +59,7 @@ public class Main extends Application {
 	private GridPane addToGridPane(GridPane gridPane, double size, int i, int j) {
 		Square square = setupGridSquare(size);
 		TextField textField = setupGridTextField(size);
-		HBox hbox = setupGridHBox(square, textField);
-		
+		HBox hbox = setupGridHBox(square, textField, i, j);
 		Group group = square.getGroup();
 		
 		gridSquares[i][j] = square;
@@ -70,23 +72,27 @@ public class Main extends Application {
 		return gridPane;
 	}
 	
-	private HBox setupGridHBox(Square square, TextField textField) {
+	private HBox setupGridHBox(Square square, TextField textField, int i, int j) {
 		HBox hbox = new HBox();
-		hbox.addEventHandler(MouseEvent.MOUSE_CLICKED, e -> {
-			square.getRectangle().setFill(Color.LIGHTBLUE);
-			if (previous != null) {
-				previous.setFill(Color.WHITE);
-			}
-			previous = square.getRectangle();
-		});
+		VBox vbox = new VBox();
+		Label cageInfoLabel = new Label("");
+		Label balanceLabel = new Label("");
 		
-		hbox.getChildren().add(textField);
+		cageLabels[i*N + j][0] = cageInfoLabel;
+		cageLabels[i*N + j][1] = balanceLabel;
+		
+		vbox.getChildren().addAll(cageInfoLabel, textField, balanceLabel);
+		vbox.setAlignment(Pos.CENTER);
+		hbox.getChildren().add(vbox);
 		hbox.setAlignment(Pos.CENTER);
+		hboxClickSquareEvent(hbox);
+
 		return hbox;
+
 	}
 	
 	private Rectangle setupGridOutline(double size) {
-		gridOutline = new Rectangle(size*N + N*2.5, size*N + N*2.5, size*N + N*2.5, size*N + N*2.5);
+		gridOutline = new Rectangle(size*N + N*3, size*N + N*3, size*N + N*3, size*N + N*3);
 		gridOutline.setStroke(Color.BLACK);
 		gridOutline.setFill(Color.TRANSPARENT);
 		gridOutline.setStrokeWidth(2);
@@ -96,10 +102,10 @@ public class Main extends Application {
 	
 	private Square setupGridSquare(double size) {
 		Square square = new Square(size);
-		square.setTopStroke(2.5, Color.BLACK);
-		square.setBottomStroke(2.5, Color.BLACK);
-		square.setLeftStroke(2.5, Color.BLACK);
-		square.setRightStroke(2.5, Color.BLACK);
+		square.setTopStroke(3, Color.BLACK);
+		square.setBottomStroke(3, Color.BLACK);
+		square.setLeftStroke(3, Color.BLACK);
+		square.setRightStroke(3, Color.BLACK);
 		return square;
 	}
 	
@@ -125,6 +131,11 @@ public class Main extends Application {
 		loadGameTextInputButton.setPrefWidth(loadGameFileButton.getPrefWidth());
 		
 		topHBox.getChildren().addAll(loadGameFileButton, showMistakesButton, loadGameTextInputButton);
+		
+		loadGameFileButton.setOnAction(e -> {
+			
+		});
+		
 		return topHBox;
 	}
 	
@@ -144,6 +155,16 @@ public class Main extends Application {
 		return bottomHBox;
 	}
 	
+	private void hboxClickSquareEvent(HBox hbox) {
+		hbox.addEventHandler(MouseEvent.MOUSE_CLICKED, e -> {
+			if (previous != null) {
+				previous.setStyle("-fx-border-width:0px;");
+			}
+			hbox.setStyle("-fx-border-color:red; -fx-border-width:2px;");
+			previous = hbox;
+		});
+	}
+	
 	private void clearButtonClickEvent(Button clearButton) {
 		clearButton.setOnAction(e -> {
 			for (TextField textField : gridNumbers) {
@@ -171,13 +192,22 @@ public class Main extends Application {
 	}
 	
 	private void setupCages() {
-		new Cage(new int[][] {{0,0}, {1,0}});
-		new Cage(new int[][] {{2,0}, {1,1}, {2,1}});
-		new Cage(new int[][] {{3,0}, {3,1}});
-		new Cage(new int[][] {{0,1}, {0,2}});
-		new Cage(new int[][] {{1,2}});
-		new Cage(new int[][] {{0,3},{1,3}});
-		new Cage(new int[][] {{2,2},{2,3},{3,2},{3,3}});
+		new Cage(new int[] {0,6},11,"+");
+		new Cage(new int[] {1,2},2,"/");
+		new Cage(new int[] {3,9},20,"x");
+		new Cage(new int[] {7,8},3,"-");
+		new Cage(new int[] {4,5,11,17},6,"x");
+		new Cage(new int[] {10, 16},3,"/");
+		new Cage(new int[] {12,13,18,19},240,"x");
+		new Cage(new int[] {14,15},6,"x");
+		new Cage(new int[] {24,25},6,"x");
+		new Cage(new int[] {20,26},6,"x");
+		new Cage(new int[] {21,27,28},7,"+");
+		new Cage(new int[] {22,23},30,"x");
+		new Cage(new int[] {30,31,32},8,"+");
+		new Cage(new int[] {33,34},2,"/");
+		new Cage(new int[] {29,35},9,"+");
+		
 	}
 	
 	public void resizeGrid(double gridX, double gridY, double gridWidth) {
@@ -190,14 +220,18 @@ public class Main extends Application {
 				gridSquares[i][j].resizeLines(newValue * GRID_PERCENTAGE / N);
 			}
 		}
-		gridOutline.setWidth(newValue * GRID_PERCENTAGE + N*2.5);
-		gridOutline.setHeight(newValue * GRID_PERCENTAGE + N*2.5);
+		//gridOutline.setWidth(newValue * GRID_PERCENTAGE + N*2.5);
+		//gridOutline.setHeight(newValue * GRID_PERCENTAGE + N*2.5);
 	}
 	
 	public static Square[][] getGridSquares() {
 		return gridSquares;
 	}
 	
+	public static Label[][] getCageLabels() {
+		return cageLabels;
+	}
+	
 	@Override
 	public void start(Stage stage) throws Exception {
 		VBox vBox = new VBox();
@@ -218,8 +252,8 @@ public class Main extends Application {
 		stageWidthResizeEvent(stage, gridPane);
 		stageHeightResizeEvent(stage, gridPane);
 		
-		stage.setMinWidth(600);
-		stage.setMinHeight(600);
+		stage.setMinWidth(400 + 50*N);
+		stage.setMinHeight(400 + 50*N);
 		stage.setScene(scene);
 		stage.setTitle("Mathdoku");
 		stage.show();
-- 
GitLab