From 5f16b8834349402de45ac2d816e67c42aec41618 Mon Sep 17 00:00:00 2001 From: Samita Adhikari <sadhika7@myune.edu.au> Date: Sat, 23 Sep 2023 02:38:29 +0545 Subject: [PATCH] Closes #2 Closes #3 Closes #6 Closes #7 Closes #8 User Login with database connectivity, High score with database connectivity --- app/bin/main/Auth/Authenticate.class | Bin 0 -> 2105 bytes app/bin/main/brickbreaker/App.class | Bin 933 -> 805 bytes app/bin/main/brickbreaker/GamePanel$1.class | Bin 780 -> 780 bytes app/bin/main/brickbreaker/GamePanel$2.class | Bin 783 -> 783 bytes app/bin/main/brickbreaker/GamePanel$3.class | Bin 1608 -> 1608 bytes app/bin/main/brickbreaker/GamePanel.class | Bin 8328 -> 7594 bytes app/bin/main/brickbreaker/LoginFrame$1.class | Bin 0 -> 984 bytes app/bin/main/brickbreaker/LoginFrame$2.class | Bin 0 -> 982 bytes app/bin/main/brickbreaker/LoginFrame.class | Bin 3438 -> 5501 bytes app/bin/main/brickbreaker/Menu$1.class | Bin 813 -> 701 bytes app/bin/main/brickbreaker/Menu$2.class | Bin 716 -> 932 bytes app/bin/main/brickbreaker/Menu$3.class | Bin 707 -> 707 bytes app/bin/main/brickbreaker/Menu$4.class | Bin 711 -> 711 bytes app/bin/main/brickbreaker/Menu$5.class | Bin 1374 -> 0 bytes app/bin/main/brickbreaker/Menu.class | Bin 5748 -> 7402 bytes app/bin/main/brickbreaker/ScoringSystem.class | Bin 0 -> 1255 bytes app/bin/main/highscore.txt | 1 + .../main/java => bin/main}/resources/user.txt | 0 app/bin/main/user.txt | 1 + app/build.gradle | 1 + app/src/main/java/Auth/Authenticate.java | 48 ++--- app/src/main/java/Auth/User.java | 44 ++++ app/src/main/java/brickbreaker/App.java | 16 +- app/src/main/java/brickbreaker/GamePanel.java | 67 +++--- .../main/java/brickbreaker/LoginFrame.java | 61 +++--- app/src/main/java/brickbreaker/MainMenu.form | 192 ------------------ app/src/main/java/brickbreaker/MainMenu.java | 177 ---------------- app/src/main/java/brickbreaker/Menu.java | 48 +++-- .../main/java/brickbreaker/ScoringSystem.java | 84 +++++--- 29 files changed, 240 insertions(+), 500 deletions(-) create mode 100644 app/bin/main/Auth/Authenticate.class create mode 100644 app/bin/main/brickbreaker/LoginFrame$1.class create mode 100644 app/bin/main/brickbreaker/LoginFrame$2.class delete mode 100644 app/bin/main/brickbreaker/Menu$5.class create mode 100644 app/bin/main/brickbreaker/ScoringSystem.class create mode 100644 app/bin/main/highscore.txt rename app/{src/main/java => bin/main}/resources/user.txt (100%) create mode 100644 app/bin/main/user.txt create mode 100644 app/src/main/java/Auth/User.java delete mode 100644 app/src/main/java/brickbreaker/MainMenu.form delete mode 100644 app/src/main/java/brickbreaker/MainMenu.java diff --git a/app/bin/main/Auth/Authenticate.class b/app/bin/main/Auth/Authenticate.class new file mode 100644 index 0000000000000000000000000000000000000000..9d11fe02a53d29cff70712d76a60459d854c4a5d GIT binary patch literal 2105 zcmX^0Z`VEs1_oP(Vs-{5Mg~F0(vl2)5RsZ!l9`-XlFH7&!pI<yl~|UjpOcuEuJ50e zm6}|_$ROYx<m%$;7vkyY6CCg6>Ep`CAmoEk7F<%4nU`+O$iVBIpI2Oxm{$^(m{Xd{ z!NAGLz)@P9TBKJ}QNqZ;3St&BGVnvRmX>7Z==&xXSTizk24|+{C6<&Hr7|*@qRQGp zxM1f%?ZFhWvu0#qv&qcMEU{x`VAjwKV`N})&QD3@Vqj(v;$h%p;AdwLVPp^lI~i=R zM`Ce?Z(;!#gD`^-Cj%pcI1d9C12-1~BZDLlgA@ZlBLja<eqxGqQECb(a1wLC?#|3h z^()OyN-YXWOv*_G1wwvuVoq3MQ6`8F6=W&N$Sh`L5cUCuEK2ZNgWRLQ!=T8Z#K^#r zo?7CZlUNK=s-cPGC$OM37lR6e8asn3BLhF!)!+aCOYtzMGiWd}@WJ%^<R_-27BMnN zVwwVxvgTsYV$fk{&}L*1MKcScfQLbsL64C^I6bu_D784hv?w{%u{gM-C^a#ckwH@f z$!*XWfI2rbU*9vYptJ;{)S8{afRRBAY(r+gzEf#hT53^hN>D1udF%{Ej0}=6IV4>W zX)Xps1`|+3nKCj+KrKWwT{Db}L7%}Kq{xDiK^UP3VuH117zcwDBLkxq7lRFh9Xo?9 zN=k+}oQJ`l!GV#1wYVTBvxJdB9cl<TY#}PFHKQ@T%gx}#;KI(}%*enC_5nBr`6d?d zFt{?fF)}b0l$J0uSRfk)$vD<XMnOfOAqTb*Dg^SD2M>cMgBK$MM^S2Gice-<DkFmk zN_0Y92U6?9!{7@_psdL``NgSR4E_v(><j^n48mZyflUs{D9SGfB}pEJAckN@2HwP! zl;F~Wf}+&o;?xvG5Th!#1_f~_LpVD_7|b+K9QeCdB&QaXWaj7bFhqbX<}WD9%qs~l zNleZTDN0OEWn^FiC3sPYZ$Vm+5(Ogz8^}+f1S$bnfSNX}85vk|z<y>eNGvJ=We6;h zz{tRu%E*9Z3Bp~Vk_YS@-^2oNCS+$wLG}T{IgAWEiKQhOpezk4@31EUh%>=q0}Xb~ zC{Pl};9<yQ$YNw*PERdiWKhEr-&kYUh9QTCA(tVKk%29>uoPU9h+@+l1uZP|5_3}- z88`|Oi;K(ii&7XFxPrl1(k&BI<bVrpnEUlWQO=;qz{tSNz`(%7AjQDSz{bGHzz*hd zFff4%H3mio9x$Jmfti63R2VWaG6*m*FnEFa3=AS#+ZhD4b~6Y^Zf6kP${?n-jX`1~ zScfzN1A`C)3j+g#C<6<FFatk>7=ti_ID-rW0|O5OBLf422!kwx99XRs13$!E#vBG# zunRi0wlT<WV^9|2*v6pg!|2QCx0^vfayNrvr1o|O<LwM)RxHaIR3%x3EVnUOTd_&9 z?PFcQAgZ;6K}?d3*+`O&#b_skBQry|B+E7i_ed+&<NvQovK(VD2JyX@GidvQcpPA! z&VE0g;|v_SzRMYSb##|9aOmi6WAM}2@2j(oA!H*1GlLRC5JNlz1A`z#4nqzD0|PHZ z6GIb2C<8MC$d6hKTnr2hQVhHdG7L%#atx{r@(g+m3Jj(UiVW@yatuKXDh$mGstoN6 z>R`WnK>P>wJ1;{uLnK2K10#bHg9k%2Lkt58gDQg(Lo5Ru11p0+12dGR#~{fN#}LoJ z#?Z{b!jQm_$iT#q#K6E{!@&8UL6w1xoq>^^A(@@QAB^<b8EhCBelaM9vorYrV&HOQ zXYl9b{LjG1zywhUQXR^|z{rrwkOm2P244nda7y6U0fnOWPKI<QhHVVlYrqi%@+c^A kFfeF=J)r<m3iSj713yDPIPrj31q^HqObm<+g<zdU0Qn*H3;+NC literal 0 HcmV?d00001 diff --git a/app/bin/main/brickbreaker/App.class b/app/bin/main/brickbreaker/App.class index f13098a0863b3710e9822c487f35c5d3554fe3dc..8cace8824ecd09e79d77dc4de863b9861aa27d91 100644 GIT binary patch delta 372 zcmZ3=zLbsY)W2Q(7#J9A8O$bfol)ju5MU7DVGv~yV`ShgPAzfDFU?CSW@KR3@bvWb z)C}WbkeD3ED8eSi!ywHdGdY`4T}_UML7qW@k%6Z;wInFDII}7-DJPYYfkh)qGYn*$ z5)XqigUaOdj7rJu3~G!Ff=NZ0$=OLosfpRCMf$#}d8J$ostg)D46F>Aj11x$K3R!n zi52?A<(YZu`d)5DiMgrP5R<fd7<3re7#Ua!5|gt*M(gn~=!2~0Do!m4%Ph`J%1NE9 z$7DCTn<=Nhn}L;qiGhK^d^dwY<aP!jA8i3H0WLwNJ%UUT+Zcqkg~YcpNNO{0W02Km z+s2@{n?Y53JA=CRHU=$imTe5W8yOfFm>9Si7#P$TI2jlixEMGXco@VOco}3E_!tx! z_!-m~1Q>J~gc%GO#2CyN#2L657#PGLRx%hch#N96FmN#FGZ--#GcYnRGMIo3Gz9=c CqC(RE delta 472 zcmZ3=wv?Ug)W2Q(7#J9A8EhtUok?P65Mg8x%1SIttk5qm&&*5L_X<eNOU>b85N6<H zXAoy(5KJn{OwLX!N=?j8Ez<W*%`4?%5Mz+!VPIvDVq_54@Ile+R+N~VYONW@#UQ{S z!^0rUAUE-WgtP)91FsXv7zHPYIUs2z9tLFwmC3@4>TGH}4C)LTlN}hPWVLu0v>7xQ z8Mum5OTsdXGm~;sL5g*G81xwQCnqo}*@C!+JPbw*#*7Tii76?J3|bIJ=qHw!=sV}< z7Ubup=9O4$f?b9tIQc1~oeXOM$cu~&B48D$9-pkhlwZG?ft7)ofq}tsH-kXrb_OAz z-3-E!+ZjZCcQc4-Z)cFu7T^-#5@gyV$P}@SL0Vf#ej9_LHuE+HRc)4S44T?(+Zc4T zb+$1Wgl}YEU|?e4Vqjp<0+U<}91PqH0t`G1;taeDstkM#+6?>*1`GlWrVN4%Rt!Q6 y4h+H!`rHf*3<?kzFqklyGB7Z3Fjz8}F_<$jG6*mjGFUKJGB7bPGFX9)w*~-;Uty*I diff --git a/app/bin/main/brickbreaker/GamePanel$1.class b/app/bin/main/brickbreaker/GamePanel$1.class index 8421a1fd7f25a943e1207fcf088755b10f1a4044..acfdd048ec7ef79bb90d7d467ca3b2bfe4aab472 100644 GIT binary patch delta 35 qcmeBS>tWjv$i!$qIfyA-(29YF!J0vo!G=MC!InXu!G7{CrXT=>AO_U{ delta 35 qcmeBS>tWjv$i(P4IfyA-(1n4A!IeRj!Hq$J!JR>#!E^F1rXT=^xCapc diff --git a/app/bin/main/brickbreaker/GamePanel$2.class b/app/bin/main/brickbreaker/GamePanel$2.class index ed5650947f630bb2f1ffef5792565667013f069a..d75f5e33e45e63f19b7cc5443982ab845f58cbd3 100644 GIT binary patch delta 35 qcmeBY>u1{##Kh=4IhZL@(2aqY!JR>z!Gl4H!IMFe!F%#vrXT=`{|7Mu delta 35 qcmeBY>u1{##Kh=3IhZL@Fo1!VA&^0wA&5bWA(%mtA$0OyrXT=~mj`VC diff --git a/app/bin/main/brickbreaker/GamePanel$3.class b/app/bin/main/brickbreaker/GamePanel$3.class index a1d6dea2d22ea9a08b095013d2ad0c2d33e33d62..27750c33eac6f1c9fa7100ada6acdbf682a5271f 100644 GIT binary patch delta 69 zcmX@XbAo5XEfz-q$+uZ78D~xwWu2!R#2~^D%pk)M!l1$s%Amy%#$d(}&Je~B!4Ss~ Z$xy-&#Zbc#%`lT8mSF)y{Nx9$831tB5Yhku delta 69 zcmX@XbAo5XEf&Ve$+uZ78D~uvWu2!R!yv*C%OJxL$DqOx&!EMSz+lFZ$PmVm#1O}j Z%uvFR!cfDI$}p25onZk(=Hv&g832G65mf*H diff --git a/app/bin/main/brickbreaker/GamePanel.class b/app/bin/main/brickbreaker/GamePanel.class index 1b9496e8de4716ab5c577a91a1108c2d9060aeab..d2cab2d02e3d1ccf8f0ccc1437f1b625d1bbb109 100644 GIT binary patch delta 4506 zcmeBhTxBhA>ff$?3=9mmj8oVdm>3zvCM$A?ZB%n&oV=b<Csdw?L7G8<k%3u5GmMjg zkwJ-vft`T^#8Tm5;DoT$co?`CxItnXJPf=LmKF~KAB3gD!ypJ@>G3cKF>tdp7)&-` zlJM7OkOyfo=3x+K5aD1jWn^IY4O4K+&&dP{oAWS;Ge~eSSTZuOD_c03m>L>$F<3L$ zvNPB)GVo<3mL=*ZmY3)|=jY@X@i5pi*iT-_WEA1Z$RL<hl$o5JRFs;Som!;tl$evl z#o)l;4DyBxBZGv7CkXhU8epv%#?9cy;K9z|4l}&8Br`|fC$qSOhryG<YqB=85|0lL z0}sggevAzIlmGL{OfF>>W%Ff_XJ-hUJb_t(BY+_oWJ}289n3}oVLS|y3{qSSj0_Px z43P{`lYcQwvBmH(#4<!pmSRzqk7r~M1UaHYzqmXzFI_(*GdHz}iy@975oAWv<R}&` zs}vpveg*-MU>XlYIw%%ci%SxVO1Ky@8M4_KvKSeJkd5$iD@x2w1-Un8@;(+rwmcq& zd<KQdUs=v@f!tBe!%)LeJ2{q3kFB1Ep@E@s@<cXW<z|Lfc7_&422o^_yi+TKON#Qd zQ+XKL7}_U4WYah3WMtsT%`Z#!Nlh!^V(4b*WoPJNWDr5t<(XGdTH>2nz{AkT&_CIM z-JEgaWH}BgZbL4H2@I1#-kLIbF1rHfG=>@M4AU7IL?<uc5M>3ao;mpeyPm*oMg~rh z6+xNl871rtb0^Dj$O_J3n9RYjfRTaKHLoPKh@D{($VfJ0E{25+lPBkJRCurEVOYVi z5)^%Fc^K9)tY>6k&n$M$Ehwo3C)y|uhK-C2obHLasS5sOsYRR&)(o3@7`8B!GcvF` z`8YazgTiJTC@pWFtj}p%zmt)H7vw8&@^Z`1E8$|;!LS?T`aO&c;u?^YlarX2t{+@d zl$n=q?dho*#>KFY;Q%|serTkE^|}`&7Gz{57xOS2WH`jgz+RkM0y2(~K?rIHDE)#& ztTn?p7>+P9hy)a+7CRR!fPJb^lCKa9iR^t0$9NcyGwfkx;7Tb<EQeSN^2bRYhErgF zq!*>8=7HRBhKJ!S!@0?NT*?aj7%uQITx7V!$iR`7nUfQgnq0!jzz$CSnqlk=S0)#7 zNpJ)(T;pN5&TwP$L@pIcYld4q47WiBvLxk{rh<a>E)T;!hWnGxaj7XhWO&TZ@CcgZ z^ugJ~vm~`Bu>_R=o-jO}EW)k8;lS{mhv5ao%gHv}T5PWw-m){inViEdq4JJ_n~{OB zlAGZn!v`LQkD#Q?R+I{gY*6O>%){`7L1FTIZfOe#hHoGTtput3!Nc$q9G@A9#eS(3 zB_J>V=3)2)av^I{PGWMl5Ca3lKOTnvj0}@Maa#&mGcxlqNHel9GO%cPYKCzzvQ4(- zdCw*cQXw+gh*yVEY;ruW<m4Z`t|<<T(maeZ3@;fOc+yi#Tr!JNlS?x5^Vk{XU|s}8 z4=B_U^U`xtIT>CvD)2BWg8fm!$>6}K%)_Vx;;|Jareu~Db1}*?s)16;B@j!4hf$MJ zYw|)qO-%<z9UewqMm<Ibo?;}67#UbKKq-flA%M|<htZJHX!2)115Oi0Gj>K(Mh3;n z|M?W_c^J(>0l<--TH;ykky*mUXu|NEi_wJ9iigpf(T0%$Bom&QQj!5q>z*JfJ03=R zkQ8TnYKccGC@X<P9eEg?7@`;%IEoQQF}m<Dx`LE~ObJWODNW^MG+}h-Vf0}1WMtsV zNSu6zU%|(l(U+ak2bQqG3EwF{KPNRYkB89@<T{=t2p4Pu7h?cp5IbWatQZBW_f0Ix z;9(4A44G^ppzLVP7{$XF4T?k-_aMhePDWWq1rQO(!x#?=P}XvghqxFV7!!FIlR!y@ z1(Z;@8Qd6Cco<U|(<aXm&}7TtVa#Mu*nC<*kCCOGkwI$m0|BYY;zGu3EsSmKjIEOc zgfv(f{xh~ut`V9i)Xc%y#mK-BoSa{jYNf!)!PqldM_7fie{!I(7Ry9N2D!<NLUNPm z3M(=4Og<o-S<lYE$RN!i!@$TO%fP@G$iT_K!oa|=RckwgoEGy|21O8|3?fvu1h}>` zsA~!EZDr8Z65!a%psgjyXttF>S8F$ee&lur!>tTPT0$mU8O($%b}(4^YHeXK+Rfk) zDaaTn$asiV;Gckq&UOZ;oeZu_4B=W@TNu=}wlG9$W^85f-p$|}xt+n^Pir?rKqOQ~ zQ+GQ<&{l>}EtYKz;abew7^1ayGsJ;pwY9c0By43!*4o05yp17MTWcFbM!42ChTM$| z3=B*R1q=)fQ4C^}Wkj{>RT!KZR2dQ&)EIIZG#E-5G#NS>v>5srv>7Hd=rAm1&}CS~ zpvSO*L7!m@g8@S!0|SE=#QzLM48;r}u$7^Np_GA<!I`0mp^TxNfr+7%!GWQIp^|}_ zfeBRUKthgT2LmeuGstEw)@=+`K3dxt>U_291yq@LFf<8uY-8xs5$f2@Fd<TFJHw=H z3{$lQ)WI^dz%sLTGt2?W%md4Cfo0}{W#;c@SO}6?yp3Th!h32AoD2*M#tdu>CJfvR zW(?vC<_xL~P7H<&&J6Ypehl6W{tS@}i4651A1OfG1@#ddLkPnXhNTRQ4BQO<49ggn zGcYl*fT|UUKbYhg*cezD7#Kygw6`;?0>$A@hBb@~Ga2}_w1qZoV%W5eVe3Y%EewjY z7?iYkGwc9Gh#8B3$aaQZ+Zgt03mq0@cqYggw~gWGM(s`Y3@5fRoYrPx5oFpT$P}=R z;k?!shEVMT441btT-Dyha1$h}wS_@fkV#D-ML-0iz-TAK9YzM<<qQToI~g7@G8|xV z@YCJK@XU%ul4T3SD?uiMB@8?|I~m?HGAw7{(cQ-INmqLt!&jZ14Br_UX8k{_y@}x$ z$l%=!^*bVkOjraYp^nqq!l1f~;V%P&AQOjx+%|@zT3Z;r=Q4=zX0VPFW@OyX$mFM` zEzHQOyNzKhlFxaOe9pkYzyeNTO$-VQ3=Am@tPH6Pf(&U4(hTVgG7MP^$_&{IrVKd@ zjtsdBPW22044w>y4519g3<(Tn4CxHz3}p<J3=Is`49yHR4807s43in^8RjuGFf3tc zWLVD7%&?lFjbQ^rHN#GZPKE;vT?`i(x)~lZ^fJ6;=wtZ8(9iIfVG<)J!(>KbhH2mg zYsbI_iY{pMGBAoTvNLipFfueSOku3&WaMICV(4X1X5?n%VPIyM%pl9i%gD#T!tjNG z6P%uz8TlC)7<ix>I2i>Pm>2~a7#O4&*kx4zFgUO?Jp9X`%no9_{>i}co54qvfsuie zVLK$fFl=C82j`doEtahe%G$b+fQKfFdI33T(CdK1o>7Q_L6BjeAfwJUhND<gk1(Ss zBKg2Gvm66E0|UcM23Cey3|tJe8DtpdFc>h*V{l@a&*0Cn5F84SY#RUz1%?1{DAY4D zFfar#iZe(sFo9SQA2TpAN-#=7+|P2HfrCMefq_XMl%{7gsX^i$l>VTln%{E9zwmSj zN`j!2$STRQjZw;qZ8xKAq$KMWMtMorEex+DS++1Lfr;&msvxO)MB3)q&ZxSLQGF(Z ztR$Nx+ZKjbC0junB-uckLHuou+RSF`%NYxp%{Z1bMu0NP7Djzhb|X;^BP&ix&TWjw zvl#6_w1pKH$Z$z6kX9~`y`0+^EkQE2+Zk1@xWSTON7ZAv%8EylN0J-tkk68wEZZ0z zv?8}Kc(bHzW$*^ER6)i#Cv0U<mE_#Q=(df~YbHa_4n}_w#?b6OGhSvhzU2(1V1D@Y zc?|3<%Nbah&G^v;1lY_3MfqnkOjebVsgJZ00aXJC=ZXr63WGyQQe-=Wla;8hq$s3P zXyIcN<rC#y_`eGrrUJqVlH6MuW0o*TfcY#CE=VjkVIhMcI3OA2OSUq~FK6Hb^B}?6 z!oeuY0S!RrdZT>{|IKe<XB1_J3hi6?uTzo*CFDWTnE)+7{xN{kfbLGlWKcb|jWK;A zJkxJu&}Cp?Sjxc8u#7>FVL5{&!wLo&hLsHJ;A&(wgDJyWh75*v48;uV8JZY2F?29& zW~lFD*upTEVJpK@hHVUM7<Mq6WZ22@jA1v!2ZlWi-x&5XGBE68<YPF%D9Lb;QJLWo zqb9>)Mk|IRjNS}K8T}ZJF~%|+XUt(Z!C1&}lChuR6ypqrLyU_U&M_WmIL~;A;R54T zhKr037&bG0V%WsQ#BiNSkl_ZC7{dxCd4^j|S`2sVne-U$f%C{cNJ59@5hi`cEXHgG zMg~D9Nrrpif<lr>kTHirgn^kso$)=m$Y5d6V|)QFGFTZ*86Ps{GV(F7F|;z)GUhRG zGq5vsGo~}<GjKC-FwA9iW-MSVWZ-02!)U@-#K_0M#c+~QoUy)`v4nw};Tgj(#!|)- z1|CLbhI+;_25tskMm2^S#&QO320lhBhB(Fw1`Y;(MsEgR#!3bb1_4Gt1~0}c25tsH z##jbx#%cy`1|h~A1|7y425tsn#zF>laBdc1>}TL)tYze35CxZHVhl`B4+$_ZF-S5A z1~cX`h%qpO3$;@WVt*NA*cl$OGr0X@NQIPY><q8}Ft9R$@PCF`4E*d2jO>hc5Jhkm zjEwAzChQEa*%@Wo8D%H)%d5x{P!cFFT#u=Qfr054gW!J#1qK#mdl(pgG6*v;GR$UB zfRsxN&J4^9pwdeaRIVz5vZk(pQNmURT~KO-G;;XB75hU5R)$9m0t}DAaSSTRL1iqs z`BKlo$k2)3#1t$hK4V~Ic+Mce@B-6B1{TH!P`S+5$k@cdz`)1A#Mr^W$k+)cyBT{K w7#NfoSQsXNT22fMY7BEA42Fdenz4^@0^=kGNyf<x3=A9$%nTD4<}fS-0C~Uj(*OVf delta 5138 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 diff --git a/app/bin/main/brickbreaker/LoginFrame$1.class b/app/bin/main/brickbreaker/LoginFrame$1.class new file mode 100644 index 0000000000000000000000000000000000000000..382f95c9d2152b82cdfe8936829c743fda3b9e14 GIT binary patch literal 984 zcmX^0Z`VEs1_oOOBX$NRMh3~GqRiy%q@vWs?9?KCpZxU9Jh!66+*B1qb_Nzk2I;KC zvPAvF@)G^jvedj1ec$}j;#9|!#DbF4B1Q(bl8nq^6$3^FNgo`>STi!P*<|Krme?^e z$Y|hHr5VP^z~Y>rlFG@z$iU6Rz{<eJ#lXzK%frCVz{kkItN~KM?~|FA>Q|bZlv)&$ zn3R*s$ROmCpPZNzmROVt;zI>lK#pQ$kj7=1ilH?l15Yl<Bd&QRsYR(Nj0|!bKG;0! z3i7kHW*8@f7=r{mgE%9DI1YdEFi0{;F*5KJmnP+AmN=D`l;r0zGKhjrt<Wzn&&*5L z_ksvpgG`g*VUT5zV`LD>$S+GRf=D>$=j0bLG6;Y*fx{duV$H>%z@Ws=pvcG|400rz zaXbvl3@VHayv3;{PKn9c=|%aac`1wx!bm=X7y}AI=G3whP|$$P0o#BSs}RpJGH^qJ zrXsT>H3j5UO&$g<kW;ynz`g<-#>l`GoL^d$oa&YdiU)o~y3qp}&B(y-nwOlDU!0kj z?weYYk)OiDpbv^jK2TC{&d)8#&r8iKDQ0Bg@yyFhEppCDEG|whW@O;-OD!(($S*Eo zP+(wWU}j)oU=$Dlr3MBDFpr&qgMpEOlYxQ3gn@~HiGhKEOG|qz1DDoz2A+)!3=B*R z{0s~XYz&MH3=HlJ0t^fcJYY5#gCK(t$TS9F1`((UUQiQ+w6-vCZDA0FP}18N<Pj!u zf$i{Q5M=NIn<fV43qeg|U=U(ZWl&>aWME`aCt$7y7IS?W1R4DBn#;nV4fd4|gDwLD X0}F!~gC2tc$k$*y8Nk30tU?R`$Zgsh literal 0 HcmV?d00001 diff --git a/app/bin/main/brickbreaker/LoginFrame$2.class b/app/bin/main/brickbreaker/LoginFrame$2.class new file mode 100644 index 0000000000000000000000000000000000000000..b303f091587d2359facd2ef8188a175837ff3a1c GIT binary patch literal 982 zcmX^0Z`VEs1_oOOBX$NRMh3~GqRiy%q@vWs?9?KCpZxU9Jh!66+*B1Kb_Nzk2I;KC zvPAvF@)G^jvedj1ec$}j;#9|!#DbF4B1Q(bl8nq^6$3^FNgo`>STi!P*<|Krme?^e z$Y|hHr5VP^z~Y>rlFG@z$iU6Rz{<eJ#lXzK%frCVz{kkItN~KM?~|FA>Q|bZlv)&$ zn3R*s$ROmCpPZNzmROVt;zI>lK#pQ$kj7=1ijg%V15Yl<Bd&QRsYR(Nj0|!bKG;0! z3i7kHW*8@f7=r{mgE%9DI1YdEFi0{;F*0x^B_?M(m6nv`=P@#fg3YYZFD}o_OV{^; z2wQ{9lHp;HWsqZJ5Xi_cOD%#(IOpf&7cnvjfHi?b94unZ#h}2T#Ll3|$RG@IBARhL z49W~Dj10WRsU=Q{$=T^e`K5U&j10m^{(%?+3P9%6vJz0hfXo5gfE1??uQD=lLjtBE zvm`YI<Wx-_1}%_Nxs$-Y0vpE2z!jWdT9lmXmI;alenhI#0~yW8!0(!uoReRinV0UH zT9T2U!o#2sibg(ALU7K{Ey&MH%_}KpWZ?14%S$bC&PgmTPAz6+;P6W=F7e1OE@4n$ zU}RusU|?Vr5CEkG1_m&Xoq>aak%5zefx(1<iGhiMfq_d)dn*H%)^-M-jSLJ7Obq-C z3=C`xj0_A6feZo+3=BMAHWz~+gAm9x24Myfs0m(B6NI$3FmP>Q5QR|E+Zf~#CUJr7 z2xbsu2mzZW2IdPvO=DmXVo+sJV_;-pWKbtyt_Bu!!x;n_BJi5a!k`WIl@5b00|NsK VgBXJzg8|6bU^^MWz!0oL3;>(R*+~EZ literal 0 HcmV?d00001 diff --git a/app/bin/main/brickbreaker/LoginFrame.class b/app/bin/main/brickbreaker/LoginFrame.class index 012d86a8df1bef8d703b901d7ca201b98df8516c..627b26806f4310de5a0aaf3530c940de005213ea 100644 GIT binary patch literal 5501 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 LqGDp0&9DRjkmR3& literal 3438 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 diff --git a/app/bin/main/brickbreaker/Menu$1.class b/app/bin/main/brickbreaker/Menu$1.class index 95053ba712d0b6fdd168b6ce75009cff0a90a813..8ccd6e2b0c6789e5df232a42a0ca0cc96a4ad5eb 100644 GIT binary patch delta 449 zcmZ3>wwIOb)W2Q(7#J9A8B`~7$r%Y`C6*=X=OpH(>-#5Vr6!lKGq5o-$bv-^%S-fA z%Tn`7^c|B+GV}9%GK))6^Cmj^3GnhTurqLQF)%am^DuBS2uxhySI?gaRuqt0l$KwV zo0`JNAg|$r)f`ulnbw+NTnrKnQtS+pj0}QFMVZOjNkyrN*{MbPzNvYoJPgtd0*nm& zd5LA2>4_z&A^AS}>6v+q49uxzC5#L*7$$RrZHE{=c@v{9vl4^A<VTD~^^6Rx42%K- zAO|xrFfcJNFmN((F)%W4GcYiiFff5dxU{slGVo|^XW-iiRwKy3z`(}9$iTo5${@tR zz`z4$b1?`rh%hiPFfxcTh(S$oU|<BBz@fE;foB_oI6^-cSUlW^ft?`&Y={_GfCFj> v0|N(x41+8KBLfSA9N1EM1_cHN1{MYh21N#C1_rPrK~7*`U|>)ItB?QyRjyLH literal 813 zcmX^0Z`VEs1_oOOb#?|OMh4-eqRiy%q@vWs?9?KC-_*QP6+?Cg7Dfi?ti-ZJ{lxMT z{nWD5yb^ui{L<o7$CSi^lGGwb2DXxn%wiP-Mh0OY3<Ing8Q5$x^D;~97#YMgu*hqM zF*2|?=clA{GB7f5^DwY7uyHXkGw|{-uru&6GB9g^6!80G=B4_T<|d^Ug(N2Bq%txH z`Q#@j=7c2{WrFxnK^Blh7#Tz{tx++wW@O;W1v%R_uOzi7HHDEuPQwSAw_HI!wAKvc zVi04HU}q3#WDvyg6%T_Xg9syoR8eYrW^qYskyB|&Nq!zURN%%lr<Rp4GDzdGgOPz7 z;-ZSolGGHCeR4bu@*smHu^9|j#mK-FoL^d$oa&Yd3I<M4B<X>?!N|bxnwOlDU!0kj z?weYYk)OiDpaKd(K2Yd8=jRsW=cVSA6f-jLc;@A$7CGl678j=$Gcs`ar52ZX<QJDP zC@?TGFf%YPFbW8OqJe<{%wuQZU|?k6WME)0VPIllVqjq4($e0_z@@dFfoCHF0|OHS zKLY~;8v`Q)1A{q(00RR9517rxAjlvDGL1o)K?G`oBh&;=tt|{(+S?dJ5e9I9jkaXq zV6XxkA_nGjLJeVH;AD_ukY-?HU}TWNX`C#&aW)Jb47PZUV_{GL`$3UGiGhKEg+Yu# SnL!ogN3c~4V4wz8AqD{U!l)?# diff --git a/app/bin/main/brickbreaker/Menu$2.class b/app/bin/main/brickbreaker/Menu$2.class index 68df9309fcc0d2cd2b8f0c398570e563d1dff986..7b51574bcd850f51f9e0d7e4b060e397620d596d 100644 GIT binary patch literal 932 zcmX^0Z`VEs1_oOO19k=`Mh4-eqRiy%q@vWs?9?KC-_*QP6(e>A7Dfi?ti-ZJ{lxMT z{nWD5yb^ui{L<o7$CSi^lGGwb2DXxn%wiP-Mh0OY3<Ing8Q5$x^D;~97#YMgu*hqM zF*2|?=clA{GB7f5^DwY7uyHXkGw|{-uru&6GB9g^6!80G=B4_T<|d^Ug(N2Bq%txH z`Q#@j=7c2{WrFxnK^Blh7#Tz{tx++uW@O;W1v%R_uOzi7HHDEuPQwSAw_HI!wAKvc zWDsMJU}q3#WDvyg6%T_XgA^kJUr}m$W^qYskyB|&Nq!#4W{`;$`o-m$dFlFI5MgU} z1{p>MK9CGJ2%YnD@{70_q#5Kuew1fqVAJsQ^wbRFVo+pIW@k`hWDo|aMKgtmL4`q; zk%6~3wZthgIXk^5zcep}kwF;A6JUd_LE*)mT2{iyAdSa=j11h6(5T2P0R;wEaDHh~ za;jS<C~!GJQLhJb1S12#YhH3resN}Ax^HSpMt%wpgDxmu_&{;$oS$2epO>0fQq0J} z<C&M2TI8IQSX`W1%*epums(unkzZWGpuoV$z|6qFz$hR9id+T;Fpr&qgMpEOlYxQ3 zgn@~HiGhKEOG|qz1DDoz2A+)!3=B*R{0s~XYz&MH3=Fvp0t^fcJYY5#gCK(t$TS9F z1`((UfedV56C|~^FmP>Q5Z%on9Vs9pkRr&?vz<Y98-oJEKrXPtd<F@I0<fWCV7?^O zPzDA`1~mqC21W)(1`W9JK~UqRkd0RnWLP7}@Cdv4MGTS*#YpB$!OfR~n$N<Z3HGEG bgEj*L0}F!~gARipC=kGQGk}3UScMn>aFxcx delta 464 zcmZ3&eukCn)W2Q(7#J9A8B`~7$r%Y`C6*=X=OpH(>-#5Vr6!lKGq5o-$bv-^%S-fA z%Tn`7^c|B+GV}9%GK))6^Cmj^3GnhTurqLQF)%am^DuBS2uxhySI?gaRuqt0l$KwV zo0`JNAg|$r)f`ulnbw+NTnrKnQtS+pj0}QFMVZOjNkyrN*{MbPzNvYoJPgtdVvG#3 zMXBi^TZ^1ZOG@(dAnri2f;qLUgponUCo561EKwib!4Qikb1>;LD=`R6wqP=<XJlYy zU=$DlIiG=nfr){Efs=uYfsuimfq}t<fe9?arKP=<fk$gQ1K&ol8bJmI1~vvp1_lOu z1|bFp1|Be*i$Rz{gn@y9kwKI}3~GWS)C5kgEet%`+Ze<V25^Cm_H|_7U~mGPA_f-V wgqi|!hYW)(10w?qgB;jac?Jar1_l-e2?j+5Wd;VYD?x5xU|?WS0jrPz0M^D=SpWb4 diff --git a/app/bin/main/brickbreaker/Menu$3.class b/app/bin/main/brickbreaker/Menu$3.class index e1f98e2eae7ea3655926c25a6e886e20c679186c..f704c0403e9ec14722778141dc7936146c833635 100644 GIT binary patch delta 23 ecmX@idYE;CDHCJuWHTlQ)_MjGhK9-2OdbGJ#s*~o delta 23 ecmX@idYE;CDHCJ(WHTlQ)<^~phN#KaOdbGFcm?wS diff --git a/app/bin/main/brickbreaker/Menu$4.class b/app/bin/main/brickbreaker/Menu$4.class index 3c99d6aa4fe10550de84c77b2170d9eb0aa0ec53..0bfd40a606ae99a0e9b915689e468a86a6c3bdcb 100644 GIT binary patch delta 23 ecmX@kdYpBGB@<)UWGf~I)*c29hTh5bOdbGMcLtyU delta 23 ecmX@kdYpBGB@<)HWGf~I)-(nVhV;qxOdbGIDF!Y8 diff --git a/app/bin/main/brickbreaker/Menu$5.class b/app/bin/main/brickbreaker/Menu$5.class deleted file mode 100644 index 994b65eeed87fb9149c33b39cc53280046e19a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1374 zcmX^0Z`VEs1_oOOS9S&_Mh4-eqRiy%q@vWs?9?KC-_*QP6;pNw7Dfhvti-ZJ{hY+S zbbbG%tkmQZb_O;^1{D<Lo_QsyMQMr2sm1#4iMgr%NyVu}WvNAs3~VJCnZ+swj10m) zC>lWKTQf4S*<|Krme?^eh-qMv*9>E1U~$e*N#$f<WZ>mtU}xaqVqj+A=V9Pv5MX3r z)&MEs_sPsl^()OyN-YXWOv*`RWDxSnPfpAUODxI+@u7k&AcrtAh+<l!VrtFEz?Gi| zb~xD4EE=AgVVn#S3{vb2k|+TXTv=R_n#;o=%^<_bz?@%N0x}UCKAHLY0Y#a4CBY>{ zsfoGPLJSNHay$(33<``4;<<_0sm}R%$%!T5nI##{`FX`9iFqZ(j0~b0o|-;j?cm@I zE-A{)OSk4?P-0MFXHaHj5C+Sk8qLF?%Am%`z+M2dEhi6T2&NIBfZ<BZ%uCD(PR=h% zWn^IVWMtrk_%S>)Pl$n$L5`7uD>%QjC^^+F6BKHkpeWG;S;)x1@0ypKlV6;fm+qTd zl98Xn&Y;i8AczrxJPd{mMvM$1>7}W~C637@nfZAEsYPk|MY*Xdj12M`5O*b(m*}UK zrRJ6BLzK9J*w!Ey3OMEGmlT&2B^E%eDdu7@WiV%FFk@s;0XYPc=rZ%l^0QO*A%O!4 zMz_S|lKi4dQ21IfGR%Nl1P()}YKVaziFqkGsl_Tj`T5zU1=bMvfR#Z^Ll!~N7*bh~ ziYy6L9*txIBrjMa#~;)P=fs?x;LMU#YkoEc6AlJzMh0n6+EU0bOD$3;&n(GMNK_~W zMT<gyngSySgDoS2WMqD+LV123rZgi1k7r(9YLRnJVsUY5F*}0;BZDeN;9&DEJA)G= zgB*UPj0|j$uwi82@JlT&@yIVOVNhUTWMF1sWME}r6c7MqItB&?W(EcZP6jRpMh0#M z1_l!bCI%)31_mxI?X3(vTH6`;HZm|UFfj-+Ffgz&FfuSO%w_=P03I-#i$Rz{gn@y9 zkwKI}3~GWa12fnJ-c1bR(z_UB85p)PC?X8u0!z+g;9-~#Hb@N2=Y<-?z`)C(&Y;1- z$iT>;iOWbWtVS+o;9*#T*GN_dZLnW-7<3sJ7+4te7z`MU85kJ&7?>C=85kL?z@!a> d9RmY{5Cap~hYSo14E79;49*Oa3@%{ZdH|O?PeT9z diff --git a/app/bin/main/brickbreaker/Menu.class b/app/bin/main/brickbreaker/Menu.class index 0e10f4f6427890986fdd776258506ebc93337e0e..2e8216aaec1c650f58276e3247543fe0529e22d1 100644 GIT binary patch literal 7402 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 literal 5748 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 IEMfQw0A`IW)&Kwi diff --git a/app/bin/main/brickbreaker/ScoringSystem.class b/app/bin/main/brickbreaker/ScoringSystem.class new file mode 100644 index 0000000000000000000000000000000000000000..723fc5f1b464eaef8df21a6e717a5ed519898265 GIT binary patch literal 1255 zcmX^0Z`VEs1_oOOEp`SbMh2;*qRiy%q@vWs?9?Lt;N<+G%)IpA%HopLTy_Q)Mh1bb z#Ii*FoW#6zegCAa)Z`LI2G-)_{GwDw21ZXt2F{Gk^bC-$R7M820Dn)vkYGjzUg!M0 z;*!L?lCZ>_(o|*!1_nk(20jl@caLCa{~*_RH%}i|Mg}1tgweqzAZx8T82A_&6pD+I z^>Y(5^Yn{Si}Op1l2eQILAHQx)hnqeVPs&l$;`_vv14Rl*3b-NWMFa5Pf2BG5N2fH zM;Pf^RFq%D!63@WkQ<r@GAXAlHANvgKer$=C$S_mKTn~cC_gDDHP=dki!&r6RUsuc zIVZ6wHASHyF*!RiJyk(TNg*XawOAo9zeFK7u_QS|p(G<!A+@3)HMs;?8FC0Jad9yS zF^Kap@H0p-GKgwm`Vr({exJ;|RKL>Pq|~C2#H5^5P+;UIC+37D7G;9?P(hZGjLc$2 z1{oh@8&KoOnvsDwCqFU80}&0(8k(LQ3<``4iUj@5$iQ2iSeA;UnMK1B<Unq)jZQ`R z*{OMq3?j)Hsma-H`9*%I<w$C|ic*VHOQ4a@kq&3_q^Fi3D+>lkqFW}|pCIM%6s8A? zE(S#gMg~wKVPRlmU}a!qU|?WkU<cDu3>*w>42%q%U@<NRDF$u^9yp(ufrEjOfuBKu zfssLwfq}t<fti7kfq{W*H-k{5kjQohvHf6uk_-%BQy3T+8Kf8(z$P#-a4|?T$bjW# z8RW2<AdkfaVXP)7GAJRLzyx;#HWTErn83)OjKde$Owhn$0uzG@2`1=aF@cdml>`&a Zu$rJoLP%O;H9?&O6YQ~?paG6kO#uCH>eT=M literal 0 HcmV?d00001 diff --git a/app/bin/main/highscore.txt b/app/bin/main/highscore.txt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/app/bin/main/highscore.txt @@ -0,0 +1 @@ +0 diff --git a/app/src/main/java/resources/user.txt b/app/bin/main/resources/user.txt similarity index 100% rename from app/src/main/java/resources/user.txt rename to app/bin/main/resources/user.txt diff --git a/app/bin/main/user.txt b/app/bin/main/user.txt new file mode 100644 index 0000000..e80d5a7 --- /dev/null +++ b/app/bin/main/user.txt @@ -0,0 +1 @@ +muna:2022 \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 55f0d4d..b8c6a0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -22,6 +22,7 @@ dependencies { // This dependency is used by the application. implementation 'com.google.guava:guava:30.1.1-jre' + implementation 'mysql:mysql-connector-java:8.0.28' } application { diff --git a/app/src/main/java/Auth/Authenticate.java b/app/src/main/java/Auth/Authenticate.java index 24f86a3..f564030 100644 --- a/app/src/main/java/Auth/Authenticate.java +++ b/app/src/main/java/Auth/Authenticate.java @@ -3,43 +3,43 @@ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */ package Auth; +import brickbreaker.App; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.HashMap; import java.util.Map; public class Authenticate { - - private static final String CREDENTIALS_FILE = "user.txt"; - - private Map<String, String> users = new HashMap<>(); - - public Authenticate() { - loadCredentials(); - } - - private void loadCredentials() { - InputStream is = getClass().getClassLoader().getResourceAsStream(CREDENTIALS_FILE); - - try (BufferedReader reader = new BufferedReader(new InputStreamReader(is))) { - String line; - while ((line = reader.readLine()) != null) { - String[] parts = line.split(":"); - if (parts.length == 2) { - users.put(parts[0], parts[1]); + public boolean login(String email, String password) { + try (Connection connection = DriverManager.getConnection(App.DB_URL, App.DB_USER, App.DB_PASSWORD)) { + String sql = "SELECT * FROM users WHERE email = ? AND password = ?"; + try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) { + preparedStatement.setString(1, email); + preparedStatement.setString(2, password); + ResultSet resultSet = preparedStatement.executeQuery(); + if (resultSet.next()) { + // User exists, return user details + int id = resultSet.getInt("id"); + String name = resultSet.getString("username"); + String fetchedEmail = resultSet.getString("email"); + User user = new User(id, name, fetchedEmail); + App.user = user; + return true; } } - } catch (IOException e) { - e.printStackTrace(); + } catch (SQLException e) { + System.err.println("Database Error: " + e.getMessage()); } - } - - public boolean authenticate(String username, String password) { - return password.equals(users.get(username)); + return false; } diff --git a/app/src/main/java/Auth/User.java b/app/src/main/java/Auth/User.java new file mode 100644 index 0000000..3bec6bf --- /dev/null +++ b/app/src/main/java/Auth/User.java @@ -0,0 +1,44 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package Auth; + +import brickbreaker.App; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +/** + * + * @author Suman + */ +public class User { + public int id; + public String name; + public String email; + + public User(int id, String name, String email) { + this.id = id; + this.name = name; + this.email = email; + } + + public Boolean register(String password) { + try (Connection connection = DriverManager.getConnection(App.DB_URL, App.DB_USER, App.DB_PASSWORD)) { + String sql = "INSERT INTO users (name, email, password) VALUES (?, ?, ?)"; + try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) { + preparedStatement.setString(1, name); + preparedStatement.setString(2, email); + preparedStatement.setString(3, password); + + int rowsAffected = preparedStatement.executeUpdate(); + return rowsAffected > 0; // Registration successful if rows are inserted + } + } catch (SQLException e) { + System.err.println("Database Error: " + e.getMessage()); + return false; // Registration failed due to an error + } + } +} diff --git a/app/src/main/java/brickbreaker/App.java b/app/src/main/java/brickbreaker/App.java index a0bcd25..c73fede 100644 --- a/app/src/main/java/brickbreaker/App.java +++ b/app/src/main/java/brickbreaker/App.java @@ -1,10 +1,19 @@ package brickbreaker; +import Auth.User; import javax.swing.JFrame; import javax.swing.JPanel; public class App { + public static User user; + public static final String DB_URL = "jdbc:mysql://localhost:3306/brick_breaker"; + public static final String DB_USER = "root"; + public static final String DB_PASSWORD = ""; + public static Menu mainMenu; + public static GamePanel gamePanel; + public static ScoringSystem scoreSystem = new ScoringSystem(); + public static void main(String[] args) { JFrame frame = new JFrame(); @@ -13,12 +22,11 @@ public class App { frame.setTitle("Brick Breaker"); frame.setResizable(false); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - new Menu(frame); - - // Call pack() after adding components + mainMenu = new Menu(frame); + gamePanel = new GamePanel(frame); + frame.pack(); - // Then, set the frame visible frame.setVisible(true); } } diff --git a/app/src/main/java/brickbreaker/GamePanel.java b/app/src/main/java/brickbreaker/GamePanel.java index 7866786..a3fa4f3 100644 --- a/app/src/main/java/brickbreaker/GamePanel.java +++ b/app/src/main/java/brickbreaker/GamePanel.java @@ -2,7 +2,6 @@ package brickbreaker; import brickbreaker.GameComponents.Brick; import brickbreaker.Interfaces.BrickFactory; -import brickbreaker.Interfaces.GameObserver; import brickbreaker.GameComponents.DefaultBrickFactory; import javax.swing.*; import java.awt.*; @@ -16,7 +15,7 @@ import java.util.List; public class GamePanel extends JPanel implements ActionListener { private boolean play = false; private boolean gameOver = false; - private int score = 0; + private ScoringSystem scoringSystem; private int totalBricks; private int rows = 10; @@ -29,34 +28,25 @@ public class GamePanel extends JPanel implements ActionListener { private List<Ball> balls = new ArrayList<>(); private String font = "MV Boli"; - + private JFrame frame; private GameMapBuilder gameMap; public GamePanel(JFrame frame) { Color color = Color.decode("#8B4513"); this.balls.add(new Ball(350, 450, 2, -2, 20, color)); this.totalBricks = rows * columns; - + this.frame = frame; BrickFactory brickfactory = new DefaultBrickFactory(); gameMap = new GameMapBuilder(rows, columns, brickfactory); setFocusable(true); setFocusTraversalKeysEnabled(false); timer = new Timer(delay, this); timer.start(); - frame.add(this); addKeyBindings(); + + scoringSystem = App.scoreSystem; } - private List<GameObserver> observers = new ArrayList<>(); - - public void addObserver(GameObserver observer) { - observers.add(observer); - } - - public void removeObserver(GameObserver observer) { - observers.remove(observer); - } - private void addKeyBindings() { InputMap inputMap = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); ActionMap actionMap = getActionMap(); @@ -89,13 +79,13 @@ public class GamePanel extends JPanel implements ActionListener { actionMap.put("Enter", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { - if (!play || !gameOver) { + if (!play || gameOver) { play = true; gameOver = false; Color color = Color.decode("#8B4513"); balls.clear(); balls.add(new Ball(350, 450, 2, -2, 20, color)); - score = 0; + scoringSystem.resetScore(); totalBricks = rows * columns; BrickFactory brickfactory = new DefaultBrickFactory(); gameMap = new GameMapBuilder(rows, columns, brickfactory); @@ -104,6 +94,18 @@ public class GamePanel extends JPanel implements ActionListener { } } }); + + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "ESC"); + JPanel thisPanel = this; + actionMap.put("ESC", new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + frame.remove(thisPanel); + App.mainMenu.show(); + frame.revalidate(); + frame.repaint(); + } + }); } protected void paintComponent(Graphics graphics) { @@ -146,8 +148,12 @@ public class GamePanel extends JPanel implements ActionListener { graphics.setColor(Color.black); graphics.setFont(new Font("MV Boli", Font.BOLD, 25)); - graphics.drawString("Score: " + score, 520, 30); + graphics.drawString("Score: " + scoringSystem.getScore(), 520, 30); + // Display the high score + graphics.setColor(Color.black); + graphics.setFont(new Font("MV Boli", Font.BOLD, 25)); + graphics.drawString("High Score: " + scoringSystem.getHighScore(), 10, 30); if (totalBricks <= 0) { Color color = new Color(0XFF6464); gameOver(graphics, "You Won", color); @@ -163,19 +169,12 @@ public class GamePanel extends JPanel implements ActionListener { gameOver = true; // Set the game over flag to true graphics.setColor(color); graphics.setFont(new Font(font, Font.BOLD, 30)); - graphics.drawString(gameOverText + ", Your Score: " + score, 190, 300); + graphics.drawString(gameOverText + ", Your Score: " + scoringSystem.getScore(), 190, 300); graphics.setFont(new Font(font, Font.BOLD, 20)); - graphics.drawString("Press Enter to Restart", 230, 350); - - // Notify observers about the game end - for (GameObserver observer : observers) { - if ("Game Over".equals(gameOverText)) { - observer.onGameOver(score); - } else if ("You Won".equals(gameOverText)) { - observer.onGameWin(score); - } - } + graphics.drawString("Press Enter to Restart or ESC to go back to main Menu", 100, 350); + + scoringSystem.checkForNewHighScore(); } @Override @@ -188,6 +187,7 @@ public class GamePanel extends JPanel implements ActionListener { Vector ballPosition = ball.getPosition(); Vector ballDirection = ball.getDirection(); + // Check ball and paddle collision if (new Rectangle(ballPosition.x, ballPosition.y, ball.radius, ball.radius).intersects(new Rectangle(paddle, 550, 100, 8))) { ballDirection.y = -ballDirection.y; ball.setDirection(ballDirection.x, ballDirection.y); @@ -205,7 +205,7 @@ public class GamePanel extends JPanel implements ActionListener { if (ballRect.intersects(brickRect)) { brick.setIsHit(true); totalBricks--; - score += brick.getValue(); + scoringSystem.brickBroken(brick.getValue()); if(brick.hasPowerUp) { int noOfBallsToSpawn = (int) (Math.random() * 5); @@ -248,6 +248,11 @@ public class GamePanel extends JPanel implements ActionListener { play = true; paddle -= 50; } - + + public void show() { + frame.add(this); + frame.revalidate(); + frame.repaint(); + } } diff --git a/app/src/main/java/brickbreaker/LoginFrame.java b/app/src/main/java/brickbreaker/LoginFrame.java index b172ae1..69fe41b 100644 --- a/app/src/main/java/brickbreaker/LoginFrame.java +++ b/app/src/main/java/brickbreaker/LoginFrame.java @@ -10,9 +10,11 @@ import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class LoginFrame extends JPanel { - private JTextField usernameField; + private JTextField emailField; private JPasswordField passwordField; private JButton submitButton; private JButton backButton; @@ -23,7 +25,7 @@ public class LoginFrame extends JPanel { private Font textFont = new Font("MV Boli", Font.PLAIN, 14); private Font labelFont = new Font("MV Boli", Font.BOLD, 16); private Font headerFont = new Font("MV Boli", Font.BOLD, 24); - private JLabel usernameErrorLabel = new JLabel(""); + private JLabel emailErrorLabel = new JLabel(""); private JLabel passwordErrorLabel = new JLabel(""); private Authenticate fileAuth = new Authenticate(); public LoginFrame(JFrame parentFrame) { @@ -38,10 +40,10 @@ public class LoginFrame extends JPanel { headerLabel.setFont(headerFont); headerLabel.setForeground(buttonColor); - usernameLabel = new JLabel("Username:"); + usernameLabel = new JLabel("Email:"); passwordLabel = new JLabel("Password:"); - usernameField = new JTextField(20); + emailField = new JTextField(20); passwordField = new JPasswordField(20); submitButton = new JButton("Login"); @@ -49,7 +51,7 @@ public class LoginFrame extends JPanel { usernameLabel.setFont(labelFont); passwordLabel.setFont(labelFont); - usernameField.setFont(textFont); + emailField.setFont(textFont); passwordField.setFont(textFont); submitButton.setFont(new Font("MV Boli", Font.BOLD, 16)); backButton.setFont(new Font("MV Boli", Font.BOLD, 16)); @@ -62,9 +64,9 @@ public class LoginFrame extends JPanel { submitButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); backButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); - usernameErrorLabel.setPreferredSize(new Dimension(200, 20)); + emailErrorLabel.setPreferredSize(new Dimension(200, 20)); passwordErrorLabel.setPreferredSize(new Dimension(200, 20)); - usernameErrorLabel.setForeground(Color.RED); + emailErrorLabel.setForeground(Color.RED); passwordErrorLabel.setForeground(Color.RED); // Hover effects for buttons @@ -108,10 +110,10 @@ public class LoginFrame extends JPanel { add(usernameLabel, gbc); gbc.gridx = 1; - add(usernameField, gbc); + add(emailField, gbc); gbc.gridx = 2; - add(usernameErrorLabel, gbc); + add(emailErrorLabel, gbc); gbc.gridx = 0; gbc.gridy = 2; @@ -136,35 +138,48 @@ public class LoginFrame extends JPanel { private void handleLogin() { // Reset error labels - usernameErrorLabel.setText(""); + emailErrorLabel.setText(""); passwordErrorLabel.setText(""); - String username = usernameField.getText(); + String email = emailField.getText(); String password = new String(passwordField.getPassword()); - + boolean error = false; // Simple validation - if (username.isEmpty()) { - usernameErrorLabel.setText("Username is required!"); - return; + if (email.isEmpty()) { + emailErrorLabel.setText("Email is required!"); + error = true; + } else if(!isValidEmail(email)) { + emailErrorLabel.setText("Invalid email format!"); + error = true; } if (password.isEmpty()) { passwordErrorLabel.setText("Password is required!"); - return; + error = true; } - - if (fileAuth.authenticate(username, password)) { - // User found - // Proceed with the application or show the next screen - System.out.println("Login successful!"); + + if(error) return; + Authenticate auth = new Authenticate(); + + if (auth.login(email, password)) { + App.scoreSystem.setHighScore(); + parentFrame.remove(this); + App.gamePanel.show(); } else { - // User not found JOptionPane.showMessageDialog(this, "Invalid username or password!", "Error", JOptionPane.ERROR_MESSAGE); } } private void handleBack() { - // TODO: Implement the back navigation logic + parentFrame.remove(this); + App.mainMenu.show(); + } + + public static boolean isValidEmail(String email) { + String regex = "^[A-Za-z0-9+_.-]+@(.+)$"; + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(email); + return matcher.matches(); } } diff --git a/app/src/main/java/brickbreaker/MainMenu.form b/app/src/main/java/brickbreaker/MainMenu.form deleted file mode 100644 index caedbec..0000000 --- a/app/src/main/java/brickbreaker/MainMenu.form +++ /dev/null @@ -1,192 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JFrameFormInfo"> - <Properties> - <Property name="defaultCloseOperation" type="int" value="3"/> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="ff" green="ff" red="ff" type="rgb"/> - </Property> - </Properties> - <SyntheticProperties> - <SyntheticProperty name="formSizePolicy" type="int" value="1"/> - <SyntheticProperty name="generateCenter" type="boolean" value="false"/> - </SyntheticProperties> - <AuxValues> - <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> - </AuxValues> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="-2" pref="310" max="-2" attributes="0"/> - <Component id="loginButton" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="-2" pref="301" max="-2" attributes="0"/> - <Component id="registerButton" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="-2" pref="282" max="-2" attributes="0"/> - <Component id="guest" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="-2" pref="290" max="-2" attributes="0"/> - <Component id="highScore" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="-2" pref="122" max="-2" attributes="0"/> - <Component id="jScrollPane1" min="-2" max="-2" attributes="0"/> - </Group> - </Group> - <EmptySpace pref="143" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="1" attributes="0"> - <EmptySpace min="-2" pref="117" max="-2" attributes="0"/> - <Component id="jScrollPane1" min="-2" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="loginButton" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="registerButton" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="guest" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="highScore" max="-2" attributes="0"/> - <EmptySpace pref="228" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JButton" name="loginButton"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="e2" green="ac" red="24" type="rgb"/> - </Property> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="MV Boli" size="14" style="0"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="e2" green="ac" red="24" type="rgb"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="login"/> - <Property name="actionCommand" type="java.lang.String" value="Login"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - <Property name="horizontalTextPosition" type="int" value="0"/> - <Property name="label" type="java.lang.String" value="Login"/> - <Property name="opaque" type="boolean" value="false"/> - </Properties> - </Component> - <Component class="javax.swing.JButton" name="registerButton"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="e2" green="ac" red="24" type="rgb"/> - </Property> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="MV Boli" size="14" style="0"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="ff" green="ff" red="ff" type="rgb"/> - </Property> - <Property name="text" type="java.lang.String" value="Register"/> - <Property name="actionCommand" type="java.lang.String" value="Login"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - <Property name="horizontalTextPosition" type="int" value="0"/> - </Properties> - <Events> - <EventHandler event="mouseEntered" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="registerButtonMouseEntered"/> - <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="registerButtonMouseExited"/> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="registerButtonActionPerformed"/> - </Events> - </Component> - <Container class="javax.swing.JScrollPane" name="jScrollPane1"> - <AuxValues> - <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/> - </AuxValues> - - <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> - <SubComponents> - <Component class="javax.swing.JTextPane" name="welconText"> - <Properties> - <Property name="editable" type="boolean" value="false"/> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="null"/> - </Property> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="MV Boli" size="36" style="1"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="0" green="c0" red="ff" type="rgb"/> - </Property> - <Property name="text" type="java.lang.String" value="Welcome to Brick Breaker"/> - <Property name="toolTipText" type="java.lang.String" value=""/> - <Property name="focusable" type="boolean" value="false"/> - <Property name="opaque" type="boolean" value="false"/> - </Properties> - </Component> - </SubComponents> - </Container> - <Component class="javax.swing.JButton" name="guest"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="e2" green="ac" red="24" type="rgb"/> - </Property> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="MV Boli" size="14" style="0"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="ff" green="ff" red="ff" type="rgb"/> - </Property> - <Property name="actionCommand" type="java.lang.String" value="play"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - <Property name="horizontalTextPosition" type="int" value="0"/> - <Property name="label" type="java.lang.String" value="Play as Guest"/> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="guestActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JButton" name="highScore"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="e2" green="ac" red="24" type="rgb"/> - </Property> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="MV Boli" size="14" style="0"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="ff" green="ff" red="ff" type="rgb"/> - </Property> - <Property name="text" type="java.lang.String" value="High Scores"/> - <Property name="actionCommand" type="java.lang.String" value="play"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - <Property name="horizontalTextPosition" type="int" value="0"/> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="highScoreActionPerformed"/> - </Events> - </Component> - </SubComponents> -</Form> diff --git a/app/src/main/java/brickbreaker/MainMenu.java b/app/src/main/java/brickbreaker/MainMenu.java deleted file mode 100644 index 05091a6..0000000 --- a/app/src/main/java/brickbreaker/MainMenu.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license - * Click nbfs://nbhost/SystemFileSystem/Templates/GUIForms/JFrame.java to edit this template - */ -package brickbreaker; - -/** - * - * @author Suman - */ -public class MainMenu extends javax.swing.JFrame { - - /** - * Creates new form MainMenu - */ - public MainMenu() { - initComponents(); - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - loginButton = new javax.swing.JButton(); - registerButton = new javax.swing.JButton(); - jScrollPane1 = new javax.swing.JScrollPane(); - welconText = new javax.swing.JTextPane(); - guest = new javax.swing.JButton(); - highScore = new javax.swing.JButton(); - - setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); - setBackground(new java.awt.Color(255, 255, 255)); - - loginButton.setBackground(new java.awt.Color(36, 172, 226)); - loginButton.setFont(new java.awt.Font("MV Boli", 0, 14)); // NOI18N - loginButton.setForeground(new java.awt.Color(36, 172, 226)); - loginButton.setToolTipText("login"); - loginButton.setActionCommand("Login"); - loginButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - loginButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - loginButton.setLabel("Login"); - loginButton.setOpaque(false); - - registerButton.setBackground(new java.awt.Color(36, 172, 226)); - registerButton.setFont(new java.awt.Font("MV Boli", 0, 14)); // NOI18N - registerButton.setForeground(new java.awt.Color(255, 255, 255)); - registerButton.setText("Register"); - registerButton.setActionCommand("Login"); - registerButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - registerButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - registerButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseEntered(java.awt.event.MouseEvent evt) { - registerButtonMouseEntered(evt); - } - public void mouseExited(java.awt.event.MouseEvent evt) { - registerButtonMouseExited(evt); - } - }); - registerButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - registerButtonActionPerformed(evt); - } - }); - - welconText.setEditable(false); - welconText.setBorder(null); - welconText.setFont(new java.awt.Font("MV Boli", 1, 36)); // NOI18N - welconText.setForeground(new java.awt.Color(255, 192, 0)); - welconText.setText("Welcome to Brick Breaker"); - welconText.setToolTipText(""); - welconText.setFocusable(false); - welconText.setOpaque(false); - jScrollPane1.setViewportView(welconText); - - guest.setBackground(new java.awt.Color(36, 172, 226)); - guest.setFont(new java.awt.Font("MV Boli", 0, 14)); // NOI18N - guest.setForeground(new java.awt.Color(255, 255, 255)); - guest.setActionCommand("play"); - guest.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - guest.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - guest.setLabel("Play as Guest"); - guest.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - guestActionPerformed(evt); - } - }); - - highScore.setBackground(new java.awt.Color(36, 172, 226)); - highScore.setFont(new java.awt.Font("MV Boli", 0, 14)); // NOI18N - highScore.setForeground(new java.awt.Color(255, 255, 255)); - highScore.setText("High Scores"); - highScore.setActionCommand("play"); - highScore.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - highScore.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - highScore.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - highScoreActionPerformed(evt); - } - }); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); - getContentPane().setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(310, 310, 310) - .addComponent(loginButton)) - .addGroup(layout.createSequentialGroup() - .addGap(301, 301, 301) - .addComponent(registerButton)) - .addGroup(layout.createSequentialGroup() - .addGap(282, 282, 282) - .addComponent(guest)) - .addGroup(layout.createSequentialGroup() - .addGap(290, 290, 290) - .addComponent(highScore)) - .addGroup(layout.createSequentialGroup() - .addGap(122, 122, 122) - .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addContainerGap(143, Short.MAX_VALUE)) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addGap(117, 117, 117) - .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(loginButton) - .addGap(18, 18, 18) - .addComponent(registerButton) - .addGap(18, 18, 18) - .addComponent(guest) - .addGap(18, 18, 18) - .addComponent(highScore) - .addContainerGap(228, Short.MAX_VALUE)) - ); - - pack(); - }// </editor-fold>//GEN-END:initComponents - - private void registerButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_registerButtonActionPerformed - // TODO add your handling code here: - }//GEN-LAST:event_registerButtonActionPerformed - - private void guestActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guestActionPerformed - // TODO add your handling code here: - }//GEN-LAST:event_guestActionPerformed - - private void highScoreActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_highScoreActionPerformed - // TODO add your handling code here: - }//GEN-LAST:event_highScoreActionPerformed - - private void registerButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_registerButtonMouseEntered - // TODO add your handling code here: - }//GEN-LAST:event_registerButtonMouseEntered - - private void registerButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_registerButtonMouseExited - // TODO add your handling code here: - }//GEN-LAST:event_registerButtonMouseExited - - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton guest; - private javax.swing.JButton highScore; - private javax.swing.JScrollPane jScrollPane1; - private javax.swing.JButton loginButton; - private javax.swing.JButton registerButton; - private javax.swing.JTextPane welconText; - // End of variables declaration//GEN-END:variables -} diff --git a/app/src/main/java/brickbreaker/Menu.java b/app/src/main/java/brickbreaker/Menu.java index 1cb6ab9..c966715 100644 --- a/app/src/main/java/brickbreaker/Menu.java +++ b/app/src/main/java/brickbreaker/Menu.java @@ -17,10 +17,6 @@ import javax.swing.JScrollPane; import javax.swing.JTextPane; import javax.swing.Timer; -/** - * - * @author Suman - */ public class Menu extends JPanel { private JButton guest; private JButton highScore; @@ -189,18 +185,7 @@ public class Menu extends JPanel { private void guestActionPerformed(java.awt.event.ActionEvent evt) { this.setVisible(false); - GamePanel game = new GamePanel(frame); - game.addObserver(new GameObserver() { - @Override - public void onGameOver(int finalScore) { - System.out.println("Game over with a score of " + finalScore); - } - - @Override - public void onGameWin(int finalScore) { - System.out.println("You won with a score of " + finalScore); - } - }); + } private void highScoreActionPerformed(java.awt.event.ActionEvent evt) { @@ -208,14 +193,27 @@ public class Menu extends JPanel { } private void navigateToLogin() { - // Remove current panel - frame.remove(this); - - LoginFrame loginPage = new LoginFrame(frame); - frame.add(loginPage); + // Remove current panel + frame.remove(this); + + LoginFrame loginPage = new LoginFrame(frame); + frame.add(loginPage); + + // Refresh and repaint + frame.revalidate(); + frame.repaint(); + } - // Refresh and repaint - frame.revalidate(); - frame.repaint(); -} + public void show() { + + if(App.user != null) { + this.remove(loginButton); + this.remove(registerButton); + this.remove(guest); + } + + frame.add(this); + frame.revalidate(); + frame.repaint(); + } } diff --git a/app/src/main/java/brickbreaker/ScoringSystem.java b/app/src/main/java/brickbreaker/ScoringSystem.java index 39d164d..0f55480 100644 --- a/app/src/main/java/brickbreaker/ScoringSystem.java +++ b/app/src/main/java/brickbreaker/ScoringSystem.java @@ -1,52 +1,88 @@ -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; +package brickbreaker; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; public class ScoringSystem { private int score; // Current Score private int highScore; // Highest Score - private static final int POINTS = 1; // Point Value - - private static final String HIGHSCORE_FILE = "src/main/resources/highscore.txt"; public ScoringSystem() { this.score = 0; - this.highScore = loadHighScore(); + this.setHighScore(); } + public void setHighScore() { + this.highScore = loadHighScore(); + } + private int loadHighScore() { - try (BufferedReader reader = new BufferedReader(new FileReader(HIGHSCORE_FILE))) { - String line = reader.readLine(); - if (line != null) { - return Integer.parseInt(line.trim()); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + if (App.user == null) return 0; + try { + // Establish a database connection + connection = DriverManager.getConnection(App.DB_URL, App.DB_USER, App.DB_PASSWORD); + + // Define the SQL query to retrieve the high score + String sql = "SELECT MAX(score) AS high_score FROM scores WHERE user_id=? GROUP BY user_id"; + + // Create a prepared statement + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setInt(1, App.user.id); + // Execute the query and retrieve the result + resultSet = preparedStatement.executeQuery(); + + if (resultSet.next()) { + // Read the high score value from the result set + return resultSet.getInt("high_score"); + } + } catch (SQLException e) { + System.err.println("Database Error: " + e.getMessage()); + } finally { + // Close database resources in reverse order of acquisition + try { + if (resultSet != null) resultSet.close(); + if (preparedStatement != null) preparedStatement.close(); + if (connection != null) connection.close(); + } catch (SQLException e) { + System.err.println("Error closing database resources: " + e.getMessage()); } - } catch (IOException e) { - System.err.println("Loading Error: " + e.getMessage()); } + + // Return a default value if high score retrieval fails return 0; } - private void saveHighScore(int newHighScore) { - try (FileWriter writer = new FileWriter(HIGHSCORE_FILE)) { - writer.write(Integer.toString(newHighScore)); - } catch (IOException e) { - System.err.println("Saving Error: " + e.getMessage()); + private void saveHighScore() { + if(App.user == null) return; + try (Connection connection = DriverManager.getConnection(App.DB_URL, App.DB_USER, App.DB_PASSWORD)) { + String sql = "INSERT INTO scores (user_id, score) VALUES (?, ?)"; + try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) { + preparedStatement.setInt(1, App.user.id); + preparedStatement.setInt(2, score); + preparedStatement.executeUpdate(); + } + } catch (SQLException e) { + System.err.println("Database Error: " + e.getMessage()); } } // Add point to each broken brick - public void brickBroken() { - score += POINTS; - checkForNewHighScore(); + public void brickBroken(int points) { + score += points; } // Compare Current Score and Hgihest Score - private void checkForNewHighScore() { + public void checkForNewHighScore() { if (score > highScore) { highScore = score; - saveHighScore(highScore); + this.saveHighScore(); } } -- GitLab