From 3be48211ad062297750f9e103c46f63d4f7ab1f3 Mon Sep 17 00:00:00 2001 From: Sarah CHERCHEM <sarah.cherchem@etu.univ-amu.fr> Date: Fri, 6 Dec 2024 13:27:11 +0100 Subject: [PATCH] make MotorizedFireFighter extends Firefighter --- .../executionHistory/executionHistory.bin | Bin 63629 -> 75831 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/8.10.2/fileHashes/fileHashes.bin | Bin 28747 -> 34147 bytes .gradle/8.10.2/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.10.2/fileHashes/resourceHashesCache.bin | Bin 23427 -> 25161 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../java/main/app/SimulatorApplication.class | Bin 3219 -> 3219 bytes .../classes/java/main/app/SimulatorMain.class | Bin 438 -> 438 bytes .../java/main/controller/Controller.class | Bin 7423 -> 7430 bytes build/classes/java/main/module-info.class | Bin 337 -> 337 bytes build/classes/java/main/view/Grid.class | Bin 401 -> 401 bytes .../classes/java/main/view/ViewElement.class | Bin 1693 -> 1644 bytes src/main/java/controller/Controller.java | 3 +- .../model/Board/BoardFireFighterBehavior.java | 71 +++++++++--------- .../java/model/Board/FirefighterBoard.java | 6 +- ...trategy.java => CloudStrategyElement.java} | 6 +- .../ExtinguishFire/DefaultFireFighter.java | 7 +- ...y.java => FireFighterStrategyElement.java} | 10 +-- .../ExtinguishFire/FirefighterFactory.java | 8 +- .../ExtinguishFire/MotorizedFireFighter.java | 2 +- ...egy.java => MotorizedStrategyElement.java} | 6 +- .../{Strategy.java => StrategyElement.java} | 2 +- ...Strategy.java => FireStrategyElement.java} | 6 +- 23 files changed, 68 insertions(+), 59 deletions(-) rename src/main/java/model/ExtinguishFire/{CloudStrategy.java => CloudStrategyElement.java} (94%) rename src/main/java/model/ExtinguishFire/{FireFighterStrategy.java => FireFighterStrategyElement.java} (89%) rename src/main/java/model/ExtinguishFire/{MotorizedStrategy.java => MotorizedStrategyElement.java} (94%) rename src/main/java/model/{Strategy.java => StrategyElement.java} (87%) rename src/main/java/model/flammable/{FireStrategy.java => FireStrategyElement.java} (92%) diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin index 0d10cd15e6aa1d0ba21cc348a2fb3c9faf15cd82..459f04112a97c216770827ed0a626f1ff39e9127 100644 GIT binary patch literal 75831 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 Pd;luEFKmOX)L#YwBN}eW delta 1649 zcmdmffu;8&^8^t_=82-}jFuY%Pl!)U5Sc6~;ly-OdvmOWeu#bY?9yVRRFlf`)Kb%= zqOyWQGZT}{?4+!m!mLDr4G*jCxrmf$O_^sRc2zF_r!9ua=F>S@jBIV8A#S=Blb!Ok z7*9`r7-K71lv<o$T9lkxtY4OyTF%JW3Zf=A#@RWc%ILc!7G;NIq~@mTB^MVn3+y{_ zdzJdDofCdeKIVS<&k8Qa$smoWswN9|+u5KQ15%}zR*{>-EO2+?){7OB;<<`AIlubq zx~4PsgCxQ30IOg;26CYk+yH@|vjLwZ*9ob7{(EJw$su#SNd-!bCni6PF_~O2o2?$M zPCqv>Gmio65yn0gXER_pd&A=6)3zJE7H8}N*$uXq0mETS!HRYWGBXJ5IM33_R%*U| z&%%t0&XzI9m>FQMVp93M`FVkVgrk1o?D90D(yZiClOof^oV?uRvRt#G^mL=j#Nu3m zm0IRiv#hnG4y1CGoQ%v_zla4xX!653uA3jsso)h5Q0F{0J%Bl6-NmIjKDNnECS8}A ztXaQsa@k7f$rBp68TF^9u``-5KA8M4#$$3qIO}vV4o2bW-`N?BCW~zL1dA-;U=*6( z%E4&J_!_2a^6i^)Ld*h})ppEW(V7!c`!Orlozql&x&bGnHsf0)Rb12GaWaZcKg!8y z&-e%?KD~*HQFMAT7o!Q|W4M?YH=~#kvw(DorPj{)?1>AcdLMKy4hWmh$<3&|`P+Ii z#>s5)o|DTT@lWGpWSu^lhtY!Z1z0moD2|trXSx9|qZQ*TWN{_m{Ib;C)Vz{ny{yEt zL}mf8$8Kv+Pt#*$J;QN+p#tYq#+8!`ABloY<%BDpTo~ptc|i;t$UYUf%%W7c%=C<s z)FP-6xySdki@b4sW^vZ?wvC&I0OK-{5rXIn-@)85x%Gj#2(y5_<5Q1QdKs)+udy!- z;fmhRxE7=hB+2*zu2gZ0q!6=!SA&45&h<-b{$^hBCMzF2oSgqie6r#eNyax&g_4tJ zZsnc4<)IB+tA-G>z`6{<7cLSjF29<1%vK`w!N<w@j|>=L&XAb=dK;ezvp`g#H*2=f zj1Bd(*!Mm@yHyhG3^|bG<k>Br)7^v_g(oj~tP71Vw<l7Qb)J|oJ^@?o_Jj{3K(iz+ z<$b?Xz>)iH%K!6ka=jQAPj+}B!T}4+$q&~0PyY6lfBIt)Mq_A%e|suD`OZ_*$)XXS zlTXFjOlIA2Vlw-4vB__r8B8t<a|Q=J`*Xp`Yo7B>mlkKVocy&PEI9qBIHS;H!52D{ z-L`s8-uOav^7I$_lgqYyPCmQCZL?N_7xVN5GK?CN=OjA|w06zjQy-WyziQ5kaP^C} zu9M#<PoEsUUx4N5*~5D#=kHIG3Kh#THCX*`-H+v7ix~_qh96$?dCzvE|CWq%rZciL zicL016`w3~fZN4-isQry^;g>*C7iT*4sT~;Xv@t{NzGwsbIMOFN@45)Q+mlciN(bX z0!O6zPFKAt;<jP%W__U|`~Uly!+W+H-I&~;Dk1)U!ax6xD^vE&Et(h2e_~Tz-&v5{ z>B;+2#iazAcs@*6a^J8y;dk;p{*<;=V7Ycy#`%*!u92L4_W--N^16>b3m+e<(LJuQ zeBzhTviD&3c1#bDXH*s6vCOHW>DgPwG{HstZ!9|9ITfsb>Er`bq$Ko2H~vgGD%ZD> z-{~pKVFlOOV7Zr!lP?^S(srtu@#zz5L~6A2=_~d9&W~<_O<m={%pkDv+0@x?&qWF+ b+&BJz{AP&U<aY;?rl%?}%5PTqn9B|TNJhcD diff --git a/.gradle/8.10.2/executionHistory/executionHistory.lock b/.gradle/8.10.2/executionHistory/executionHistory.lock index dc9b958a69a79966bb17ff7689c9022c15f91339..e2e0af4615507a280641a02a551948f25839bfd4 100644 GIT binary patch literal 17 UcmZQRe96UU<&lZk7$Be;06tj-cmMzZ literal 17 UcmZQRe96UU<&lZk7$6`A06t0uX#fBK diff --git a/.gradle/8.10.2/fileHashes/fileHashes.bin b/.gradle/8.10.2/fileHashes/fileHashes.bin index 87310951124d22132928c8af855e06a950b81eed..8b9850dbfcb79c223a9b6935bf38eb34a22633ca 100644 GIT binary patch delta 7258 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 DV-)Wp delta 344 zcmaFd#dP`s;|601A%?RJuO)+z{CsB100#cmlVc@jPF9mFpS)GlV6v!`$K+nAgvqAT z9+Rg^OHAgK@tB+|BQbfajKSo;GKrJRWZfrUm6e#xDmP*BQMnb9TjeDtZ<RNk{7+tg za;ZYaWM4(Y$<q||C*M_^IJr&9VDdSo^2xEv5|ewCB_{7xmY6K7A~D%l<;LV(Rl~{K zR6Qn(sYy(BQ}dX-Oig0)JGK7FQ`HS7-&L2Gtg2x+IZvZ}vZ$uSWLHgz$)%bSlb32r zPQIpjVDdUGgUR2t3?|!Y>rZag_L%%sTVk@Pj=|(u9nZ=8blfMK>UvC`s%tR$uI_=! zTlFL+Kh-ms?5b}t`KrFeWL5)-$)*O9lhX|1C*L(Nm~3k(F?p_`$7E5X%E`-&JSMXl zi%<47_L#iZSaR|`<M_#;CK8k9noOANYAP|g)KrN{*mI-e5Alr#7g#nsdT?m~0AZtl AA^-pY diff --git a/.gradle/8.10.2/fileHashes/fileHashes.lock b/.gradle/8.10.2/fileHashes/fileHashes.lock index 20309a5ed04d71b4ec90a70520da51a1b0d06329..404b97867be6a0741d90503283928ce3074d4a4c 100644 GIT binary patch literal 17 VcmZR+_F~glt9wx?3}C=w2LMF*1%Utn literal 17 VcmZR+_F~glt9wx?3}C<<0RTl21)2Z= diff --git a/.gradle/8.10.2/fileHashes/resourceHashesCache.bin b/.gradle/8.10.2/fileHashes/resourceHashesCache.bin index 475ab9df139928ba57d62937f467bbeed2e56065..8cbc23810fcce9a52779d9e11a796b0fbf43d578 100644 GIT binary patch delta 1751 zcmZqP&Uo?&;|3E6#v_wWC2k0G?wGe&EJ-Yw0Sw|7PG*%<5a==0kSP)Rp#m0Ti1D8+ zD;dZat~`~es$35umN+>@(o$g7>UnWb>vv~C#NwY$o+_yzFxy=G)7iRq1&CnG&&g{g z6&x1Irfr*h;(7=~FmCgIC|GQ}iO>1YjSh%-Vl7no|B_g~NyZ``vmoNpOD7+dR1jF< zbp7qIaF2Y5V1nl4yOJ{mHU+MT2ud<2ga{^zPtKKU5ZKX?x#igV4LK0Ogs+pIN-6U5 zsW>K{KFkCWi#<B|uT+M>zWCFt<KqtLKm=p9PL7rSA#mo$a;XsM4=oVESlh|IG8r0| zYP0;`IR9sZ3dX}+dO6g3-t+ngc@XjV!;{y_DDtx~E;ou*4uXiqO`LpGCP3r1)wSqN z5^b9xf-#d}2HaC+?3jD35$e{&`IC8NGa_EQbH8~eV;2fh94ie|{5JQ@^Mvr7OCaJ& ztZ?x~DG!dhOEE*l<E>%h?^aJLES~v-1tK1EeR8g>BEK&8pUdwpFG9rPzE5tIRpf7+ zaBF6n_j{<A@8r3%it2nP`@L(X?}La%zl53j+3e_<ix=}&Ld0VVCvTNi<X6g5a6cSq z1r^hsd{$OL;M<qNrF}cM$3g_-I43`q&E!v$>hk<44^1-B$0xhWSqS{wD5$fq(wZHj zFn00eQaJ?y2IGVGtTP^lLj)5KPVSYP$)9;N<C#O~WQbS-`(#=983F>oc`xtNH#-Iq zjBT8}R(>Y`$w%8y71-85#FEq}+bSsX>+2@{4|D5+h$TLr9I6l?An~U)TC+O32O^ko zdGcI^2Lc)^dBeK59&CjO#^p~gRa9`$xw|Cr`U8;{5W(nXSa9eb|7)>RRiqvw9(NTk zerZemgnw<h5b=cE$-Rn!d@K*0&j0U>hls^&zM{C0QNZ`bB%f28IIchh<6|f1DhCJz zGhWEN%Y0}%L@=R$@>XR_{=8{y)fetVofZ3h@>696ftX7>11GmOWk3|hOHTf)+#ry) z^3gH*gSOC25vM)5R3($YviPXi|9q&zgpHH0ssv~h&YH@il=<~DM0cVk%<&~U3<1Ad zE<!U)g7;)uRSSWt_;QcztGQDlisS1i`>J*^2^DTs{2{*4U<K=DM-M0A$<;vylM6kR z1U}bp)%?-iz9;G2X}xn&K|Pa?dYDWu4o?#hl~71Kx60+;o9(}{Gjrb?PJS64CZKU+ zc@b0MqHiM0T76Fb%SoDC?PoIiZ>ZAb#0VDwi~6eS_(NA@({%rr{;mGBa<X8MaIoTr zso^yVA6T|&<|k=>pUA+#AZN_Lz#z%Mz#s_10%ihJZp2Ny+&!b%jVZaf$pce`r{K@h zBl}9~8WrRw8i#t$np_wm%)ctRlxupC%AZ{YC-c`&uAM9$X<}5S?k;<`=Ig&}%YPl) z<Z|E<rcn*;5wRw>=I1J2&nOoCU0yl4F)~bmssF~svU~F;O-wbu)Z)x*I5{?2Z8C3^ z!Q}n^N|SA)Iwn8#SK`k<@t)P+@nm*NX;M{}>E+2!yi6z0_f?u4>)kQ=b(m89?7RJ; z>&w>5HK_~ko7i)_3DfSSy%F0rcissN)mKz&j){=PRKY8G_ZVZN+^JjHjTg@(+ik^E z@mhbcf6dwQckJPH6O<0FONOfeC2L4{DupaEiIh0S>k-DZzv@s6C>x=LxQw9w&q)$& zVue2il_YxYKzRyH#gcpcPD^Tb&2yO}cC^I%OD)_QP>g}FK!11zvm@XAd73NsTb3Bu c98$wna%Z>W>1W!9o<6szJj8f;o<B$h0Q;C^ivR!s delta 192 zcmX?kgt2)$;|3E6#)*?nC2mYsm6VtqD(N|So235azmgJ@b)_UG_ex1j-YYd>a;kL2 z<ge0_lhtJ6C(o7nFnOtL!emo9$;oMQ?vwAzB}|?xFFE;~yu{>x@)DEX6eK2>DTq&A zs*pHYPEmhys-nc?sfrUP+bQ)=eyTKaa-Xuq<bBHSlVw$IOy*UUn4GKXx%r&xbjHcG z>K>EtsvAyL(-5B=s!=idsYc@DI8FD-S2YbL%W5?-@vhvc_(Oc7K>^ohM-L}q0A&?O AEC2ui diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 3ee9cf49c8538b4e500bb8adaf6d780e784aebb4..2ee3535aaefb3d8d72961472cca76fcfb5d51700 100644 GIT binary patch literal 17 VcmZSn@!s@&$JN{N3}C=G9{@!A1?B(% literal 17 VcmZSn@!s@&$JN{N3}C=m2>?XZ1;79R diff --git a/build/classes/java/main/app/SimulatorApplication.class b/build/classes/java/main/app/SimulatorApplication.class index 8c667bcd48cc45a2d2c6b4306ef0f234f61bce68..74b875251a0cde725bd7e353d53f8ef10d36b6c1 100644 GIT binary patch delta 94 zcmbO%Ia!k9)W2Q(7#J8FHgf2(3-YruOy**k!Z4McVHyv^bcPw5OWBzinFSbTO}1p0 z<(tFBz`-z=hoPIHM}VPcb2$eyi{vB*W`>yzvl-?w%x7R=;9_88SirD|VF`mI0C1HR A+yDRo delta 93 zcmbO%Ia!k9)W2Q(7#J9wHgf2(GYc?Gp6tURD?gQsfrDWh4?{OYj{rjtKO4hLE{0hQ zv)LKu@G#6}n77%Tor!UCIR`U~<O~L8hDi)l7^XAKXJBC9Vqj!gz_5s634<g6V5Akq diff --git a/build/classes/java/main/app/SimulatorMain.class b/build/classes/java/main/app/SimulatorMain.class index 1d13229f73ef27c233a432bc89aa3dffc086246a..4530cc2971636d0c78bcf91139a4f699c2f20eb4 100644 GIT binary patch delta 17 ZcmdnSyp5UT)W2Q(7#J8FHgc?E1OPu^24esK delta 17 ZcmdnSyp5UT)W2Q(7#J9wHgc?E1OPv324w&M diff --git a/build/classes/java/main/controller/Controller.class b/build/classes/java/main/controller/Controller.class index 5a96d3a3c13b10ed04af9a938a84854c793dd986..f89eb335ede47088370d807266be9cbff8011b7f 100644 GIT binary patch delta 482 zcmexw*=EIY>ff$?3=9ko8#xTw8Pz9oh_bt+rX`l<lx+5AFW?g7XJho@V)SP8VQ2K^ zVf174-~3OIiBV60F_4i#T*D_Tu`DsILO-=EHLpb96+~KVhVip926HiRFoy6jIx#v6 zFgkA%wq;~gnrtWHz-h+7!eGw8!C*1DU8I25nt_AChCzkFmO+QXZZeCgKdU1HFN4$M z2+<9yt_<7^ZVbW<?hJYi9t@TYo(zr*UJStu-V9+3J`4#Az6^N`ew%g0#2GaM8MqmO z7{nNY8Dtqk7}OX-8T7%5LK%V>LKq?#!WohnA{Yu7A}8mH|8$IIkYb2oP-KW@P-Tc` z&|yemFknbxFlR_+ux3bQaAHVjaAU}1@MXwm2xQ1*h+xQPh+!yXNM<NzNM|Tx$YLm; zyj<ddXbl55LoI_4Lp_56Lj!{`LnDJVL(}9M$$ZvU26l$F$sZ)`Svwin8M-EakQABh zA*I3E%fQ0WH@Q^GhIJwX3&W(z+ob#jr!ufGOk?0?n9d-~FoQvyVdi8p=_KB{415gp z7}OZ%GiWg^nA|Eoi*qpp3&Roy4u++ZHDsJwS1@ohtejjR<HlGwdAp3hq$dM2V*q0i WV<=-70|NsW10!QNV<clVgCqcxLS(oA delta 474 zcmZp(`ftf`>ff$?3=9lT8#xTw#T0V$Q&MyET`Nj5^U_N*i!<CZi&FJBhp`uMu?sMI zF*1m2Og_jdtZJ<p#?Q*=!^ObC=*z?C#ON%*=*-W?7{J9C$QZ=V7|g>M!Wg>wx*!wd zW_Dp)Mn=WSt|AVcrVK0$W(*t*=9BwG3V5v;I2f!MR2Xa+bQo+WbBp@3Ixz4uI8Kfi z-Jt5iz|G*wAk5&#pvU0OV9DUY;K<;~5X|7k5XRumkig)>kjLP=*+fj7Q8R#nn<0=v zj3J0YmLZryjUj|VpCOdNharR^h#{CEf+36{i6NY!fFWXXiTF>)C<ZBpXa+@w7zR~_ zI0hYtcm@N8L<Vz)BnE4S6b2`TGzK?@3<h6@EQUaa9EJ#nJcbyC0)}LUB8GH^Qid#s zvdQZt4v1DWa5K~}2r<+#C@|DB7&A05STi(EZkEhvZDC+%Xr26B(w?=0ft{gqvbB^A zYYzhpL+|7oDI3-a3@i*2C-0T=7o5Vt!Z4MAn_(J*FvD~PafTU_Wu=pN=P>Xw%w<qx zn8%>SFn@B7^eoOr3@i+b88{f0OxBliW?jy}&9Gu}xr`fQ?c{wj`jY+(%#5Cl-i&^X TVGIlmTnvni;f#@t(F~FR&<bJO diff --git a/build/classes/java/main/module-info.class b/build/classes/java/main/module-info.class index a05e120336680c15a80138be7c30617ca4e5473c..7a769b70875d147512dd0dc3f725d1c113981548 100644 GIT binary patch delta 21 dcmcb}bdibU)W2Q(7#J8FCUPV&8cfW50RUcC2s;1( delta 21 dcmcb}bdibU)W2Q(7#J9wCUPV&8coc60RUcc2tNP- diff --git a/build/classes/java/main/view/Grid.class b/build/classes/java/main/view/Grid.class index c4fa5e96b46909e2a89e512f2ad9c2d4d042260c..3d42b97050079349780725b186452a4ef88502d2 100644 GIT binary patch delta 17 ZcmbQpJdv5>)W2Q(7#J8FHga?_0suO81@r&_ delta 17 ZcmbQpJdv5>)W2Q(7#J9wHga?_0suOI1@-^{ diff --git a/build/classes/java/main/view/ViewElement.class b/build/classes/java/main/view/ViewElement.class index 1e8628999cc6101c22f3f65568027fa8214a343a..8047aa8366eef1bb8ec486a30882d7f0e9354ea1 100644 GIT binary patch delta 94 zcmbQs`-X?>)W2Q(7#J8F7_v8VwJ~pA%q+vm$T;}`i#0nFgD!(L1Jh()R(tVe1~vu| p;9)RiFk)b4NMT@LU}8v}T*jKnoW_to`4;OIeu!8GLnc@*3jii^6A=Ia delta 142 zcmaFEGnbd^)W2Q(7#J9w7;-jpwJ{3{_@<U*<fjBA7A5AUmZTOHZ|-B3V`OBSyq3jU zD4BtQft8Vgp@D&ci9wgant^%pdlq}G6b3d15a3}jWH4f2W&kPUWoBRyV1Qr-28L7y cke0N`uB?g7=?oc@SFhlph|WP#<f0fuTDr~m)} diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index 053ab13..f0e6499 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -15,6 +15,7 @@ import javafx.util.Pair; import model.*; import model.Board.FirefighterBoard; import model.ExtinguishFire.Cloud; +import model.ExtinguishFire.DefaultFireFighter; import model.ExtinguishFire.FireFighter; import model.ExtinguishFire.MotorizedFireFighter; import model.Obstacle.Mountain; @@ -88,7 +89,7 @@ public class Controller { } private ViewElement getViewElement(List<ModelElement> squareState) { for (ModelElement element : squareState) { - if (element instanceof FireFighter) { + if (element instanceof DefaultFireFighter) { return ViewElement.FIREFIGHTER; } if (element instanceof Fire) { diff --git a/src/main/java/model/Board/BoardFireFighterBehavior.java b/src/main/java/model/Board/BoardFireFighterBehavior.java index 9a88252..5da4396 100644 --- a/src/main/java/model/Board/BoardFireFighterBehavior.java +++ b/src/main/java/model/Board/BoardFireFighterBehavior.java @@ -1,12 +1,15 @@ package model.Board; -import model.*; + +import model.ElementFactory; +import model.ElementGenerator; import model.ExtinguishFire.*; import model.Obstacle.MountainGenerator; import model.Obstacle.Road; import model.Obstacle.Terrain; +import model.StrategyElement; import model.flammable.Fire; -import model.flammable.FireStrategy; +import model.flammable.FireStrategyElement; import model.flammable.Rocky; import util.Position; import util.TargetStrategy; @@ -24,30 +27,30 @@ public class BoardFireFighterBehavior implements BoardBehavior { private ElementFactory<Rocky> rockyFactory; private static Map<Position, Terrain> terrainMap = new HashMap<>(); private static int step; - static Strategy fireStrategy; - static Strategy fireFighterStrategy; - static Strategy cloudStrategy; - static Strategy motorizedStrategy; + static StrategyElement fireStrategyElement; + static StrategyElement fireFighterStrategyElement; + static StrategyElement cloudStrategyElement; + static StrategyElement motorizedStrategyElement; private ElementGenerator moutainGenerator; - public BoardFireFighterBehavior(Map<Position, List<Position>> neighbors, ElementFactory<Fire> fireFactory , ElementFactory<FireFighter> firefighterFactory, + public BoardFireFighterBehavior(Map<Position, List<Position>> neighbors, ElementFactory<Fire> fireFactory , ElementFactory<DefaultFireFighter> firefighterFactory, ElementFactory<Cloud> cloudFactory, ElementFactory<MotorizedFireFighter> motorizedFactory, ElementFactory<Rocky> rockyFactory) { this.step=0; this.neighbors = neighbors; this.rockyFactory=rockyFactory; - fireStrategy =new FireStrategy(fireFactory); - fireFighterStrategy =new FireFighterStrategy(firefighterFactory); - cloudStrategy =new CloudStrategy(cloudFactory); - motorizedStrategy =new MotorizedStrategy(motorizedFactory); + fireStrategyElement =new FireStrategyElement(fireFactory); + fireFighterStrategyElement =new FireFighterStrategyElement(firefighterFactory); + cloudStrategyElement =new CloudStrategyElement(cloudFactory); + motorizedStrategyElement =new MotorizedStrategyElement(motorizedFactory); moutainGenerator=new MountainGenerator(); } public void initializeElements(int rowCount, int columnCount) { - fireStrategy.initializeElement(rowCount,columnCount); - fireFighterStrategy.initializeElement(rowCount,columnCount); - cloudStrategy.initializeElement(rowCount,columnCount); + fireStrategyElement.initializeElement(rowCount,columnCount); + fireFighterStrategyElement.initializeElement(rowCount,columnCount); + cloudStrategyElement.initializeElement(rowCount,columnCount); // Pompiers motorisés - motorizedStrategy.initializeElement(rowCount,columnCount); + motorizedStrategyElement.initializeElement(rowCount,columnCount); // Rocky rocky = new ArrayList<>(); List<Rocky> rockies = rockyFactory.createElements(rowCount, columnCount); @@ -65,7 +68,7 @@ public class BoardFireFighterBehavior implements BoardBehavior { public static void extinguish(Position position) { - fireStrategy.getPositions().remove(position); + fireStrategyElement.getPositions().remove(position); @@ -74,7 +77,7 @@ public class BoardFireFighterBehavior implements BoardBehavior { public Set<Position> getFirePositions() { - return (Set<Position>) fireStrategy.getPositions(); + return (Set<Position>) fireStrategyElement.getPositions(); } @@ -91,10 +94,10 @@ public class BoardFireFighterBehavior implements BoardBehavior { @Override public List<Position> updateToNextGeneration() { - List<Position> modifiedPositions = fireFighterStrategy.updateElements(); - modifiedPositions.addAll(fireStrategy.updateElements()); - modifiedPositions.addAll(cloudStrategy.updateElements()); - modifiedPositions.addAll(motorizedStrategy.updateElements()); + List<Position> modifiedPositions = fireFighterStrategyElement.updateElements(); + modifiedPositions.addAll(fireStrategyElement.updateElements()); + modifiedPositions.addAll(cloudStrategyElement.updateElements()); + modifiedPositions.addAll(motorizedStrategyElement.updateElements()); incrementStep(); return modifiedPositions; } @@ -103,10 +106,10 @@ public class BoardFireFighterBehavior implements BoardBehavior { public void reset() { this.step=0; // Vider toutes les positions stockées - fireStrategy.getPositions().clear(); - fireFighterStrategy.getPositions().clear(); - cloudStrategy.getPositions().clear(); - motorizedStrategy.getPositions().clear(); + fireStrategyElement.getPositions().clear(); + fireFighterStrategyElement.getPositions().clear(); + cloudStrategyElement.getPositions().clear(); + motorizedStrategyElement.getPositions().clear(); rocky.clear(); terrainMap.clear(); @@ -123,10 +126,10 @@ public class BoardFireFighterBehavior implements BoardBehavior { public static void extinguishNearbyFires(Position firefighterPosition, List<Position> modifiedPositions) { List<Position> nearbyFires = getNeighbors().getOrDefault(firefighterPosition, Collections.emptyList()) .stream() - .filter(fireStrategy.getPositions()::contains) + .filter(fireStrategyElement.getPositions()::contains) .toList(); for (Position fire : nearbyFires) { - fireStrategy.getPositions().remove(fire); + fireStrategyElement.getPositions().remove(fire); modifiedPositions.add(fire); System.out.println("Feu éteint à : " + fire); } @@ -142,12 +145,12 @@ public class BoardFireFighterBehavior implements BoardBehavior { } // Si la position est occupée par un feu et que le terrain n'est pas traversable par le feu - if(cloudStrategy.getPositions().contains(position)) + if(cloudStrategyElement.getPositions().contains(position)) { return false; } // Si la position est une montagne, aucun élément ne peut la franchir sauf les nuages - if (terrainMap.get(position) != null && !cloudStrategy.getPositions().contains(position)) { + if (terrainMap.get(position) != null && !cloudStrategyElement.getPositions().contains(position)) { return false; // Impossible de franchir une montagne, sauf pour un nuage } if(rocky.contains(position)) @@ -231,18 +234,18 @@ public class BoardFireFighterBehavior implements BoardBehavior { public static Collection<Position> getFirefighterPositions() { - return fireFighterStrategy.getPositions(); + return fireFighterStrategyElement.getPositions(); } public Collection<Position> getCloudPositions() { - return cloudStrategy.getPositions(); + return cloudStrategyElement.getPositions(); } public List<Position> getMotorizedFighters() { - return (List<Position>) motorizedStrategy.getPositions(); + return (List<Position>) motorizedStrategyElement.getPositions(); } - public static Strategy getFireMovements() { - return fireStrategy; + public static StrategyElement getFireMovements() { + return fireStrategyElement; } } diff --git a/src/main/java/model/Board/FirefighterBoard.java b/src/main/java/model/Board/FirefighterBoard.java index f4d23f0..bde3e63 100644 --- a/src/main/java/model/Board/FirefighterBoard.java +++ b/src/main/java/model/Board/FirefighterBoard.java @@ -1,7 +1,7 @@ package model.Board; -import model.*; import model.ExtinguishFire.*; +import model.ModelElement; import model.Obstacle.Mountain; import model.Obstacle.Road; import model.flammable.Fire; @@ -63,7 +63,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { // Filtrage des éléments Firefighter (en transformant les positions en objets FireFighter) behavior.getFirefighterPositions().stream() .filter(pos -> pos.isAtPosition(position)) // Vérifier si la position correspond - .forEach(pos -> result.add(new FireFighter(pos))); // Créer un objet Firefighter à partir de Position + .forEach(pos -> result.add(new DefaultFireFighter(pos))); // Créer un objet Firefighter à partir de Position // Filtrage des éléments Cloud behavior.getCloudPositions().stream() .filter(pos -> pos.isAtPosition(position)) @@ -104,7 +104,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { private void addElementToBoard(ModelElement element, Position position) { if (element instanceof Fire) { behavior.getFirePositions().add(position); // Ajouter un Fire - } else if (element instanceof FireFighter) { + } else if (element instanceof DefaultFireFighter) { behavior.getFirefighterPositions().add(position); // Ajouter un Firefighter } else if (element instanceof Cloud) { behavior.getCloudPositions().add(position); diff --git a/src/main/java/model/ExtinguishFire/CloudStrategy.java b/src/main/java/model/ExtinguishFire/CloudStrategyElement.java similarity index 94% rename from src/main/java/model/ExtinguishFire/CloudStrategy.java rename to src/main/java/model/ExtinguishFire/CloudStrategyElement.java index f65b43b..be5f272 100644 --- a/src/main/java/model/ExtinguishFire/CloudStrategy.java +++ b/src/main/java/model/ExtinguishFire/CloudStrategyElement.java @@ -1,17 +1,17 @@ package model.ExtinguishFire; import model.ElementFactory; -import model.Strategy; +import model.StrategyElement; import util.Position; import java.util.*; import static model.Board.BoardFireFighterBehavior.*; -public class CloudStrategy implements Strategy { +public class CloudStrategyElement implements StrategyElement { private List<Position> cloudPositions; private final ElementFactory<Cloud> cloudFactory; - public CloudStrategy(ElementFactory<Cloud> cloudFactory) { + public CloudStrategyElement(ElementFactory<Cloud> cloudFactory) { this.cloudPositions = new ArrayList<>(); this.cloudFactory = cloudFactory; } diff --git a/src/main/java/model/ExtinguishFire/DefaultFireFighter.java b/src/main/java/model/ExtinguishFire/DefaultFireFighter.java index e6897fa..e8e74d8 100644 --- a/src/main/java/model/ExtinguishFire/DefaultFireFighter.java +++ b/src/main/java/model/ExtinguishFire/DefaultFireFighter.java @@ -1,4 +1,9 @@ package model.ExtinguishFire; -public class DefaultFireFighter { +import util.Position; + +public class DefaultFireFighter extends FireFighter{ + public DefaultFireFighter(Position position) { + super(position); + } } diff --git a/src/main/java/model/ExtinguishFire/FireFighterStrategy.java b/src/main/java/model/ExtinguishFire/FireFighterStrategyElement.java similarity index 89% rename from src/main/java/model/ExtinguishFire/FireFighterStrategy.java rename to src/main/java/model/ExtinguishFire/FireFighterStrategyElement.java index fd60dbe..18d7da3 100644 --- a/src/main/java/model/ExtinguishFire/FireFighterStrategy.java +++ b/src/main/java/model/ExtinguishFire/FireFighterStrategyElement.java @@ -1,7 +1,7 @@ package model.ExtinguishFire; import model.ElementFactory; -import model.Strategy; +import model.StrategyElement; import util.Position; import java.util.ArrayList; @@ -11,10 +11,10 @@ import java.util.Set; import static model.Board.BoardFireFighterBehavior.*; -public class FireFighterStrategy implements Strategy { - private final ElementFactory<FireFighter> firefighterFactory; +public class FireFighterStrategyElement implements StrategyElement { + private final ElementFactory<DefaultFireFighter> firefighterFactory; private List<Position> firefighterPositions; - public FireFighterStrategy(ElementFactory<FireFighter> firefighterFactory) { + public FireFighterStrategyElement(ElementFactory<DefaultFireFighter> firefighterFactory) { this.firefighterFactory = firefighterFactory; this.firefighterPositions = new ArrayList<>(); } @@ -68,7 +68,7 @@ public class FireFighterStrategy implements Strategy { public void initializeElement(int rowCount, int columnCount) { // Pompiers firefighterPositions = new ArrayList<>(); - List<FireFighter> firefighters = firefighterFactory.createElements(rowCount, columnCount); + List<DefaultFireFighter> firefighters = firefighterFactory.createElements(rowCount, columnCount); for (FireFighter firefighter : firefighters) { firefighterPositions.add(firefighter.getPosition()); } diff --git a/src/main/java/model/ExtinguishFire/FirefighterFactory.java b/src/main/java/model/ExtinguishFire/FirefighterFactory.java index b45e236..bf2fa18 100644 --- a/src/main/java/model/ExtinguishFire/FirefighterFactory.java +++ b/src/main/java/model/ExtinguishFire/FirefighterFactory.java @@ -8,7 +8,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; -public class FirefighterFactory implements ElementFactory<FireFighter>, PositionGenerator { +public class FirefighterFactory implements ElementFactory<DefaultFireFighter>, PositionGenerator { private final Random random; private int count; @@ -18,11 +18,11 @@ public class FirefighterFactory implements ElementFactory<FireFighter>, Position } @Override - public List<FireFighter> createElements(int rowCount, int columnCount) { - List<FireFighter> firefighters = new ArrayList<>(); + public List<DefaultFireFighter> createElements(int rowCount, int columnCount) { + List<DefaultFireFighter> firefighters = new ArrayList<>(); for (int i = 0; i < count; i++) { Position randomPosition = generateRandomPosition(rowCount, columnCount); - firefighters.add(new FireFighter(randomPosition)); + firefighters.add(new DefaultFireFighter(randomPosition)); } return firefighters; } diff --git a/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java b/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java index 8c76873..44d0945 100644 --- a/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java +++ b/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java @@ -6,7 +6,7 @@ import util.TargetStrategy; import java.util.*; -public class MotorizedFireFighter extends BoardElement { +public class MotorizedFireFighter extends FireFighter{ private final TargetStrategy targetStrategy = new TargetStrategy(); public MotorizedFireFighter(Position position) { super(position); diff --git a/src/main/java/model/ExtinguishFire/MotorizedStrategy.java b/src/main/java/model/ExtinguishFire/MotorizedStrategyElement.java similarity index 94% rename from src/main/java/model/ExtinguishFire/MotorizedStrategy.java rename to src/main/java/model/ExtinguishFire/MotorizedStrategyElement.java index 67e0dbf..167662b 100644 --- a/src/main/java/model/ExtinguishFire/MotorizedStrategy.java +++ b/src/main/java/model/ExtinguishFire/MotorizedStrategyElement.java @@ -1,7 +1,7 @@ package model.ExtinguishFire; import model.ElementFactory; -import model.Strategy; +import model.StrategyElement; import util.Position; import java.util.ArrayList; @@ -10,11 +10,11 @@ import java.util.List; import static model.Board.BoardFireFighterBehavior.*; -public class MotorizedStrategy implements Strategy { +public class MotorizedStrategyElement implements StrategyElement { private final ElementFactory<MotorizedFireFighter> motorizedFactory; private List<Position> motorizedFighters; - public MotorizedStrategy(ElementFactory<MotorizedFireFighter> motorizedFactory) { + public MotorizedStrategyElement(ElementFactory<MotorizedFireFighter> motorizedFactory) { this.motorizedFactory = motorizedFactory; this.motorizedFighters = new ArrayList<>(); } diff --git a/src/main/java/model/Strategy.java b/src/main/java/model/StrategyElement.java similarity index 87% rename from src/main/java/model/Strategy.java rename to src/main/java/model/StrategyElement.java index 83bf4c6..c448635 100644 --- a/src/main/java/model/Strategy.java +++ b/src/main/java/model/StrategyElement.java @@ -5,7 +5,7 @@ import util.Position; import java.util.Collection; import java.util.List; -public interface Strategy { +public interface StrategyElement { public List<Position> updateElements(); public void initializeElement(int rowCount, int columnCount); diff --git a/src/main/java/model/flammable/FireStrategy.java b/src/main/java/model/flammable/FireStrategyElement.java similarity index 92% rename from src/main/java/model/flammable/FireStrategy.java rename to src/main/java/model/flammable/FireStrategyElement.java index 11518f3..277779e 100644 --- a/src/main/java/model/flammable/FireStrategy.java +++ b/src/main/java/model/flammable/FireStrategyElement.java @@ -1,19 +1,19 @@ package model.flammable; import model.ElementFactory; -import model.Strategy; +import model.StrategyElement; import util.Position; import java.util.*; import static model.Board.BoardFireFighterBehavior.*; -public class FireStrategy implements Strategy { +public class FireStrategyElement implements StrategyElement { private final ElementFactory<Fire> fireFactory; private Set<Position> firePositions; - public FireStrategy(ElementFactory<Fire> fireFactory) { + public FireStrategyElement(ElementFactory<Fire> fireFactory) { this.fireFactory = fireFactory; this.firePositions = new HashSet<>(); } -- GitLab