From 2234eefc5dc47fccfbc5617bf5bd97f92fab5b7c Mon Sep 17 00:00:00 2001 From: Ruben Meyer <46384706+rxbnDE@users.noreply.github.com> Date: Tue, 19 Nov 2019 01:55:13 +0100 Subject: [PATCH] BreakOut Vorgabe --- .gitignore | 3 + bin/break_out/Constants.class | Bin 0 -> 1202 bytes bin/break_out/Main.class | Bin 0 -> 693 bytes bin/break_out/controller/Controller.class | Bin 0 -> 2730 bytes bin/break_out/model/Ball.class | Bin 0 -> 896 bytes bin/break_out/model/Game.class | Bin 0 -> 2133 bytes bin/break_out/model/IBall.class | Bin 0 -> 269 bytes bin/break_out/model/Level.class | Bin 0 -> 1407 bytes bin/break_out/model/Position.class | Bin 0 -> 694 bytes bin/break_out/model/Vector2D.class | Bin 0 -> 700 bytes bin/break_out/view/Field.class | Bin 0 -> 2766 bytes bin/break_out/view/SectionPanel.class | Bin 0 -> 2989 bytes bin/break_out/view/StartScreen.class | Bin 0 -> 3975 bytes bin/break_out/view/View.class | Bin 0 -> 2119 bytes libs/json-simple-1.1.1.jar | Bin 0 -> 23737 bytes libs/miglayout-4.0-swing.jar | Bin 0 -> 77291 bytes res/Level1.json | 33 ++++ src/break_out/Constants.java | 78 +++++++++ src/break_out/Main.java | 31 ++++ src/break_out/controller/Controller.java | 146 ++++++++++++++++ src/break_out/model/Ball.java | 62 +++++++ src/break_out/model/Game.java | 127 ++++++++++++++ src/break_out/model/IBall.java | 10 ++ src/break_out/model/Level.java | 126 ++++++++++++++ src/break_out/model/Position.java | 67 ++++++++ src/break_out/model/Vector2D.java | 70 ++++++++ src/break_out/view/Field.java | 114 +++++++++++++ src/break_out/view/SectionPanel.java | 145 ++++++++++++++++ src/break_out/view/StartScreen.java | 198 ++++++++++++++++++++++ src/break_out/view/View.java | 127 ++++++++++++++ 30 files changed, 1337 insertions(+) create mode 100644 bin/break_out/Constants.class create mode 100644 bin/break_out/Main.class create mode 100644 bin/break_out/controller/Controller.class create mode 100644 bin/break_out/model/Ball.class create mode 100644 bin/break_out/model/Game.class create mode 100644 bin/break_out/model/IBall.class create mode 100644 bin/break_out/model/Level.class create mode 100644 bin/break_out/model/Position.class create mode 100644 bin/break_out/model/Vector2D.class create mode 100644 bin/break_out/view/Field.class create mode 100644 bin/break_out/view/SectionPanel.class create mode 100644 bin/break_out/view/StartScreen.class create mode 100644 bin/break_out/view/View.class create mode 100644 libs/json-simple-1.1.1.jar create mode 100644 libs/miglayout-4.0-swing.jar create mode 100644 res/Level1.json create mode 100644 src/break_out/Constants.java create mode 100644 src/break_out/Main.java create mode 100644 src/break_out/controller/Controller.java create mode 100644 src/break_out/model/Ball.java create mode 100644 src/break_out/model/Game.java create mode 100644 src/break_out/model/IBall.java create mode 100644 src/break_out/model/Level.java create mode 100644 src/break_out/model/Position.java create mode 100644 src/break_out/model/Vector2D.java create mode 100644 src/break_out/view/Field.java create mode 100644 src/break_out/view/SectionPanel.java create mode 100644 src/break_out/view/StartScreen.java create mode 100644 src/break_out/view/View.java diff --git a/.gitignore b/.gitignore index 98b99a5..4bbc660 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,6 @@ # Maven log/ target/ + +# no output +out/ \ No newline at end of file diff --git a/bin/break_out/Constants.class b/bin/break_out/Constants.class new file mode 100644 index 0000000000000000000000000000000000000000..e0d6bffb76c109f47ef195836373344da2556eb2 GIT binary patch literal 1202 zcmZuw>rzrt6#h0SHxCMknq?Qu3ap^g(h^hPZ1CjaBDb_3F$X#+M$mAvSLrco{Gn4b zJwUI}JM^djO>1vJY3iIAzO~lbYprj6d-47Emu~=8khjCaFj;At#@lkU+X=^;jdsUq zblP@|FnA7)BO_cl8vEf)<U=PPyYCLTdUHIX^LRna zq|2E^BF~BcFlV*dt<+7yITqFRvZ_T>yufn|W9lwZEb$aiQwp)8ulX$J#Lf|^)@zMg z=NW@F5G*l_#G9{87p`L7j%y6we?(Mp9XA;4M?#Ox8;0qC793J;ptX~PxT# literal 0 HcmV?d00001 diff --git a/bin/break_out/Main.class b/bin/break_out/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..bc6bfb830b418f8a72615881e45a1fa3e5367db0 GIT binary patch literal 693 zcmZuuO-~y^41ErPO_l&*Q$m13_-4~etkesYsJI|;T0W$p6x2gC38OHu*+r9CDt=Z^ zsX*cf^hcq3LPbE~VvqgoXV3HBr~5|$JMbN32$M}M#r4l5HNl}!v4bq3cqMK{5Q(@Q z95=6I%MixCsaTmk!iZmM5VHHpg>*53d;y~vBTR)VmPcu)DfOvnMv~x#NlQcxp_PsQ zC$r{Kb$LMecIqxOc6d6W?EeS{)9Xg7xV>9z&+Z^Hit2 z%M4~6l;130zv~*=DWHNm!gyDj6U}|v+!4O|!()aswc(V51wv`C{;iU~f(9EG^T<0` zB2))xD~XLxqDbms|K;go5zAJ$6+*>-CB+LD|Cs+Jbepv*y(0*Nww5sSZa2ZLC#i19 z17$Cfw}X4o3ldVn6z+hurTz?6S2mFoAKlh35kH6CC9+i7C$5 z<})VCu&;PU&-;T9-ybl4-owZ60gIn|s1Eo%WNjUCSU{0gn8i|`yZqdbRje^yWPBYP L%ud+kID@T!YWSTO literal 0 HcmV?d00001 diff --git a/bin/break_out/controller/Controller.class b/bin/break_out/controller/Controller.class new file mode 100644 index 0000000000000000000000000000000000000000..6cd531908c69e7392f100f16ecd42c6f1eff4e5a GIT binary patch literal 2730 zcmah~TUQfT6#j;!4u*qB6huWqYcT{Qwbn~Tt%{;3APNmt>t#reVPulQnF&a5_NMl> z+P?O+FFtpzns&8aed$~OO8-IEYFEEAGmr_SWo2dNoZ0()`}Xa9{`lwT-vAuNmpU3W zbj>)@n7d<_y-dz7d5&#a(#Z_1EOo>+Y`$+S7#Yhb6*5<5?#rB~V}piW{#Rqs%g6;; z@-k;~o@tjxP1lnp>F8+Guw#|VWx2F0*AOolMX8~EwCY09&PywEf!_xyUohpOhPH@Y zeaU3`pm@Uxvt)XwG<2luYV>9aF+{)wVrUg;Mp8p8)tlW24O<18AQD`)3v5%8t%mEG zg;H%0N@2Ue4yDiH7J7-u~!!gx9{22FUO;^L7h@W+n zJ(xf@_UhQ9VM{eBD?tmqh>RR3mi~*yXxRwEt_5dr^3w$yo`ey z8X48FDXqLJ=$d$Z2_rd#!#ZANwN^#q%LR_$DDy*`HC5_b<8wqzhc&bqK6fXibI*2) zl0K|G6U2F5Q9TTDP~ZekMhdc=q-_j9W$9tYT{PJ=mjVI(e;sFZoL<`)5paRC7}Bs& zRoN~(Ig)B?h!<@^g2ixNU>FzJ3-UqPut>4CFw{t|4))$q6&Vq@gv)`m6PB?g9e3RC zzgqA~&!NWzAHx+L<2Ah>$OI-7PMnHGrFKnV5>xcSlBI$->-X45Bbe3pbJFQnM!Go@ zy33`)@4s4}Sy0}*DR3P(7^ORFFP?WC+gas%=tpl>$6Gb!u8xQVZsNA;>pL3uMQ1?$ z-U=Gu5ZH)>B3@1)4<=W4rKctiJ3R_gwG&pmATX<{-OR#7DSRK6j=9=IEpY}G1&UzD z#N|WN<100yn5NNAXZ;omsHLIFjW&1Z|Ft%i=cBbu2FQN(!wk}4HgIlk%$N_SQRAFk znp&DyEbpw>8Os!BLRLG@t6H z_|6SkoTdUFC?@GlsA7pK%0~hpD_$fNFP6{u;IY6HJS7ht5?#99u$?QrBc*Axl(%_B zaH{i+@N7lwf@7CUc{M5?6DMe)VN=cKmg==Opj^Qoj`tWE@B(-j@<(RyYHUzf1K;YN zXvQW!Te!>m8bC7rBQ~e|o?}b8f;Rp;zW2}US2eVWZiCaViT8Lrj`;=@7>|Yq8q}o~ z!X6J{MSwLx*jK7p2}*&}#5xnf5h0F7^w&b1KN(n@y0=50#`-Hb-dDk?3eJ6tW87UF zKTyG_dR&cv2hpE=qk`#Y$fSS4&Ff6ut>?I_4)cGvf|+M%6*k9P*O4S7{hJhcZf=ZHB&DsWvzy`0DmX}>vT8*|I zQm$cXeTap1Al_ad;?X(~@2oK462nk_cc>yHdn$Ohf)B%LR`AJmHNJphk4e!d?|uFK=f^Jq&(XAz6D;*(t&TrMqr^LjhC1-}R1nxG z2r5VFi}C^$9(w!zBRxoL6a}?O{2N0M%$!DNe&R==px&Ltyt~Z35R`^~%v!eqdrU>~ z(++{fT|e}bmx6q=)e{t6u{#HO%)6L{YhyvMa+{8W3Kk7+NnkZQomQ^|!5tSiW^AlX zVP?V(ma%BSt1e1#1oK@#)Ne;8eI0*L{Xh$<-DseKo{D|rUj_@wXa9^6H%2$x;WV>{ zI?1*mXf#_lfLWGcm*CFTnx>(%eu*xRPKPSd8DB8R8yzJ3;a(IEbu4h+N27S4U;C!} zl4VRL@bPvz$72 z&r$!D7HH5`QJ`I=ZD0XwxW{LW5mS(5=&kbd3Z2?rPmnXbu@mIwcb z%U2)z;)AXwu&`^neD<&SAFTV#B+ST4mk&9Y`R@DM-^pM9{Qd`kY3v(_2y_)3W$r(< z58d>Ey`@U&hvtDY5EHnvXI9O0$t>@r*9v>8=nAyjg^F^j%BfJC_2h@HRZ3^AiaSGb z&e|!P?xCXuZe0-1W`jUgOFd8Lxy(GERlI1IUB@n!lp`=4QVYJP7tU2^&{R@YRTAh8 z>H4{6wLrVvww#LV-2_BNpyj}PQM)!(indO$dDbdh?gN1viIAVhF_U?L*aG2+BZ_W` z4)h2_6Un@RYXVmTAm$y%Jkn^y(Tna@2=q%dp;@2al4!>zeR^BsvVR(uxZS-r38J))EtW{R4hX)1ateb@r3+c?-MYEJQ9ZTP9A7k#W#U}NH zN(r}MTti*k=c`cT!9MiQ)ot{K8 z#JNoE`%D|=@Uek;0u_`{mr5*Pk-aUe7o>Mr-9xw#1Iui21MaYANsY~U-+{;$dFH%-Ea)E)+k@RW<>NT@@DWBK?{EzIqys$yqyE;?Ho^U=Wudw zp-l%mxnAY%dwPp-pG=*iEAI4sY{Y>D;*MIBmqeKLRJH~a9@8}W+xZlKbDCStLie9$VuVRhb z9f-Wn!r=30rIM!$q)WSYQ4h7W~zVS6i<$^&X4OS z_(m6Yg701;?w?eEr_Vc^cs(OT4*KDei&e&cPDUN!4vDRKH{{1UXUPqRr;;_|)4URgIDwu~tDHk%>n?xFdmrDC(2L5pI>+-oy32la>%&>l`_>bQ3QJZnZbZe~( p6U$kqBrj#y(JQAz;57UgP~+@%I6M&CcWLzn;n literal 0 HcmV?d00001 diff --git a/bin/break_out/model/Level.class b/bin/break_out/model/Level.class new file mode 100644 index 0000000000000000000000000000000000000000..579284863d751b730bd0a4515a2a0b6f9e4dc53c GIT binary patch literal 1407 zcmaJ=+fEZv6kVscfpH251yL#pD7FJy?|8u*-l(aUL;{hRm}wbtWIEGKr$qn27eBx+ z;Kc_`EErAv0KdaWzd>E+Oe3T;PSQDh&e?nIwbwfR@%!s{0JFHQAto?b4s2`vx!(v2 zRe#lX3nhEQb~Pjf`d(QZR>8HrwZh^{W~~Y&)~u>6FjQ);I9j96k9QR(|FxG2M#XPQR4OyY z>4&yZ;F5U{z4evBxi7e|`R7+@dJC5~|NLatAVx6C3mR84jnZgfneS(G<^@mJdG2Bi zRl2jHx(`JiTHVL!({=^#1&B!4Uv^8*kBQ80>$XBGA0re7ybZ$ zl<~|^A2E=oGxy$^Ip>?(etf>Y1K33_f{?&+qwm;v*WS>#y55b`vCh4L>$_er0!<** zw(o7LWA|FtS)=VVeF5>nx5D>Pz&LPwu3r|=3zbT-CZHWtBZe?c6H&wk!i8dO1_DVF zIt&@jnTWt(rRw&a(_y#a^e^p3#}P-GRVrbsFbBU0aTSrM$?c z4OF5P#z0)EkBgjQ7v8YnbWU7p7yrKLw!9>^$QEW}LVSp-B7$<(xe|qBk1?xrm(Dp^ zdc|xhKSH8Z93l0r4x~Azp>bU2nB}1y64<~zE1OC_i3Kb&qkyszDw0NF8f35(*jU7n zYkKJgi6;gj3WM8ZF|P#8@rFQvxkVZa7)!0;MbO z&a*?W-?NW9SL_IA7xx0fk->w2c@Xr2q$yxj9jE3B=q;+`kbz}k0(pT zDWho%S(vP}gT8+>xas)usn-d8fpRM{Mtj3y2eZEC}0CKtZXRxB4#nii~`C=s7M-RXi&j?YGV^a z_Kf;73Xcpl3WLXFv8n{E;ek|;e<&8y%T0>Ox0s6W7cEB>V28#HrBG41`GaJpNSygd hkkWsUy^$cxqe1@6Xb94xoiheRPJ~|@RtT(N^$WvaSStVk literal 0 HcmV?d00001 diff --git a/bin/break_out/view/Field.class b/bin/break_out/view/Field.class new file mode 100644 index 0000000000000000000000000000000000000000..4529106eab1b5888c5d6b8542993a3607b657c81 GIT binary patch literal 2766 zcma)7`BxiN6#gCrro>kS+R{?0wpulWwyCu)lv-s8B{nPqh0;YF!fTi|nZd~bt^2-J zao_iSU&_(o(Q`chsQytNzc&+-K>5LQU|!z4?|%2*?=J73e}DS}z%5ubP$95!(pBc! z31`-e%~@(b)?=y6l!1^y!x?kVJQvH&TXs5j=b&k;j6hvZxt5t3Rc_95?4yZp0dc3m z`Yy-Ld8X}+nweQuwc~H`gnIec34xFX71)$qWoDGe?E>LRGj%rYI%1Fy-4QNy%jLQsc7N}i`97ZFW z^zE%Q5lJKxfxE%hwR{gWtN#%|N_ZyNH~rlbvyFr3H;;5QklJX4*>SXin$*kVHEU*5D3w8t4$%P^z)za?D9| zfi)_JyN2TN{)w?f_ed{qmhq6VJ*7hkqX)eP4hz)##p2Ue5K1J#Dqlxe{Q~!EETJtY zCHl01^#udH@x5!3burU zo0&w?<=3Jn>Rt)g&um(GW7d>6tq(nkS$$Z;!(L^jr#-DdFL4g%sjoY2h<>ts_2?)h z@qUR1@F2xgt~uXnX6QR-R*}sT*M6^vbg>9^Gc8Lw@dT%(U_l8IR*~MPN9S4~VLXLr z3_QJ}>iq$(C#%G>c#i%tfWu~%qiIW|rEJ_}IWRLZEg{#>W5K`+D;|Q9T;fH%#GnY2 zRCD?PXj%iw7ZK_eyk_84x?F0+0Ls50@jBiJoLc7RQm3?pNN?dC18=Y4l$J}pi}wUB zqf>)Uj`P>C1-7l>*Rqs=AK)VcACidGt}Wk@_!ysX!V~nE-`?F?=`)GXmygGFzkez5 zmEZ539m(WGccP;&J`x|&_3@3wx5fGxm@~;$c-WbBQ>w?(Z%5dl?|XDIIgb*yt=z7R znaio1fuA^Ai&?(3rs)rR2|HMum3+D@u@zOQ=FZ@*f)7E3e(3z)e80F>QC5q~`K{wF z%exg^uZ=FDKHB;VHb#F(<9IzT)}5?7yM!&jpg9`K_!dt zpc#9yosYs!?8mi~GzOr!4%c%>c;5+Dt$rE{rtk3G1R7{DGTsnv*wwIW348Lmp=2lQ zPfZs?@20o$G7rN=55qV>dYEMW zZUmTO6Ft;4UWm3X;kHHGo=5!Y#3GL9wJk)y`^O^-TS5y<7|dgM)qZT%{&?%3ICY@9 zsd^C;i%@x3P1Vt#(VR!Nsk*X~F3<2km&aUFb&!L<>Y@Lb1>T7^Rp)VEDX2rtA^5;l zVStVglJa2&GeSa+^0gX6631{CUx5*>V;uSSunrx5pWw894$3ECKeZWNk%S9)2oE#( z^;{ppqa?JEQY=^q*9 H#Zb+E0U4PV literal 0 HcmV?d00001 diff --git a/bin/break_out/view/SectionPanel.class b/bin/break_out/view/SectionPanel.class new file mode 100644 index 0000000000000000000000000000000000000000..7b4e85ebad34a362365fa06b042dada66232fa3c GIT binary patch literal 2989 zcmb_eOLP=f8vbsl)0M7NAOQn55D`RZI!GjHqKTj(A)z58Odc&UYN&Kqx-02aH(eD1 z_`nAeK~WUnIx`MBKF-W6#$(cRhI2eFXJ$1^7j9j;apy+;?yaOdIXUXalXU&}{`dd? z`u^vw|NZ#yF9EdTGYtWO&Eo~joEpo`cul8mYqn|7N_uwAIc_>uRzpx=-K2TiJk#XP z+D^LZh~f*>x>mt9vk9x?gXuN=2Di93T!g40UN^* z*kZsyjfPtU)~p1qqXD-{xoxx)jmP7=6H?(e18Yz%SGOBji&_o479*#8Ey2{W6T78) zjGj^5*WP2G4(p`$UIXhmN(PTt)H?m>(6)bjfC=BXJ*EEs**H*&85 z9n}JBdu_++o0%TB3Pa|2mLltVb4ljPWX8B(WCp#A%~&?{{!0EC)b-JFu>Fk5km=)Q zaw=WO%{VD0ooEi0_7Z1@frHp6pcSmVX**0nU_8xGs!eBZI-hea$=$Hbcu&F1XY8cg zzB?gv(PN+shorH%fg?C7P?fg4hwPM>QF)8Yqhkj8>4mJ&Wb;JXk@ITZz$f;8}As5_w~q_|ANYnqt@AWX*p%U!UQvy z=;$3jR8}AB@000N>RFTh*grnWer?w=ii`mpld3i8_A(>_&CBAv;>cBRTy0P0U=&#c z)7a0*Gr=nNVODR>Kpr)$-dULo$tf6cB`1_wOu;B-44lR+OJl;$W(Q=M3=k$0rNSx$ ztK%#l*KlsB!IU@0OpjhXfhU>bY1>(Bk+_EQtd&yCn1qzg`Z+F3OUF}qMkei9foQb5 zyBu1-T32(}F4DOR2A;=7-#KMzWvwd~Yf-}s95|(SA2eM%Ij9DfjyYVGZ+=lWVYhGf zih-B$ir=BW7`2y0-{+|sAH}N%UQINOwe9c-<1 zvq1f7$>uJ~29o>ua5#Ab4h;qzR%9Sag{t&o6a{Wxp<50u)oTVlHufjHJ9 zSS&%}I2g>$6p~iAEvHT0@*8BYlqTf3<5-2xtm(RztKkz~J0&x#3zFGqBVZdlyn;7X z7@JUu5O*4P0aWqFNyl|iPH9Csd==&BRg~jYQ4Ui@IZ74fAXSw0gpIU#Gk1Sewtrjj_-??vRhBSRMW|kA1O<1>B`n z>+p^Lue4kL$(IChAD?>_%pL;YPPcZ^u|3#|edM>`F0|ubJctKyn4|9~PM{ZU)G-K? z;COmJsRX`%5%|Xh9w6_??*hDW9;=WJ{RYxuB0YgP(MhBmd^C$li3V-el7d3Zk` zy$51n;EtA{%q3Ub7trsM0iO($>?`6#TV>-{7;OthLZ9Q&&yid}nkPHn!GTC9Qn`Ss zNQnC;`P;(B=9FBe8p=zq8oz+!lT!=uK0zqh66C(MO_NW)xi)&T4nO@1XIiR!&On(H z_Bq34jxI6RSJj8>S!-L{s&C+_k?QJ*CSAKIUAq{m4i@orn?Z=i0-lS6Dk`?r2U89F z(b`Hlk&r6qGqwDqIpxs}%*mi^zF5Si1-$fY`d6j?+(;4EC@7Ovp-TBWqFkq#tO<5w znjbwGex^*~R!pIpv=vz4ehXiKu2ycgzn5EO0c!Iktb`;I71+SWmhEmqZko#eJN^hwzdZBu#Jx zkK?K;pbLI!EESMQ;&r^i!qLTuyvSILYsHYf!01=K=#!scEc#Zl2XC^_DtZ6y#9Mfq zt#%Fn$2;U{#P%iLrCb#e{vGde6(-Ji@jh2N(Y}a3Qm&dgYZ7)SHP#i@XrG*n{ogE literal 0 HcmV?d00001 diff --git a/bin/break_out/view/StartScreen.class b/bin/break_out/view/StartScreen.class new file mode 100644 index 0000000000000000000000000000000000000000..39cb0f1eb304e3145d6d3a11117cd8b487c65080 GIT binary patch literal 3975 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 TrY{Nm^Z&p$GCgE&9r*4)r^D93 literal 0 HcmV?d00001 diff --git a/libs/json-simple-1.1.1.jar b/libs/json-simple-1.1.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..66347a6c86b7d6442358ca7643e4dc484fb01866 GIT binary patch literal 23737 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 A{Qv*} literal 0 HcmV?d00001 diff --git a/libs/miglayout-4.0-swing.jar b/libs/miglayout-4.0-swing.jar new file mode 100644 index 0000000000000000000000000000000000000000..7b6a22cacdbf72ffb92576dc3f242b6ca0f4d8c5 GIT binary patch literal 77291 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 literal 0 HcmV?d00001 diff --git a/res/Level1.json b/res/Level1.json new file mode 100644 index 0000000..c1f08b1 --- /dev/null +++ b/res/Level1.json @@ -0,0 +1,33 @@ +{ + "field" : [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 2, 0, 2, 2, 2, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0], + [0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0], + [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 3, 3, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], + "maxLives" : 5 +} diff --git a/src/break_out/Constants.java b/src/break_out/Constants.java new file mode 100644 index 0000000..f1a3747 --- /dev/null +++ b/src/break_out/Constants.java @@ -0,0 +1,78 @@ +package break_out; + +import java.awt.Color; + +/** + * A class that contains all constant values to configure the game + * + * @author dmlux, modified by I. Schumacher + * + */ +public class Constants { + + /** + * The screen width in pixels + */ + public static final Integer SCREEN_WIDTH = 880; + + /** + * The screen height in pixels + */ + public static final Integer SCREEN_HEIGHT = 750; + + /** + * the application name + */ + public static final String APP_TITLE = "BreakOut"; + + /** + * Debugging flag for special rendering hints + */ + public static final boolean DEBUG_MODE = false; + + /** + * The background color for the game menu + */ + public static final Color BACKGROUND = new Color(52, 152, 219); + + /** + * Amount of columns for blocks + */ + public static final Integer SQUARES_X = 22; + + /** + * Amount of the rows + */ + public static final Integer SQUARES_Y = 30; + + /** + * The paddle width in pixels + */ + public static final Integer PADDLE_WIDTH = 70; + + /** + * The paddle height in pixels + */ + public static final Integer PADDLE_HEIGHT = 15; + + /** + * The distance between paddle and the lower reflection offset. + */ + public static final Double REFLECTION_OFFSET = 25.0; + + /** + * The ball diameter in pixels + */ + public static final Integer BALL_DIAMETER = 15; + + /** + * The paddle speed + */ + public static final Double DX_MOVEMENT = 4.5; + + /** + * The ball speed + */ + public static final Double BALL_SPEED = 1.20; + +} \ No newline at end of file diff --git a/src/break_out/Main.java b/src/break_out/Main.java new file mode 100644 index 0000000..acba5bc --- /dev/null +++ b/src/break_out/Main.java @@ -0,0 +1,31 @@ +package break_out; + +import break_out.controller.Controller; +import break_out.view.View; + +/** + * The entry point of the program. The game get started here and all components + * are initialized here. + * + * @author dmlux, modified by I. Schumacher + * + */ +public class Main { + + /** + * The main method + * + * @param args The arguments that were passed by the command line. + */ + public static void main(String[] args) { + + // Enable OpenGL for 2D graphics objects. (Linux Performance, but sometimes buggy) + // -Dsun.java2d.opengl=true as JVM argument seems to be a little bit more stable + System.setProperty("sun.java2d.opengl", "True"); + + // Create the view + View view = new View(); + // Create the controller and pass the view object to it + new Controller(view); + } +} diff --git a/src/break_out/controller/Controller.java b/src/break_out/controller/Controller.java new file mode 100644 index 0000000..9a6d622 --- /dev/null +++ b/src/break_out/controller/Controller.java @@ -0,0 +1,146 @@ +package break_out.controller; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; + +import break_out.model.Game; +import break_out.view.Field; +import break_out.view.StartScreen; +import break_out.view.View; + +/** + * The controller takes care of the input events and reacts on those events by + * manipulating the view and updates the model. + * + * @author dmlux, modified by I. Schumacher and I. Traupe + * + */ +public class Controller implements ActionListener, KeyListener { + + /** + * The game as model that is connected to this controller + */ + private Game game; + + /** + * The view that is connected to this controller + */ + private View view; + + /** + * The constructor expects a view to construct itself. + * + * @param view + * The view that is connected to this controller + */ + public Controller(View view) { + this.view = view; + + // Assigning the listeners + assignActionListener(); + assignKeyListener(); + } + + /** + * The controller gets all buttons out of the view with this method and adds + * this controller as an action listener. Every time the user pushed a button + * the action listener (this controller) gets an action event. + */ + private void assignActionListener() { + // Get the start screen to add this controller as action + // listener to the buttons. + view.getStartScreen().addActionListenerToStartButton(this); + view.getStartScreen().addActionListenerToQuitButton(this); + } + + /** + * With this method the controller adds himself as a KeyListener. Every time the + * user pushed a key the KeyListener (this controller) gets an KeyEvent. + */ + private void assignKeyListener() { + // Get the field to add this controller as KeyListener + view.getField().addKeyListener(this); + } + + /** + * If the user clicks any button this ActionListener will get called. The method + * will get an ActionEvent e which held the source of this event. + */ + @Override + public void actionPerformed(ActionEvent e) { + // We will get the startScreen view from the view + StartScreen startScreen = view.getStartScreen(); + + // The startScreen view has some buttons. We will compare the source of the + // event e with the startButton to get sure that this button was the event + // source ... or simple: The user clicked this particular button. + if (startScreen.getStartButton().equals(e.getSource())) { + // The players name of the input field in the start window + String playersName = startScreen.getPlayersName(); + playersName = playersName.trim(); + if (playersName.length() < 1) { + // If the players name is too short, we won't accept this and display an error + // message + startScreen.showError("Der Name ist ungültig"); + } else { + // If everything is fine we can go on and create a new game. + game = new Game(this); + // ... and tell the view to set this new game object. + view.setGame(game); + } + } + + // If the eventSource was the quit button we will exit the whole application. + else if (startScreen.getQuitButton().equals(e.getSource())) { + System.exit(0); + } + } + + /** + * This method will be called, after a key was typed. This means, that the key + * was pressed and released, before this method get called. + * @param e The key event + */ + @Override + public void keyTyped(KeyEvent e) { + + } + + /** + * This method will be called, after a key was pressed down. + * @param e The key event + */ + @Override + public void keyPressed(KeyEvent e) { + + } + + /** + * This method will be called, after a key was released. + * @param e The key event + */ + @Override + public void keyReleased(KeyEvent e) { + + } + + /** + * This method switches the view to the StartScreen view. + */ + public void toStartScreen() { + view.showScreen(StartScreen.class.getName()); + view.getStartScreen().requestFocusInWindow(); + } + + /** + * This method switches the view to the FieldView which will display the + * playground. + */ + public void toPlayground() { + view.showScreen(Field.class.getName()); + view.getField().requestFocusInWindow(); + } + +} diff --git a/src/break_out/model/Ball.java b/src/break_out/model/Ball.java new file mode 100644 index 0000000..0d97474 --- /dev/null +++ b/src/break_out/model/Ball.java @@ -0,0 +1,62 @@ +package break_out.model; + +import break_out.Constants; + +/** + * This class contains the information about the balls characteristics and behavior + * + * @author iSchumacher + * + */ +public class Ball implements IBall{ + + /** + * The balls position on the playground + */ + private Position position; + + /** + * The balls direction + */ + private Vector2D direction; + + /** + * The constructor of a ball + * The balls position and direction are initialized here. + */ + public Ball() { + this.position = new Position(0, 0); + this.direction = new Vector2D(0,0); + } + + /** + * The getter for the balls position + * @return position The balls current position + */ + public Position getPosition() { + return this.position; + } + + /** + * The getter for the balls direction + * @return direction The balls current direction + */ + public Vector2D getDirection() { + return this.direction; + } + + /** + * + */ + public void updatePosition() { + + } + + /** + * + */ + public void reactOnBorder() { + + } + +} diff --git a/src/break_out/model/Game.java b/src/break_out/model/Game.java new file mode 100644 index 0000000..73d22de --- /dev/null +++ b/src/break_out/model/Game.java @@ -0,0 +1,127 @@ +package break_out.model; + +import java.util.List; +import java.util.ArrayList; + +import break_out.controller.Controller; +import break_out.view.View; + +/** + * This class contains information about the game (the model in MVC) + * + * @author dmlux, modified by I. Schumacher + * + */ +public class Game { + + /** + * A list of observer objects + */ + private List observers = new ArrayList(); + + /** + * The controller of the game + */ + private Controller controller; + + /** + * The current level + */ + private Level level; + + /** + * The first levelnumber + */ + private int firstLevel = 1; + + /** + * The last levelnumber + */ + private int maxLevel = 1; + + /** + * The total score of the game + */ + private int score = 0; + + /** + * The constructor creates a new game instance with the given Controller + * + * @param controller + * The controller to manage this instance (MVC-patter) + */ + public Game(Controller controller) { + this.controller = controller; + createLevel(firstLevel, 0); + } + + // The three methods of the mvc pattern ---------------- + public void addObserver(View observer) { + observers.add(observer); + } + + public void removeObserver(View observer) { + observers.remove(observer); + } + + public void notifyObservers() { + for (View observer : observers) + observer.modelChanged(this); + } + // ------------------------------------------------------- + + /** + * Getter for the Controller + * + * @return controller The controller of this game + */ + public Controller getController() { + return controller; + } + + /** + * Getter for the current Level + * + * @return level The current level of the game + */ + public Level getLevel() { + return level; + } + + /** + * Getter for the total score + * + * @return score The current score of the game + */ + public int getScore() { + return score; + } + + /** + * Creates the first or the next level, if the level number is less or equal + * maxLevel. If the current level is higher than maxLevel the view will be + * switched to the startScreen. + * + * @param levelnr + * The number for the next level + * @param score + * The current players score after finishing the previous level. + */ + public void createLevel(int levelnr, int score) { + this.score = score; + if (levelnr <= maxLevel) { + // Creates a new level instance + level = new Level(this, levelnr, score); + // calls the run method to start the new level + level.start(); + // tells the controller to switch to the field view which displays the playground + controller.toPlayground(); + } else { + // tells the controller to switch to the startScreen of the game + controller.toStartScreen(); + + } + + } + +} diff --git a/src/break_out/model/IBall.java b/src/break_out/model/IBall.java new file mode 100644 index 0000000..fd5c227 --- /dev/null +++ b/src/break_out/model/IBall.java @@ -0,0 +1,10 @@ +package break_out.model; + +public interface IBall { + + // Exercise 1 + public void updatePosition(); + public void reactOnBorder(); + public Position getPosition(); + public Vector2D getDirection(); +} diff --git a/src/break_out/model/Level.java b/src/break_out/model/Level.java new file mode 100644 index 0000000..6c2f177 --- /dev/null +++ b/src/break_out/model/Level.java @@ -0,0 +1,126 @@ +package break_out.model; + + +/** + * This class contains information about the running game + * + * @author dmlux + * @author I. Schumacher + */ +public class Level extends Thread { + + /** + * The game to which the level belongs + */ + private Game game; + + /** + * The number of the level + */ + private int levelnr; + + /** + * The score of the level + */ + private int score; + + /** + * The ball of the level + */ + private Ball ball; + + /** + * Flag that shows if the ball was started + */ + private boolean ballWasStarted = true; + + /** + * The constructor creates a new level object and needs the current game object, + * the number of the level to be created and the current score + * @param game The game object + * @param levelnr The number of the new level object + * @param score The score + */ + public Level(Game game, int levelnr, int score) { + this.game = game; + this.levelnr = levelnr; + this.score = score; + this.ball = new Ball(); + + loadLevelData(levelnr); + } + + /** + * The getter for the ball object + * @return ball The ball of the level + */ + public Ball getBall() { + return this.ball; + } + + /** + * Sets ballWasStarted to true, the ball is moving + */ + public void startBall() { + ballWasStarted = true; + } + + /** + * Sets ballWasStarted to false, the ball is stopped + */ + public void stopBall() { + ballWasStarted = false; + } + + /** + * Returns if the ball is moving or stopped + * @return ballWasStarted True: the ball is moving; false: the ball is stopped + */ + public boolean ballWasStarted() { + return ballWasStarted; + } + + /** + * The method of the level thread + */ + public void run() { + game.notifyObservers(); + + // endless loop + while (true) { + // if ballWasStarted is true, the ball is moving + if (ballWasStarted) { + + // Call here the balls method for updating his position on the playground + + + // Call here the balls method for reacting on the borders of the playground + + + + // Tells the observer to repaint the components on the playground + game.notifyObservers(); + + } + // The thread pauses for a short time + try { + Thread.sleep(4); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + /** + * Loads the information for the level from a json-file located in the folder /res of the project + * @param levelnr The number X for the LevelX.json file + */ + private void loadLevelData(int levelnr) { + + } + +} + + + + diff --git a/src/break_out/model/Position.java b/src/break_out/model/Position.java new file mode 100644 index 0000000..dbdc170 --- /dev/null +++ b/src/break_out/model/Position.java @@ -0,0 +1,67 @@ +package break_out.model; + + +/** + * This class represents a position within the board in pixel coordinates + * + * @author dmlux + * + */ +public class Position { + + /** + * X coordinate + */ + private double x; + + /** + * Y coordinate + */ + private double y; + + /** + * The constructor needs a x and y coordinate to be called + * + * @param x The x position of the object on the board + * @param y The y position of the object on the board + */ + public Position(double x, double y) { + this.x = x; + this.y = y; + } + + /** + * Getter for the x-coordinate + * + * @return x The x value of this position + */ + public double getX() { + return x; + } + + /** + * Setter for the x-coordinate + * @param x The new x-coordinate + */ + public void setX(double x) { + this.x = x; + } + + /** + * Getter for y-coordinate + * + * @return y The y value of the position + */ + public double getY() { + return y; + } + + /** + * Setter for the y-coordinate + * @param y The new y-coordinate + */ + public void setY(double y) { + this.y = y; + } + +} diff --git a/src/break_out/model/Vector2D.java b/src/break_out/model/Vector2D.java new file mode 100644 index 0000000..3fb2dd6 --- /dev/null +++ b/src/break_out/model/Vector2D.java @@ -0,0 +1,70 @@ +package break_out.model; + +import break_out.Constants; +import break_out.model.Position; + +/** + * This class represent a two dimensional vector. + * + * @author I. Schumacher + */ +public class Vector2D { + + /** + * The x part of the vector + */ + private double dx; + + /** + * The y part of the vector + */ + private double dy; + + /** + * This constructor creates a new vector with the given x and y parts. + * + * @param dx the delta x part for the new vector + * @param dy the delty y part for the new vector + */ + public Vector2D(double dx, double dy) { + this.dx = dx; + this.dy = dy; + } + + /** + * Getter for the dx-part + * + * @return dx The dx part of this vector + */ + public double getDx() { + return dx; + } + + /** + * Setter for the dx-part + * + * @param dx The new dx part of this vector + */ + public void setDx(double dx) { + this.dx = dx; + } + + /** + * Getter for the dy-part + * + * @return dy The dy part of this vector + */ + public double getDy() { + return dy; + } + + /** + * Setter for the dy-part + * + * @param dy The new dy part of this vector + */ + public void setDy(double dy) { + this.dy = dy; + } + +} diff --git a/src/break_out/view/Field.java b/src/break_out/view/Field.java new file mode 100644 index 0000000..cb577a0 --- /dev/null +++ b/src/break_out/view/Field.java @@ -0,0 +1,114 @@ +package break_out.view; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; + +import javax.swing.JPanel; + +import break_out.Constants; +import net.miginfocom.swing.MigLayout; + +/** + * The field represents the board of the game. All components are on the board + * + * @author dmlux, modified by iSchumacher + * + */ +public class Field extends JPanel { + + /** + * Automatic generated serial version UID + */ + private static final long serialVersionUID = 2434478741721823327L; + + /** + * The connected view object + */ + private View view; + + /** + * The background color + */ + private Color background; + + /** + * The constructor needs a view + * + * @param view The view of this board + */ + public Field(View view) { + super(); + + this.view = view; + this.background = new Color(177, 92, 107); + + setFocusable(true); + + // Load settings + initialize(); + } + + /** + * Initializes the settings for the board + */ + private void initialize() { + // creates a layout + setLayout(new MigLayout("", "0[grow, fill]0", "0[grow, fill]0")); + } + + /** + * Change the background color + * @param color The new color + */ + public void changeBackground(Color color) { + background = color; + repaint(); + } + + /** + * This method is called when painting/repainting the playground + * @param g the graphics object + */ + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + + double w = Constants.SCREEN_WIDTH; + double h = Constants.SCREEN_HEIGHT; + + // Setting the dimensions of the playground + setPreferredSize(new Dimension((int) w, (int) h)); + setMaximumSize(new Dimension((int) w, (int) h)); + setMinimumSize(new Dimension((int) w, (int) h)); + + Graphics2D g2 = (Graphics2D) g; + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + + // Setting the background color + g2.setColor(background); + g2.fillRect(0, 0, getWidth(), getHeight()); + + // Setting the color for the following components + g2.setColor(new Color(200, 200, 200)); + + // Calls the method for drawing the ball + drawBall(g2); + + } + + /** + * Draws the ball + * @param g2 The graphics object + */ + private void drawBall(Graphics2D g2) { + g2.fillOval((int) view.getGame().getLevel().getBall().getPosition().getX(), + (int) view.getGame().getLevel().getBall().getPosition().getY(), + Constants.BALL_DIAMETER, + Constants.BALL_DIAMETER); + } + +} diff --git a/src/break_out/view/SectionPanel.java b/src/break_out/view/SectionPanel.java new file mode 100644 index 0000000..0ea1f0c --- /dev/null +++ b/src/break_out/view/SectionPanel.java @@ -0,0 +1,145 @@ +package break_out.view; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.GradientPaint; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; + +import javax.swing.JPanel; + +/** + * This panel represents the background for special divisions in this application + * + * @author dmlux + * + */ +public class SectionPanel extends JPanel { + + /** + * Automatic generated serial version UID + */ + private static final long serialVersionUID = -7773487090869704154L; + + /** + * Color of the panel + */ + private Color color; + + /** + * Thickness of the border + */ + protected int strokeSize = 1; + + /** + * Color of the shadow + */ + protected Color shadowColor = new Color(50, 50, 50); + + /** + * Shadow flag + */ + protected boolean shady = true; + + /** + * Double value for the vertical curvature + */ + protected Dimension arcs = new Dimension(10, 10); + + /** + * Distance of shadow to the panel border + */ + protected int shadowGap = 3; + + /** + * Shadow offset + */ + protected int shadowOffset = 3; + + /** + * Shadow transparency + */ + protected int shadowAlpha = 200; + + + /** + * A constructor for the section panel + */ + public SectionPanel() { + super(); + setOpaque(false); + + // set background color + this.color = new Color(220, 220, 220); + } + + /** + * A constructor that expects a background color for this panel + * + * @param background The background color + */ + public SectionPanel(Color background) { + super(); + setOpaque(false); + + // set background + this.color = background; + } + + + @Override + public void setBackground(Color bg) { + color = bg; + repaint(); + } + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + + int width = getWidth(); + int height = getHeight(); + int shadowGap = this.shadowGap; + + Color shadowColorA = new Color(shadowColor.getRed(), + shadowColor.getGreen(), shadowColor.getBlue(), shadowAlpha); + Graphics2D g2 = (Graphics2D) g; + + // Sets antialiasing + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + + // Draws shadow borders if any. + if (shady) { + g2.setColor(shadowColorA); + g2.fillRoundRect(shadowOffset, // X position + shadowOffset, // Y position + width - strokeSize - shadowOffset, // width + height - strokeSize - shadowOffset, // height + arcs.width, arcs.height); // arc Dimension + } else + shadowGap = 1; + + // Draws the rounded opaque panel with borders. + Color c1 = color; + int nr = Math.min((color.getRed() + 40), 255); + int ng = Math.min((color.getGreen() + 40), 255); + int nb = Math.min((color.getBlue() + 40), 255); + Color c2 = new Color(nr, ng, nb); + GradientPaint gradient = new GradientPaint(0, 0, c1, getWidth(), + getHeight(), c2, true); + g2.setPaint(gradient); + g2.fillRoundRect(0, 0, width - shadowGap, height - shadowGap, + arcs.width, arcs.height); + + g2.setColor(new Color(120, 120, 120)); + g2.setStroke(new BasicStroke(strokeSize)); + g2.drawRoundRect(0, 0, width - shadowGap, height - shadowGap, + arcs.width, arcs.height); + + // Sets strokes to default, is better. + g2.setStroke(new BasicStroke()); + } +} diff --git a/src/break_out/view/StartScreen.java b/src/break_out/view/StartScreen.java new file mode 100644 index 0000000..d086204 --- /dev/null +++ b/src/break_out/view/StartScreen.java @@ -0,0 +1,198 @@ +package break_out.view; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.SwingConstants; + +import break_out.Constants; +import net.miginfocom.swing.MigLayout; + +/** + * This screen serves the configuration of the game. + * + * @author dmlux, modified by I. Schumacher + * + */ +public class StartScreen extends JPanel { + + /** + * Automatic generated serial version UID + */ + private static final long serialVersionUID = -131505828069382345L; + + /** + * Start game button + */ + private JButton startGame; + + /** + * The connected view object + */ + private View view; + + /** + * Quit game button + */ + private JButton quitGame; + + /** + * Input field for the players name + */ + private JTextField playersName; + + /** + * The error label + */ + private JLabel error; + + + /** + * The constructor needs a view + * + * @param view The view of this board + */ + public StartScreen(View view) { + super(); + this.view = view; + double w = Constants.SCREEN_WIDTH; + double h = Constants.SCREEN_HEIGHT; + + setPreferredSize(new Dimension((int) w, (int) h)); + setMaximumSize(new Dimension((int) w, (int) h)); + setMinimumSize(new Dimension((int) w, (int) h)); + + initialize(); + } + + + /** + * Initializes the settings for this screen + */ + private void initialize() { + // layout + setLayout(new MigLayout("", + "10[35%, center, grow, fill][65%, center, grow, fill]10", + "10[center, grow, fill]10")); + + // background color + setBackground(Constants.BACKGROUND); + + // initializes menu + initializeLeftMenu(); + initializeScoreMenu(); + } + + /** + * Initializes the left menu + */ + private void initializeLeftMenu() { + // the layout + SectionPanel leftMenu = new SectionPanel(); + leftMenu.shady = false; + leftMenu.setLayout(new MigLayout("", "10[center, grow, fill]10", + "10[center]30[center]5[center]20[center]5[center]0")); + + // adding components to the layout + startGame = new JButton("Spiel starten"); + quitGame = new JButton("Spiel beenden"); + playersName = new JTextField(); + + error = new JLabel(""); + error.setForeground(new Color(204, 0, 0)); + error.setHorizontalAlignment(SwingConstants.CENTER); + + JLabel menuLabel = new JLabel(Constants.APP_TITLE + " Spielmenü"); + menuLabel.setFont(new Font("Sans-serif", Font.PLAIN, 16)); + menuLabel.setHorizontalAlignment(SwingConstants.CENTER); + + leftMenu.add(menuLabel, "cell 0 0, growx"); + leftMenu.add(new JLabel("Spielername:"), "cell 0 1, growx, gapleft 5"); + leftMenu.add(playersName, "cell 0 2, growx"); + leftMenu.add(startGame, "cell 0 3, growx"); + leftMenu.add(quitGame, "cell 0 4, growx"); + leftMenu.add(error, "cell 0 5, growx"); + add(leftMenu, "cell 0 0"); + } + + /** + * Initializes the right menu + */ + private void initializeScoreMenu() { + // The layout + SectionPanel scoreMenu = new SectionPanel(Color.WHITE); + scoreMenu.shady = false; + scoreMenu.setLayout(new MigLayout("", "10[center, grow, fill]10", + "5[center]5")); + + // adding the compoenents to the layout + JLabel headline = new JLabel("Scores"); + headline.setFont(new Font("Sans-serif", Font.PLAIN, 16)); + headline.setHorizontalAlignment(SwingConstants.CENTER); + scoreMenu.add(headline, "cell 0 0, gaptop 5"); + + add(scoreMenu, "cell 1 0, gapleft 5"); + } + + /** + * Adds an action listener to the start button + * @param l The actionListener + */ + public void addActionListenerToStartButton(ActionListener l) { + startGame.addActionListener(l); + } + + /** + * Returns the start button + * @return startGame The button for starting the game + */ + public JButton getStartButton() { + return startGame; + } + + /** + * Adds an action listener to the quit button + * @param l The actionListener + */ + public void addActionListenerToQuitButton(ActionListener l) { + quitGame.addActionListener(l); + } + + /** + * Returns the quit button + * @return quitGame The button for ending the game + */ + public JButton getQuitButton() { + return quitGame; + } + + /** + * Returns the players name + * @return The name of the player in the JTextField playersName + */ + public String getPlayersName() { + return playersName.getText(); + } + + /** + * Shows an error in the menu + * @param message The String to be shown + */ + public void showError(String message) { + error.setText(message); + } + + /** + * Removes error message from the screen + */ + public void hideError() { + error.setText(""); + } + +} diff --git a/src/break_out/view/View.java b/src/break_out/view/View.java new file mode 100644 index 0000000..5def037 --- /dev/null +++ b/src/break_out/view/View.java @@ -0,0 +1,127 @@ +package break_out.view; + +import java.awt.CardLayout; + +import javax.swing.JFrame; + +import break_out.Constants; +import break_out.model.Game; + +/** + * The view class manages the depiction of the components inside the JFrames. It + * gets the components from the game which is connected to this class + * + * @author dmlux + * + */ +public class View extends JFrame { + + /** + * Automatic generated serial version UID + */ + private static final long serialVersionUID = -1850986636132660133L; + + /** + * THe layout + */ + private CardLayout cardLayout; + + /** + * The connected game + */ + private Game game; + + /** + * The start screen of this application + */ + private StartScreen startScreen; + + /** + * The playground + */ + private Field field; + + + /** + * The constructor of the view + */ + public View() { + super(Constants.APP_TITLE); + + // sets the default close operation + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //DISPOSE_ON_CLOSE); + + // adds a layout to the view + cardLayout = new CardLayout(); + getContentPane().setLayout(cardLayout); + + // adding screens to the view + startScreen = new StartScreen(this); + field = new Field(this); + + getContentPane().add(startScreen, StartScreen.class.getName()); + getContentPane().add(field, Field.class.getName()); + + // show start screen first + cardLayout.show(getContentPane(), StartScreen.class.getName()); + + // set the start position of the frame + setLocationRelativeTo(null); + setResizable(false); + setVisible(true); + pack(); + } + + /** + * Getter for the start screen + * @return startScreen + */ + public StartScreen getStartScreen() { + return startScreen; + } + + /** + * Getter for the playground + * @return field + */ + public Field getField() { + return field; + } + + /** + * Getter for the game + * @return game + */ + public Game getGame() { + return game; + } + + /** + * Setter for the game + * @param game The current game + */ + public void setGame(Game game) { + // set the game as model + this.game = game; + game.addObserver(this); + } + + /** + * Shows a given screen if the card layout contains this screen + * @param screenName The screen to be shown + */ + public void showScreen(String screenName) { + cardLayout.show(getContentPane(), screenName); + } + + /** + * Called by game.notifyObservers() in the run()-method of Level class + * to repaint the playground + * @param game The game to observe + */ + public void modelChanged(Game game) { + this.game = game; + // Calls the method paintComponents() in the Field class + field.repaint(); + } +}