wM^$Aa#f`!#kGsXI7U zgKj#o-FhIvwtM&PWAG7|D)i>i$h**U9HZfOqd?R-^p&2$do=TIlM_eV-}SsZag>*{ zqoFqp@7U&WGc?;lzA}GVO~@>3RH-_*Hn(JK#GR6`nbmx5gq>_R=f}g&+EimlR|uN@SY~Wz4;iNtGc$6s8fzy&})s$!NR1(^P zuEM@i91}q_5Gh@7M+b96wsvVp7o4g@{zma8&J?3fhGaVN2`TRdGkQvvk;0i}zjq~I zItTISPF|_Q-8+%e*$Vr;yIQ)%k-`W1Q#?f^ypz#7>y O99u9&s?l44_W*g*M=m7l`kqy_S %;=-B|UmBZ9R i0@we)RjkRHI;yXJt&_9C1@5Bc29~P-8u%V<-VtuGoZtD~}y-ec_ zUVRl2Dn6!Tj)`m=-H3YK#wz)1Ke4Rau0t_77@5db)D&!BrlYBm%^Holc%3^f`*6{s z6!Gie#ZJesqUM-q DLNvWQ|Gl|x9XqULlSVti=4I-o#xz TR0vihOss8NZ zCgBq^KT` CB@SniH!hobKr)z>bd(cTBRWS4v=!T?$0%);>F+yCWTy zNiP~t6wup|rWrdQw1_yTcWL0h^Qxvsj} 2PyLKT z9ulV744kPgG;CJ~Q)6y?(2_gv9@c5~IZCdJxvXFqpY(sbF5L>jr5@ <&otdAFoxAmzmVXV|uzRwbkq^XP^&UH(#|omX2Np~N$$mD4IgONF3Q zWv0G7!K#tbdcr}cD(%bEq0kGfMoP{+n3McZyhxj+ZnH-Rv-(@;Yql~V%=Q_n*DB4} zi+*XaGT;BQ5|wYIpW6=F2Xc_1W)||2YFr?Ya(wVcb-AcgOi3hos2e$ =nyJ7Y2G{2 C#SaF$XjFT#SS?xvId$&J|;C5AdkG~{C zM281A{EW^b*c1j1#Ynydqjo2-)8VQ1_K%TwL8DI6j_>iOE~bM}UV$*Rz+?XcyuF3@ z_!rGkK)6c?glTvPS<27`_gO;__Gz_s(AVTeV@fnPV677nhwQGfu|nMo`A%y(Pi%gI zD5VrnSbi|rH_Z_yHfgW~GwMB9bfkc(f#0W>E%ZQiSBJK1YkKg;QiCRww(GNS;L=JT z-G1lH4J8$BaW_r_m$1dT9fk~Q<`~v?V(sr8e`zd0d+W2?>_iFlE}`sECfP}+YNo;F zMkBaPHrT8i|25$KOY6<#4zqNV2g=O1sk_bbe5-4Cx#vdY0c~%fEhm*?#KGXs$G?j6 ze--9HO=^AT*2*)+N3*%Q(jcuoR0je5L&_fc1Rc-IYDx{>NF9#dR%(J$&=O 2uqKoyPp7mVc@JHhpda)ODfW<_3{(8xqW4%t!#keho{^Fw8Ary&fO&Mk)g;t-Sgs zj?fE HyOi%>EYi us1qw6?2dg*N=MmAiO6 zYTHhDy9@gOEdXKt*tXS$znJH28y)%!d3RL$6Wp=#o5AY7d#WT7_K1r}B)NAq80AgN z-!kOM)N?ct8)YG;qr2(oI|A}4Y}se)*ryIgr<8= hZ$_*=!783-S5|D3 2jGqn}qsbGx!vFYLLcUF``Mu~$QN zV)OZvQD_@A^1$6BS4zN+KoUEv*tBx4?xcO^2GVa-GWkFL#X9tOq$Kwm^=AcoA_3P! z^9jHaCi6eA(RG_8iAg@EN{)oqi}9`8)t+M{`ilvz+&{mNJH;6t-R#4*$yjXa?Alz? z6>65PN+t=vXY8re|3|PXYmO1kFRrs&UYut9GpAE;N=28!-7Hpx_1*dNJM(^Amt|_J zCIV$n^IAuA+V=Ww-Dl(B{>lG0Q&gkvGTbOzw`Xuu2}VpCGT5S2=$K27)4ypkUp6G| z=kZ$4pA7iG;E1Vzu|CmWRj3fwd8Y-*=e3S?Z9Y6W+yO=?vGL!QFQyGiYA438Ef2rA zY`Bx_XJJfM08Y=W*~8Kh|F}d-aomjekk_%;gnG`>*u<0cwy1y)iE+^?^moO;#K)@8 zCwqWNh*zO6eg!5mu|D(r{-r7+HqTX$Pdf8 fH8`6I=z{p*Az zuBpnIDyiQNlW8MHXBB;5ZxFeg3GIJRgNh0+e2A(i;Dt>U)4jRdVKam4Q5MFFz9(wE zmxzcJQ #aCA6~cn|$Tt}{nfK21vM@P*R!wns>&M=JZ>oV?4!?0a1m z%X#E8-pL5*6{No)Bd Sh2k)9$C(}(X!l|?+$wfeFm)_ZJP8Ho*Q;&wDA9$_!K zTQOthWLqFIDoc5I?_RX&T*2wSI{N5%^nos;b=*}-Zu#LX(>cdCj+9Nu`pY_1scMlP z8`X`RN-_5iE{)b{9kNl%A1P_P>9K(`qF0MyhGN0zq#XDR+P$iy2i7;QyXYk}y&kF4 z`ZBDA!4BF&cx&qruswHM1*BePCJb4 *(3=y;^K3 z1Ufs=1+ReTf+HH`+s;%s-|rD86|sH wXUC zs#N88kB$6wDx$#9g|d0|drureGI$r5xd#Dg2dW{g?MKD@k>0yd>1e^aOHji1+~Km# zQM l|h~TEqDGTDbr(PNu8`k@xe1_1UYc%ZtaHwcmO%eRiI1varElv%6Guk z$Bc2c^5T|fA$a;N+A?TqTg*oom_Yn;>x$s8mR25Z-tVmgWm99TJsU#M3u6IOj^*FB zjDL;*VB;a*bALFXQG@ EBUMhNep4#04N&{RL@%aq6m`nrcgivE*suD zt@b*)DcuJ#kPEQW&Mo(^C^|zsHBA7XH-Qj8-hQhGp98^TqV-iAp=d~Civ`dW+}R;T zr9Es>aa1P|s+W@Ls12KI3V&%o(BVZx(0t$G0(ikZ@vm;x4|;uqln8A~0kmuJFcE9z zz^PS`HsinLGJC^oMYSetu}%xE%)hNPX9y;3j5H{;n$dkOg}mxJy%r8ezxUg&enycQ zyS{O)EOhm!k)8|)xh(zJ$!FCRjXY=FcRY vopir2UZwUeL8J z!fJ=lSAvk7e2vwG<4nD+NvyHl hN1X34Ghy`!?rcw2)vO>}o zHDmf`Uas72XYR^gp+xnV_04J+eVT1ZP2vdlJ-ClM^3)Fz2_@n?7OBI+;l`S$vQwCG9Oi>8-KI_D)|%p1R!o @WyFSLe1 zUb<3xnK-R5`HGXlluh)_n%RP!h9f>D=(8U=t{D!Z<
& zBs%HMT7hlV4`MW0KR$fMHgtf9KgxykL2+%L0L(awo5
@O1E5t&Yu>W@(f+Z5M%IVCOZSV&(cgdor1lsv;(#X)o7Oq^^LuTBDw4qfsQI zpdaTuVnlONhk?f2E9RTnIy-SbMg1p-@#jdT===SrPv@@FbO^;k3;!z9u!LCyvQ})= hpG%iR(Ek%-$1CPW_g!(VR$GUQdgqPM6=yHq`XBYu){+1K literal 0 HcmV?d00001 diff --git a/ProjectCruiser/ProjectCruiser/Properties/Resources/arrowUp.png b/ProjectCruiser/ProjectCruiser/Properties/Resources/arrowUp.png new file mode 100644 index 0000000000000000000000000000000000000000..e2a4a9310e52bb624e595d17778a04dfc91b5b4c GIT binary patch literal 5884 zcmeHLXH=6 D3z zNZyu`mXVc{SGc37q^zQ 6Z<7D zJ|QtFIVCkMJtH$KJ0~~q>$m)Z!tX`JC8cHM*ow-k>YCcR`i4ea(~sts*0%PJ&aUpB zpZMOs{(-@v;gQj?@rlW)>6zKN`Gv)$<(1X7^^MJ~U%$8i?CkFC9~>SXpPZf%{t`*) zzy7WP0Hdvzx|*@i zx6p0=fE&C?PMdY=!nwjvolAw8?JF2_zC?)*Z!8Yi_|G2Q3lr^aTU!j+^>3IvCaCQA zHgHAUSxY{aSF*UiYxDE!>#Lp-n@ZUX$OrlPpZJ2SJ?irFH-Gb8g1ad7;~vdwGrKS6 zYAe|_>1AJ1X*A718tf|VePADp+v15q!msZxCbpcJiqyT=U2Lt=IfQBB^aOVo_865y zqk6jdMa{~P1 *7~zW6(vL~!%)#1&LfD4SB&!aV=p)Mlb po^$VH+;%M zuXhCGQteH+XJ1kJWL`{FPI|l-%H}-gz*y+4^I{ j>Cfv)^7+02}X z!v5?h13}Z7cgw94p*@M8&7|!18gp9-dYz)wQh{)z<%ag`HD%hlff(OBp3@qAVwDu_ zY(6~5#mMz_Zd=eRt9425xnU{aa?xA0Iw>`YGM-zJSq01Wxz~0ObXv7qM?ITVVz$va zVODtKi1>v2iQAv$&6O-)3HU0Efu5T@ea|tLR*G4vd%6?}3T@Gw67Z;RI=Y5^3F`UV z;%WiUpf$D4Et?nVqYK%?P13IFREoN#owWyKJEj?I@@938DWLL;r?r|ZS&Ni!Cx?sN z#tynd1cRf>%-^5P;v7~OJSw}>scA8xYJASoTiwzO-Nn3)VP@vJ5QCS}_ESsUhP2^> zLS0jAaj|xo7_$e9mDN5tif&R^*EAywlVcMTQg!pC9IBY2ch<9OhT8V`D8qOFbJx`T z!FAeqnL}N((7a#$k>l>v8^Q3Z-)wACb)V7WUK9B|Wfd1`-|DR4*#wjB45`I?O=t6z zf8!N-t3jY;Q(&JQy7!o=$ds&5EIY)_uKbZ+NhPiMTeYo-5twdRu-Xqn>6U!x87z^x zXM~|AftfzuhAaP;vK2z{p&=)5OrP8KCVRKe;S=iI6#hPJm^&< V?@mta+ha089_AV{G2la%L@&c1z1n+y>{abw}8c~{| BN-bHUn zjxUf*geZrey`m|6nD_0fX7Gl1x*2DlKOmB;4@!EcmXQwP1&P|y(3qpFuHp5knV-|M z#msZ>rUkHFIy%h2FK?I^e$J?t4G_>NR$}8hI>;PYUa!&NZ7WLkN~BQ=m3qN+m_E|F z(Rh!y dZ9YdLt2@9bhsN;{F@7^+IFP+RDLTI}$g2 zTPaA`AUbYGAi?9ovy5r>DiT_KEqFi6=MW@gQ;Fhg{RU306YN~V;GnFj;qid+EJqv( zhg6#~G1w*g9H7aFrnXJA?(5*BM`F>ZJ;$s$(8T({Ov&2xegi0^ZC@jxUHsuC7`L6b zlsJL5k0IdfxM;`P8^bcEz*E1Cs+UKpTqC5uiF {+XtoK(91!m z%wLKkuZSox%Hr}`Pp4iO+L8UcKue|T{Q~fERlmK5le~mB5p|aQAbMpVrWdB+3rwqI z-WHkNMq(4F!O%|ZiL6Ra&+y4XlEFI2p4M-b@4rWTOmIECq?FsM(F+gb+J_@_gVEQP zUV?Z~EqG&>J}<8=DNyyz#@_3ep~X{l9`4}Oud#qAd&d6T_s1MZ3bX5u%#3f#l)ir0 z7~vw`w+*>jGlrf`TgTraEl*>8Qe^G$I Eo$^oIchLT#9#(CNy6bbjw z_EK3=5}5nWM4V55xN@FLe`(E6TU?Xlnfp$z=$*C|b6h>oUTEsyrCS7wzsX o4HQn&5nmor={WWDJYZdM;0>qlRuFtf}7|A+&e z)H!pd1K >uAzF}Zo?_hB;W06-KIK59gt+W>reZHNG4*Uq>-hn?nT5~wotQqX z5nOVn!?1MhR}8OpP|kqvX%qeugSMWEAlJ@>`;Q~^uUF9$F$b~n)ahFhv}IsrS|Uvb zHm&s$K*Tz`5!pEbu`MwPX6`2Y-7hkfO+A#Fg%|oG5EMh8gpjUsV4G@44N!YM(tg*b zM_1W@ mL$3&UU{mm O(*xnH9JgL2HL zybnA=&aDF{=0O0ZZ(SprI7TSP+g=la?MS1KoDucgT+Yh7WI;giUPmqI0BKuUY7OV7yuTCUtFU^I8TIaFwSqMiHsKv NA$>+bzN9|cg6= 0c>7VwS}m3K*hN@iBpkfuN $(9LzYS1&5n&jmF`s|kwOw`_Bj 2b?pdXVf5!|2y0bb8-G9vK31(zuYC z8y`0%^-NQcNM9xoG}gZxzoJV0D3Rv-i-&te^w=tJ&`3O5z_Afdtxtu1Y! w{#pq ;q;1MQ4 zCSywQtLV+OAorIBwrc^&pQDbL-jOtHR*os8g-;OL3DXgSD2#dy9=)`n2#;Kcaifw# zyv+%TaD?58cau3IKg0?f%K}u8%$=tq^f N l0HJ8_;Gt-&JEUF$Bw2Gthw`O@wZ>;+@+xWRn#QH+`Q2I@!jfqJP@ioQd zLJmc(YMAuAHrt%tG?Sw+wZM$M #CL+dF0s-Vx*D? z-nD?NPRuDoBhKOu4@Qc{0pag3i3+x+@U(oaM>c A-zV!%3K;o7m_aEHILoe0_d0Fx@>L`g(>w$7Mq_b|OD zNr&S?BoqyvxFiRE>juw!`eQFJ!XeoeX=n@~-KYEN936rH_?%-WLn2-x+3m)IyBq0L zG#Cw20DL6B&Dh7f0mr;!w1xbgTw&!=b_=Gb)UyK=yP+p#KTYIy{TFabplxpmEk*+Y za8;ff5^P68c97R1%=zSiYtE4Du#OgvD{tClT@HpZ>Xc2qqL>as{R&x|hRcrI-pvKb z&ex0c8+TC?z;3LgQj!v(td6@0z2lOF!{SbUnq1T4+Wy4@+qq&fGiWdf_g|xiyToYQ z0E!e)A1`=cV _m%ind#4lH;ew5Ud7CAG{mghnRxr7C zgqTsFk$Wt+s ~MYqf&5E2g=(kb3& zAFz+%&H2dnb$Pa8D4Le|Ff@8UFdtL+m=yQ}^j@vtgMbQg#f{re>)bp8JQFxuHUZc} zA(VjM+n0=NzeoAKhc5*IRN{i)E*IX4VYp=$-D>cMkzDfwAxf@kQ-)E{`OyvkVZRFy zMk}Z0G+bHiTit?Ks%wW3HOyOIxgQZo3+@b~$Z?!I#|>B{`DMnlgB*MtAi{Wx>W!d= z^0j4?EBk91NvI9+S6uVX >#+2@u(nLKSp{r#fo0ni#-Te7| z@gB1KQuHzhQKeA+bpe|MBzrqa18sn3&a&e2 =G622Ar?_PZgA0A=9kjRimss#$LRgJh_r)Lu|UHV@+-eDN+{neWq1$$#&z zi &(QR}|GdePlyLH`BQpE#KS literal 0 HcmV?d00001 -- 2.25.1 From 32dc88b8a9431635a07da847c03bc77d6d096bc8 Mon Sep 17 00:00:00 2001 From: Almaz <79022113685@mail.ru> Date: Tue, 9 Apr 2024 10:09:18 +0400 Subject: [PATCH 2/6] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=20=E2=84=961?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectCruiser/DrawingCruiser.cs | 83 ++++--------------- .../ProjectCruiser/FormCruiser.Designer.cs | 28 ++++--- ProjectCruiser/ProjectCruiser/FormCruiser.cs | 49 +++++++++-- 3 files changed, 74 insertions(+), 86 deletions(-) diff --git a/ProjectCruiser/ProjectCruiser/DrawingCruiser.cs b/ProjectCruiser/ProjectCruiser/DrawingCruiser.cs index 93473bd..a1fb426 100644 --- a/ProjectCruiser/ProjectCruiser/DrawingCruiser.cs +++ b/ProjectCruiser/ProjectCruiser/DrawingCruiser.cs @@ -78,7 +78,7 @@ public class DrawingCruiser public bool MoveTransport(DirectionType direction) { - if (EntityCruiser == null || _startPosX.HasValue || _startPosY.HasValue) + if (EntityCruiser == null || !_startPosX.HasValue || !_startPosY.HasValue) { return false; } @@ -99,8 +99,16 @@ public class DrawingCruiser } return true; case DirectionType.Right: + if (_startPosX.Value - EntityCruiser.Step > 0) + { + _startPosX += (int)EntityCruiser.Step; + } return true; case DirectionType.Down: + if (_startPosY.Value - EntityCruiser.Step > 0) + { + _startPosY += (int)EntityCruiser.Step; + } return true; default: return false; @@ -109,7 +117,7 @@ public class DrawingCruiser public void DrawTransport(Graphics g) { - if (EntityCruiser == null || !_startPosX.HasValue || _startPosY.HasValue) + if (EntityCruiser == null || !_startPosX.HasValue || !_startPosY.HasValue) { return; } @@ -118,41 +126,7 @@ public class DrawingCruiser Brush additionalBrush = new SolidBrush(EntityCruiser.AdditionalColor); - if (EntityCruiser.BodyKit) - { - g.DrawEllipse(pen, _startPosX.Value + 90, _startPosY.Value, 20, 20); - g.DrawEllipse(pen, _startPosX.Value + 90, _startPosY.Value + 40, 20, 20); - g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value + 10, 20, 40); - g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value, 15, 15); - g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value + 45, 15, 15); - - g.FillEllipse(additionalBrush, _startPosX.Value + 90, _startPosY.Value, 20, 20); - g.FillEllipse(additionalBrush, _startPosX.Value + 90, _startPosY.Value + 40, 20, 20); - g.FillRectangle(additionalBrush, _startPosX.Value + 90, _startPosY.Value + 10, 20, 40); - g.FillRectangle(additionalBrush, _startPosX.Value + 90, _startPosY.Value + 1, 15, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 90, _startPosY.Value + 45, 15, 15); - - - g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value, 20, 20); - g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value + 40, 20, 20); - g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 10, 20, 40); - g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value, 14, 15); - g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 45, 14, 15); - - g.FillEllipse(additionalBrush, _startPosX.Value, _startPosY.Value, 20, 20); - g.FillEllipse(additionalBrush, _startPosX.Value, _startPosY.Value + 40, 20, 20); - g.FillRectangle(additionalBrush, _startPosX.Value + 1, _startPosY.Value + 10, 25, 40); - g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value + 1, 15, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value + 45, 15, 15); - - g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value, 39, 15); - g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 45, 39, 15); - - g.FillRectangle(additionalBrush, _startPosX.Value + 35, _startPosY.Value + 1, 40, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 35, _startPosY.Value + 45, 40, 15); - - } - + //Границы крейсера g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 5, 20, 20); g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 35, 20, 20); g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 5, 20, 20); @@ -161,36 +135,14 @@ public class DrawingCruiser g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value + 15, 10, 30); g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value + 4, 70, 52); - // задние фары - Brush brRed = new SolidBrush(Color.Red); - g.FillEllipse(brRed, _startPosX.Value + 10, _startPosY.Value + 5, 20, 20); - g.FillEllipse(brRed, _startPosX.Value + 10, _startPosY.Value + 35, 20, 20); - - //передние фары - Brush brYellow = new SolidBrush(Color.Yellow); - g.FillEllipse(brYellow, _startPosX.Value + 80, _startPosY.Value + 5, 20, 20); - g.FillEllipse(brYellow, _startPosX.Value + 80, _startPosY.Value + 35, 20, 20); - - //кузов + //кузов крейсера Brush br = new SolidBrush(EntityCruiser.BodyColor); g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value + 15, 10, 30); g.FillRectangle(br, _startPosX.Value + 90, _startPosY.Value + 15, 10, 30); g.FillRectangle(br, _startPosX.Value + 20, _startPosY.Value + 5, 70, 50); - //стекла - Brush brBlue = new SolidBrush(Color.LightBlue); - g.FillRectangle(brBlue, _startPosX.Value + 70, _startPosY.Value + 10, 5, 40); - g.FillRectangle(brBlue, _startPosX.Value + 30, _startPosY.Value + 10, 5, 40); - g.FillRectangle(brBlue, _startPosX.Value + 35, _startPosY.Value + 8, 35, 2); - g.FillRectangle(brBlue, _startPosX.Value + 35, _startPosY.Value + 51, 35, 2); - - //выделяем рамкой крышу - g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 10, 35, 40); - g.DrawRectangle(pen, _startPosX.Value + 75, _startPosY.Value + 15, 25, 30); - g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 15, 15, 30); - - // спортивная линия - if (EntityCruiser.Armor) + // оружие крейсера + if (EntityCruiser.Weapon) { g.FillRectangle(additionalBrush, _startPosX.Value + 75, _startPosY.Value + 23, 25, 15); g.FillRectangle(additionalBrush, _startPosX.Value + 35, _startPosY.Value + 23, 35, 15); @@ -198,12 +150,5 @@ public class DrawingCruiser } - // крыло - if (EntityCruiser.Weapon) - { - g.FillRectangle(additionalBrush, _startPosX.Value, _startPosY.Value + 5, 10, 50); - g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 5, 10, 50); - } - } } diff --git a/ProjectCruiser/ProjectCruiser/FormCruiser.Designer.cs b/ProjectCruiser/ProjectCruiser/FormCruiser.Designer.cs index ebe2aab..69e341a 100644 --- a/ProjectCruiser/ProjectCruiser/FormCruiser.Designer.cs +++ b/ProjectCruiser/ProjectCruiser/FormCruiser.Designer.cs @@ -29,7 +29,7 @@ private void InitializeComponent() { pictureBoxCruiser = new PictureBox(); - buttonCreate = new Button(); + buttonCreateCruiser = new Button(); buttonDown = new Button(); buttonUp = new Button(); buttonRight = new Button(); @@ -46,16 +46,16 @@ pictureBoxCruiser.TabIndex = 0; pictureBoxCruiser.TabStop = false; // - // buttonCreate + // buttonCreateCruiser // - buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - buttonCreate.Location = new Point(12, 409); - buttonCreate.Name = "buttonCreate"; - buttonCreate.Size = new Size(94, 29); - buttonCreate.TabIndex = 1; - buttonCreate.Text = "Создать"; - buttonCreate.UseVisualStyleBackColor = true; - buttonCreate.Click += ButtonCreate_Click; + buttonCreateCruiser.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreateCruiser.Location = new Point(12, 409); + buttonCreateCruiser.Name = "buttonCreateCruiser"; + buttonCreateCruiser.Size = new Size(94, 29); + buttonCreateCruiser.TabIndex = 1; + buttonCreateCruiser.Text = "Создать"; + buttonCreateCruiser.UseVisualStyleBackColor = true; + buttonCreateCruiser.Click += ButtonCreateCruiser_Click; // // buttonDown // @@ -67,6 +67,7 @@ buttonDown.Size = new Size(35, 35); buttonDown.TabIndex = 2; buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += ButtonMove_Click; // // buttonUp // @@ -78,6 +79,7 @@ buttonUp.Size = new Size(35, 35); buttonUp.TabIndex = 3; buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += ButtonMove_Click; // // buttonRight // @@ -89,6 +91,7 @@ buttonRight.Size = new Size(35, 35); buttonRight.TabIndex = 4; buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += ButtonMove_Click; // // buttonLeft // @@ -100,6 +103,7 @@ buttonLeft.Size = new Size(35, 35); buttonLeft.TabIndex = 5; buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += ButtonMove_Click; // // FormCruiser // @@ -110,7 +114,7 @@ Controls.Add(buttonRight); Controls.Add(buttonUp); Controls.Add(buttonDown); - Controls.Add(buttonCreate); + Controls.Add(buttonCreateCruiser); Controls.Add(pictureBoxCruiser); Name = "FormCruiser"; Text = "Крейсер"; @@ -121,7 +125,7 @@ #endregion private PictureBox pictureBoxCruiser; - private Button buttonCreate; + private Button buttonCreateCruiser; private Button buttonDown; private Button buttonUp; private Button buttonRight; diff --git a/ProjectCruiser/ProjectCruiser/FormCruiser.cs b/ProjectCruiser/ProjectCruiser/FormCruiser.cs index 9a2a972..b12c168 100644 --- a/ProjectCruiser/ProjectCruiser/FormCruiser.cs +++ b/ProjectCruiser/ProjectCruiser/FormCruiser.cs @@ -9,7 +9,20 @@ InitializeComponent(); } - private void ButtonCreate_Click(object sender, EventArgs e) + private void Draw() + { + if (_drawingCruiser == null) + { + return; + } + + Bitmap bmp = new(pictureBoxCruiser.Width, pictureBoxCruiser.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawingCruiser.DrawTransport(gr); + pictureBoxCruiser.Image = bmp; + } + + private void ButtonCreateCruiser_Click(object sender, EventArgs e) { Random random = new(); _drawingCruiser = new DrawingCruiser(); @@ -25,10 +38,36 @@ _drawingCruiser.SetPictireSize(pictureBoxCruiser.Width, pictureBoxCruiser.Height); _drawingCruiser.SetPosition(random.Next(10, 100), random.Next(10, 100)); - Bitmap bmp = new(pictureBoxCruiser.Width, pictureBoxCruiser.Height); - Graphics gr = Graphics.FromImage(bmp); - _drawingCruiser.DrawTransport(gr); - pictureBoxCruiser.Image = bmp; + Draw(); + } + + private void ButtonMove_Click(object sender, EventArgs e) + { + if(_drawingCruiser == null) + { + return; + } + + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + switch(name) { + case "buttonUp": + result = _drawingCruiser.MoveTransport(DirectionType.Up); + break; + case "buttonDown": + result = _drawingCruiser.MoveTransport(DirectionType.Down); + break; + case "buttonLeft": + result = _drawingCruiser.MoveTransport(DirectionType.Left); + break; + case "buttonRight": + result = _drawingCruiser.MoveTransport(DirectionType.Right); + break; + } + + if (result) { + Draw(); + } } } } -- 2.25.1 From 45691d205ff21731c496514d66b31bd6d1be3ffb Mon Sep 17 00:00:00 2001 From: Almaz <79022113685@mail.ru> Date: Tue, 9 Apr 2024 11:53:13 +0400 Subject: [PATCH 3/6] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=80=D0=BE=D0=B4=D0=B8=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D0=B5=D0=B9=20=D0=B8=20=D0=B2=D0=B2=D0=BE=D0=B4=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{ => Drawings}/DirectionType.cs | 10 +-- .../DrawningCruiser.cs} | 83 ++++++++++--------- .../Drawings/DrawningMilitaryCruiser.cs | 68 +++++++++++++++ .../ProjectCruiser/Entities/EntityCruiser.cs | 46 ++++++++++ .../EntityMilitaryCruiser.cs} | 30 ++----- .../ProjectCruiser/FormCruiser.Designer.cs | 38 ++++++--- ProjectCruiser/ProjectCruiser/FormCruiser.cs | 53 +++++++++--- 7 files changed, 236 insertions(+), 92 deletions(-) rename ProjectCruiser/ProjectCruiser/{ => Drawings}/DirectionType.cs (85%) rename ProjectCruiser/ProjectCruiser/{DrawingCruiser.cs => Drawings/DrawningCruiser.cs} (58%) create mode 100644 ProjectCruiser/ProjectCruiser/Drawings/DrawningMilitaryCruiser.cs create mode 100644 ProjectCruiser/ProjectCruiser/Entities/EntityCruiser.cs rename ProjectCruiser/ProjectCruiser/{EntityCruiser.cs => Entities/EntityMilitaryCruiser.cs} (66%) diff --git a/ProjectCruiser/ProjectCruiser/DirectionType.cs b/ProjectCruiser/ProjectCruiser/Drawings/DirectionType.cs similarity index 85% rename from ProjectCruiser/ProjectCruiser/DirectionType.cs rename to ProjectCruiser/ProjectCruiser/Drawings/DirectionType.cs index 4cdd1e9..3ea0799 100644 --- a/ProjectCruiser/ProjectCruiser/DirectionType.cs +++ b/ProjectCruiser/ProjectCruiser/Drawings/DirectionType.cs @@ -4,17 +4,17 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace ProjectCruiser; +namespace ProjectCruiser.Drawings; /// /// Направление перемещения /// - public enum DirectionType - { +public enum DirectionType +{ ////// Вверх /// - Up = 1, + Up = 1, ////// Вниз /// @@ -27,5 +27,5 @@ namespace ProjectCruiser; /// Вправо /// Right = 4 - } +} diff --git a/ProjectCruiser/ProjectCruiser/DrawingCruiser.cs b/ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs similarity index 58% rename from ProjectCruiser/ProjectCruiser/DrawingCruiser.cs rename to ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs index a1fb426..b953713 100644 --- a/ProjectCruiser/ProjectCruiser/DrawingCruiser.cs +++ b/ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs @@ -3,15 +3,16 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using ProjectCruiser.Entities; -namespace ProjectCruiser; +namespace ProjectCruiser.Drawings; -public class DrawingCruiser +public class DrawningCruiser { ////// Класс-сущность /// - public EntityCruiser? EntityCruiser { get; private set; } + public EntityCruiser? EntityCruiser { get; protected set; } ////// Ширина окна /// @@ -23,41 +24,53 @@ public class DrawingCruiser ////// Левая координата прорисовки крейсера /// - private int? _startPosX; + protected int? _startPosX; ////// Верхняя координата прорисовки крейсера /// - private int? _startPosY; + protected int? _startPosY; ////// Ширина прорисовки крейсера /// - private readonly int _drawningCruiserWidth = 110; + private readonly int _drawningCruiserWidth = 90; ////// Высота прорисовки крейсера /// - private readonly int _drawingCruiserHeight = 60; + private readonly int _drawingCruiserHeight = 50; ///- /// Инициализация полей объекта класса крейсера + /// Пустой конструктор /// - /// Скорость - /// Вес крейсера - /// Скорость - /// Дополнительный цвет - /// Признак наличия обвеса - /// Признак наличия брони - /// Признак наличия оружия - public void Init(int speed, double weigth, Color bodyColor, Color additionalColor, bool bodyKit, bool armor, bool weapon) - { - EntityCruiser = new EntityCruiser(); - EntityCruiser.Init(speed, weigth, bodyColor, additionalColor, bodyKit, armor, weapon); + private DrawningCruiser() { _pictureWidth = null; _pictureHeight = null; _startPosX = null; _startPosY = null; } + ///+ /// Констуктор + /// + /// Скорость + /// Вес крейсера + /// Скорость + public DrawningCruiser(int speed, double weigth, Color bodyColor): this() + { + EntityCruiser = new EntityCruiser(speed, weigth, bodyColor); + } + + ///+ /// Констуктор для наследников + /// + /// Ширина прорисовки крейсера + /// Высота прорисовки крейсера + protected DrawningCruiser(int drawningCruiserWidth, int drawingCruiserHeight) : this() + { + _drawningCruiserWidth = drawningCruiserWidth; + _drawingCruiserHeight = drawingCruiserHeight; + } + public bool SetPictireSize(int width, int height) { _pictureWidth = width; @@ -115,7 +128,7 @@ public class DrawingCruiser } } - public void DrawTransport(Graphics g) + public virtual void DrawTransport(Graphics g) { if (EntityCruiser == null || !_startPosX.HasValue || !_startPosY.HasValue) { @@ -124,31 +137,21 @@ public class DrawingCruiser Pen pen = new(Color.Black); - Brush additionalBrush = new SolidBrush(EntityCruiser.AdditionalColor); //Границы крейсера - g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 5, 20, 20); - g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 35, 20, 20); - g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 5, 20, 20); - g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 35, 20, 20); - g.DrawRectangle(pen, _startPosX.Value + 9, _startPosY.Value + 15, 10, 30); - g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value + 15, 10, 30); - g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value + 4, 70, 52); + g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value, 20, 20); + g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value + 30, 20, 20); + g.DrawEllipse(pen, _startPosX.Value + 70, _startPosY.Value, 20, 20); + g.DrawEllipse(pen, _startPosX.Value + 70, _startPosY.Value + 30, 20, 20); + g.DrawRectangle(pen, _startPosX.Value + 1, _startPosY.Value + 10, 10, 30); + g.DrawRectangle(pen, _startPosX.Value + 80, _startPosY.Value + 10, 10, 30); + g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 1, 70, 52); //кузов крейсера Brush br = new SolidBrush(EntityCruiser.BodyColor); - g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value + 15, 10, 30); - g.FillRectangle(br, _startPosX.Value + 90, _startPosY.Value + 15, 10, 30); - g.FillRectangle(br, _startPosX.Value + 20, _startPosY.Value + 5, 70, 50); - - // оружие крейсера - if (EntityCruiser.Weapon) - { - g.FillRectangle(additionalBrush, _startPosX.Value + 75, _startPosY.Value + 23, 25, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 35, _startPosY.Value + 23, 35, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 10, _startPosY.Value + 23, 20, 15); - - } + g.FillRectangle(br, _startPosX.Value, _startPosY.Value + 10, 10, 30); + g.FillRectangle(br, _startPosX.Value + 80, _startPosY.Value + 10, 10, 30); + g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value, 70, 50); } } diff --git a/ProjectCruiser/ProjectCruiser/Drawings/DrawningMilitaryCruiser.cs b/ProjectCruiser/ProjectCruiser/Drawings/DrawningMilitaryCruiser.cs new file mode 100644 index 0000000..b86968c --- /dev/null +++ b/ProjectCruiser/ProjectCruiser/Drawings/DrawningMilitaryCruiser.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ProjectCruiser.Entities; + +namespace ProjectCruiser.Drawings; + +public class DrawningMilitaryCruiser: DrawningCruiser +{ + ///+ /// Конструктор + /// + /// Скорость + /// Вес крейсера + /// Скорость + /// Дополнительный цвет + /// Признак наличия обвеса + /// Признак наличия брони + /// Признак наличия оружия + public DrawningMilitaryCruiser(int speed, double weigth, Color bodyColor, Color additionalColor, bool bodyKit, bool armor, bool weapon): base(110, 60) + { + EntityCruiser = new EntityMilitaryCruiser(speed, weigth, bodyColor, additionalColor, bodyKit, armor, weapon); + } + + public override void DrawTransport(Graphics g) + { + + if (EntityCruiser == null || EntityCruiser is not EntityMilitaryCruiser militaryCruiser || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + + Pen pen = new(Color.Black); + Brush additionalBrush = new SolidBrush(militaryCruiser.AdditionalColor); + + //Границы крейсера + g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 5, 20, 20); + g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 35, 20, 20); + g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 5, 20, 20); + g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 35, 20, 20); + g.DrawRectangle(pen, _startPosX.Value + 9, _startPosY.Value + 15, 10, 30); + g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value + 15, 10, 30); + g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value + 4, 70, 52); + + //кузов крейсера + Brush br = new SolidBrush(militaryCruiser.BodyColor); + g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value + 15, 10, 30); + g.FillRectangle(br, _startPosX.Value + 90, _startPosY.Value + 15, 10, 30); + g.FillRectangle(br, _startPosX.Value + 20, _startPosY.Value + 5, 70, 50); + + _startPosX += 10; + _startPosY += 5; + base.DrawTransport(g); + _startPosX -= 10; + _startPosY -= 5; + + // оружие крейсера + if (militaryCruiser.Weapon) + { + g.FillRectangle(additionalBrush, _startPosX.Value + 75, _startPosY.Value + 23, 25, 15); + g.FillRectangle(additionalBrush, _startPosX.Value + 35, _startPosY.Value + 23, 35, 15); + g.FillRectangle(additionalBrush, _startPosX.Value + 10, _startPosY.Value + 23, 20, 15); + + } + } +} diff --git a/ProjectCruiser/ProjectCruiser/Entities/EntityCruiser.cs b/ProjectCruiser/ProjectCruiser/Entities/EntityCruiser.cs new file mode 100644 index 0000000..0f9bcb5 --- /dev/null +++ b/ProjectCruiser/ProjectCruiser/Entities/EntityCruiser.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectCruiser.Entities; + +///+/// Класс-сущность "Крейсер" Вариант 18 +/// +public class EntityCruiser +{ + ///+ /// Скорость + /// + public int Speed { get; protected set; } + + ///+ /// Вес + /// + public double Weigth { get; protected set; } + + ///+ /// Основной цвет + /// + public Color BodyColor { get; protected set; } + + ///+ /// Шаг перемещения крейсера + /// + public double Step => Speed * 100 / Weigth; + + ///+ /// Конструктор сущности + /// + /// Скорость + /// Вес крейсера + /// Скорость + public EntityCruiser(int speed, double weigth, Color bodyColor) + { + Speed = speed; + Weigth = weigth; + BodyColor = bodyColor; + } +} diff --git a/ProjectCruiser/ProjectCruiser/EntityCruiser.cs b/ProjectCruiser/ProjectCruiser/Entities/EntityMilitaryCruiser.cs similarity index 66% rename from ProjectCruiser/ProjectCruiser/EntityCruiser.cs rename to ProjectCruiser/ProjectCruiser/Entities/EntityMilitaryCruiser.cs index 8fdcd5d..eb780c0 100644 --- a/ProjectCruiser/ProjectCruiser/EntityCruiser.cs +++ b/ProjectCruiser/ProjectCruiser/Entities/EntityMilitaryCruiser.cs @@ -1,25 +1,10 @@ -namespace ProjectCruiser +namespace ProjectCruiser.Entities { ///- /// Класс-сущность "Крейсер" Вариант 18 + /// Класс-сущность "Военный Крейсер" Вариант 18 /// - public class EntityCruiser - { - ///- /// Скорость - /// - public int Speed { get; private set; } - - ///- /// Вес - /// - public double Weigth { get; private set; } - - ///- /// Основной цвет - /// - public Color BodyColor { get; private set; } - + public class EntityMilitaryCruiser: EntityCruiser + { ////// Дополнительный цвет (для опциональных элементов) /// @@ -40,11 +25,6 @@ /// public bool Weapon { get; private set; } - ///- /// Шаг перемещения крейсера - /// - public double Step => Speed * 100 / Weigth; - ////// Инициализация полей объекта класса крейсера /// @@ -55,7 +35,7 @@ /// Признак наличия обвеса /// Признак наличия брони /// Признак наличия оружия - public void Init(int speed, double weigth, Color bodyColor, Color additionalColor, bool bodyKit, bool armor, bool weapon) + public EntityMilitaryCruiser(int speed, double weigth, Color bodyColor, Color additionalColor, bool bodyKit, bool armor, bool weapon): base(speed, weigth, bodyColor) { Speed = speed; Weigth = weigth; diff --git a/ProjectCruiser/ProjectCruiser/FormCruiser.Designer.cs b/ProjectCruiser/ProjectCruiser/FormCruiser.Designer.cs index 69e341a..ec630ad 100644 --- a/ProjectCruiser/ProjectCruiser/FormCruiser.Designer.cs +++ b/ProjectCruiser/ProjectCruiser/FormCruiser.Designer.cs @@ -29,11 +29,12 @@ private void InitializeComponent() { pictureBoxCruiser = new PictureBox(); - buttonCreateCruiser = new Button(); + buttonCreateMilitaryCruiser = new Button(); buttonDown = new Button(); buttonUp = new Button(); buttonRight = new Button(); buttonLeft = new Button(); + buttonCreateCruiser = new Button(); ((System.ComponentModel.ISupportInitialize)pictureBoxCruiser).BeginInit(); SuspendLayout(); // @@ -46,16 +47,16 @@ pictureBoxCruiser.TabIndex = 0; pictureBoxCruiser.TabStop = false; // - // buttonCreateCruiser + // buttonCreateMilitaryCruiser // - buttonCreateCruiser.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - buttonCreateCruiser.Location = new Point(12, 409); - buttonCreateCruiser.Name = "buttonCreateCruiser"; - buttonCreateCruiser.Size = new Size(94, 29); - buttonCreateCruiser.TabIndex = 1; - buttonCreateCruiser.Text = "Создать"; - buttonCreateCruiser.UseVisualStyleBackColor = true; - buttonCreateCruiser.Click += ButtonCreateCruiser_Click; + buttonCreateMilitaryCruiser.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreateMilitaryCruiser.Location = new Point(12, 409); + buttonCreateMilitaryCruiser.Name = "buttonCreateMilitaryCruiser"; + buttonCreateMilitaryCruiser.Size = new Size(216, 29); + buttonCreateMilitaryCruiser.TabIndex = 1; + buttonCreateMilitaryCruiser.Text = "Создать военный крейсер"; + buttonCreateMilitaryCruiser.UseVisualStyleBackColor = true; + buttonCreateMilitaryCruiser.Click += ButtonCreateMilitaryCruiser_Click; // // buttonDown // @@ -105,16 +106,28 @@ buttonLeft.UseVisualStyleBackColor = true; buttonLeft.Click += ButtonMove_Click; // + // buttonCreateCruiser + // + buttonCreateCruiser.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreateCruiser.Location = new Point(234, 409); + buttonCreateCruiser.Name = "buttonCreateCruiser"; + buttonCreateCruiser.Size = new Size(179, 29); + buttonCreateCruiser.TabIndex = 6; + buttonCreateCruiser.Text = "Создать крейсер"; + buttonCreateCruiser.UseVisualStyleBackColor = true; + buttonCreateCruiser.Click += buttonCreateCruiser_Click; + // // FormCruiser // AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(800, 450); + Controls.Add(buttonCreateCruiser); Controls.Add(buttonLeft); Controls.Add(buttonRight); Controls.Add(buttonUp); Controls.Add(buttonDown); - Controls.Add(buttonCreateCruiser); + Controls.Add(buttonCreateMilitaryCruiser); Controls.Add(pictureBoxCruiser); Name = "FormCruiser"; Text = "Крейсер"; @@ -125,10 +138,11 @@ #endregion private PictureBox pictureBoxCruiser; - private Button buttonCreateCruiser; + private Button buttonCreateMilitaryCruiser; private Button buttonDown; private Button buttonUp; private Button buttonRight; private Button buttonLeft; + private Button buttonCreateCruiser; } } \ No newline at end of file diff --git a/ProjectCruiser/ProjectCruiser/FormCruiser.cs b/ProjectCruiser/ProjectCruiser/FormCruiser.cs index b12c168..af4d3d6 100644 --- a/ProjectCruiser/ProjectCruiser/FormCruiser.cs +++ b/ProjectCruiser/ProjectCruiser/FormCruiser.cs @@ -1,9 +1,11 @@ -namespace ProjectCruiser +using ProjectCruiser.Drawings; + +namespace ProjectCruiser { public partial class FormCruiser : Form { - private DrawingCruiser? _drawingCruiser; + private DrawningCruiser? _drawingCruiser; public FormCruiser() { InitializeComponent(); @@ -22,12 +24,20 @@ pictureBoxCruiser.Image = bmp; } - private void ButtonCreateCruiser_Click(object sender, EventArgs e) + private void CreateObject(string type) { Random random = new(); - _drawingCruiser = new DrawingCruiser(); - _drawingCruiser.Init( - random.Next(100, 300), + switch (type) + { + case nameof(DrawningCruiser): + + _drawingCruiser = new DrawningCruiser(random.Next(100, 300), random.Next(1000, 3000), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256))); + break; + + case nameof(DrawningMilitaryCruiser): + + _drawingCruiser = new DrawningMilitaryCruiser(random.Next(100, 300), random.Next(1000, 3000), Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), @@ -35,24 +45,45 @@ Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); + break; + + default: + return; + } + _drawingCruiser.SetPictireSize(pictureBoxCruiser.Width, pictureBoxCruiser.Height); _drawingCruiser.SetPosition(random.Next(10, 100), random.Next(10, 100)); Draw(); } + ///+ /// Обработка нажатия кнопки "Создать военный крейсер" + /// + /// + /// + private void ButtonCreateMilitaryCruiser_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningMilitaryCruiser)); + + ///+ /// Обработка нажатия кнопки "Создать крейсер" + /// + /// + /// + private void buttonCreateCruiser_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningCruiser)); + private void ButtonMove_Click(object sender, EventArgs e) { - if(_drawingCruiser == null) + if (_drawingCruiser == null) { return; } string name = ((Button)sender)?.Name ?? string.Empty; bool result = false; - switch(name) { + switch (name) + { case "buttonUp": - result = _drawingCruiser.MoveTransport(DirectionType.Up); + result = _drawingCruiser.MoveTransport(DirectionType.Up); break; case "buttonDown": result = _drawingCruiser.MoveTransport(DirectionType.Down); @@ -65,9 +96,11 @@ break; } - if (result) { + if (result) + { Draw(); } } + } } -- 2.25.1 From 1bde4734fcd08a7bc4a2a2846d70b6226c9a182b Mon Sep 17 00:00:00 2001 From: Almaz <79022113685@mail.ru> Date: Tue, 9 Apr 2024 15:02:30 +0400 Subject: [PATCH 4/6] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=81=D1=82=D1=80=D0=B0=D1=82=D0=B5=D0=B3?= =?UTF-8?q?=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectCruiser/Drawings/DirectionType.cs | 8 + .../Drawings/DrawningCruiser.cs | 21 +++ .../ProjectCruiser/FormCruiser.Designer.cs | 28 ++++ ProjectCruiser/ProjectCruiser/FormCruiser.cs | 60 +++++++- .../MovementStrategy/AbstactStrategy.cs | 138 ++++++++++++++++++ .../MovementStrategy/IMoveableObject.cs | 30 ++++ .../MovementStrategy/MoveToBorder.cs | 50 +++++++ .../MovementStrategy/MoveToCenter.cs | 54 +++++++ .../MovementStrategy/MoveableCruiser.cs | 68 +++++++++ .../MovementStrategy/MovementDirection.cs | 24 +++ .../MovementStrategy/ObjectParameters.cs | 77 ++++++++++ .../MovementStrategy/StrategyStatus.cs | 26 ++++ 12 files changed, 576 insertions(+), 8 deletions(-) create mode 100644 ProjectCruiser/ProjectCruiser/MovementStrategy/AbstactStrategy.cs create mode 100644 ProjectCruiser/ProjectCruiser/MovementStrategy/IMoveableObject.cs create mode 100644 ProjectCruiser/ProjectCruiser/MovementStrategy/MoveToBorder.cs create mode 100644 ProjectCruiser/ProjectCruiser/MovementStrategy/MoveToCenter.cs create mode 100644 ProjectCruiser/ProjectCruiser/MovementStrategy/MoveableCruiser.cs create mode 100644 ProjectCruiser/ProjectCruiser/MovementStrategy/MovementDirection.cs create mode 100644 ProjectCruiser/ProjectCruiser/MovementStrategy/ObjectParameters.cs create mode 100644 ProjectCruiser/ProjectCruiser/MovementStrategy/StrategyStatus.cs diff --git a/ProjectCruiser/ProjectCruiser/Drawings/DirectionType.cs b/ProjectCruiser/ProjectCruiser/Drawings/DirectionType.cs index 3ea0799..4f4876b 100644 --- a/ProjectCruiser/ProjectCruiser/Drawings/DirectionType.cs +++ b/ProjectCruiser/ProjectCruiser/Drawings/DirectionType.cs @@ -11,18 +11,26 @@ namespace ProjectCruiser.Drawings; /// public enum DirectionType { + ///+ /// Неизвестное направление + /// + Unknow = -1, + ////// Вверх /// Up = 1, + ////// Вниз /// Down = 2, + ////// Влева /// Left = 3, + ////// Вправо /// diff --git a/ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs b/ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs index b953713..ea8c06f 100644 --- a/ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs +++ b/ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs @@ -24,6 +24,7 @@ public class DrawningCruiser ////// Левая координата прорисовки крейсера /// + protected int? _startPosX; ////// Верхняя координата прорисовки крейсера @@ -39,6 +40,26 @@ public class DrawningCruiser /// private readonly int _drawingCruiserHeight = 50; + ///+ /// Координата X объекта + /// + public int? GetPosX => _startPosX; + + ///+ /// Координата Y объекта + /// + public int? GetPosY => _startPosY; + + ///+ /// Ширина объекта + /// + public int GetWidth => _drawningCruiserWidth; + + ///+ /// Высота объекта + /// + public int GetHeight => _drawingCruiserHeight; + ////// Пустой конструктор /// diff --git a/ProjectCruiser/ProjectCruiser/FormCruiser.Designer.cs b/ProjectCruiser/ProjectCruiser/FormCruiser.Designer.cs index ec630ad..9b8c644 100644 --- a/ProjectCruiser/ProjectCruiser/FormCruiser.Designer.cs +++ b/ProjectCruiser/ProjectCruiser/FormCruiser.Designer.cs @@ -35,6 +35,8 @@ buttonRight = new Button(); buttonLeft = new Button(); buttonCreateCruiser = new Button(); + comboBoxStrategy = new ComboBox(); + buttonStrategyStep = new Button(); ((System.ComponentModel.ISupportInitialize)pictureBoxCruiser).BeginInit(); SuspendLayout(); // @@ -117,11 +119,35 @@ buttonCreateCruiser.UseVisualStyleBackColor = true; buttonCreateCruiser.Click += buttonCreateCruiser_Click; // + // comboBoxStrategy + // + comboBoxStrategy.Anchor = AnchorStyles.Top | AnchorStyles.Right; + comboBoxStrategy.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxStrategy.FormattingEnabled = true; + comboBoxStrategy.Items.AddRange(new object[] { "К центру", "К краю" }); + comboBoxStrategy.Location = new Point(637, 12); + comboBoxStrategy.Name = "comboBoxStrategy"; + comboBoxStrategy.Size = new Size(151, 28); + comboBoxStrategy.TabIndex = 7; + // + // buttonStrategyStep + // + buttonStrategyStep.Anchor = AnchorStyles.Top | AnchorStyles.Right; + buttonStrategyStep.Location = new Point(694, 46); + buttonStrategyStep.Name = "buttonStrategyStep"; + buttonStrategyStep.Size = new Size(94, 29); + buttonStrategyStep.TabIndex = 8; + buttonStrategyStep.Text = "Шаг"; + buttonStrategyStep.UseVisualStyleBackColor = true; + buttonStrategyStep.Click += ButtonStrategyStep_Click; + // // FormCruiser // AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(800, 450); + Controls.Add(buttonStrategyStep); + Controls.Add(comboBoxStrategy); Controls.Add(buttonCreateCruiser); Controls.Add(buttonLeft); Controls.Add(buttonRight); @@ -144,5 +170,7 @@ private Button buttonRight; private Button buttonLeft; private Button buttonCreateCruiser; + private ComboBox comboBoxStrategy; + private Button buttonStrategyStep; } } \ No newline at end of file diff --git a/ProjectCruiser/ProjectCruiser/FormCruiser.cs b/ProjectCruiser/ProjectCruiser/FormCruiser.cs index af4d3d6..1cce72e 100644 --- a/ProjectCruiser/ProjectCruiser/FormCruiser.cs +++ b/ProjectCruiser/ProjectCruiser/FormCruiser.cs @@ -1,4 +1,5 @@ using ProjectCruiser.Drawings; +using ProjectCruiser.MovementStrategy; namespace ProjectCruiser { @@ -6,9 +7,12 @@ namespace ProjectCruiser { private DrawningCruiser? _drawingCruiser; + + private AbstactStrategy? _strategy; public FormCruiser() { InitializeComponent(); + _strategy = null; } private void Draw() @@ -37,13 +41,13 @@ namespace ProjectCruiser case nameof(DrawningMilitaryCruiser): - _drawingCruiser = new DrawningMilitaryCruiser(random.Next(100, 300), - random.Next(1000, 3000), - Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), - Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), - Convert.ToBoolean(random.Next(0, 2)), - Convert.ToBoolean(random.Next(0, 2)), - Convert.ToBoolean(random.Next(0, 2))); + _drawingCruiser = new DrawningMilitaryCruiser(random.Next(100, 300), + random.Next(1000, 3000), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Convert.ToBoolean(random.Next(0, 2)), + Convert.ToBoolean(random.Next(0, 2)), + Convert.ToBoolean(random.Next(0, 2))); break; @@ -53,7 +57,8 @@ namespace ProjectCruiser _drawingCruiser.SetPictireSize(pictureBoxCruiser.Width, pictureBoxCruiser.Height); _drawingCruiser.SetPosition(random.Next(10, 100), random.Next(10, 100)); - + _strategy = null; + comboBoxStrategy.Enabled = true; Draw(); } @@ -102,5 +107,44 @@ namespace ProjectCruiser } } + ///+ /// Обработка нажатия кнопки "Шаг" + /// + /// + /// + private void ButtonStrategyStep_Click(object sender, EventArgs e) + { + if (_drawingCruiser == null) { return; } + + if (comboBoxStrategy.Enabled) + { + _strategy = comboBoxStrategy.SelectedIndex switch + { + 0 => new MoveToCenter(), + 1 => new MoveToBorder(), + _ => null, + }; + if (_strategy == null) + { + return ; + } + _strategy.SetData(new MoveableCruiser(_drawingCruiser), pictureBoxCruiser.Width, pictureBoxCruiser.Height); + } + + if (_strategy == null) + { + return; + } + + comboBoxStrategy.Enabled = false; + _strategy.MakeStep(); + Draw(); + + if (_strategy.GetStatus() == StrategyStatus.Finish) + { + comboBoxStrategy.Enabled = true; + _strategy = null; + } + } } } diff --git a/ProjectCruiser/ProjectCruiser/MovementStrategy/AbstactStrategy.cs b/ProjectCruiser/ProjectCruiser/MovementStrategy/AbstactStrategy.cs new file mode 100644 index 0000000..b38a124 --- /dev/null +++ b/ProjectCruiser/ProjectCruiser/MovementStrategy/AbstactStrategy.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectCruiser.MovementStrategy; + +///+/// Класс-стратегия перемещения объекта +/// +public abstract class AbstactStrategy +{ + ///+ /// Перемещаемы объект + /// + private IMoveableObject? _moveableObject; + + ///+ /// Статус перемещения + /// + private StrategyStatus _state = StrategyStatus.NotInit; + + ///+ /// Ширина перемещения + /// + protected int FieldWidth { get; private set; } + + ///+ /// Высота перемещения + /// + protected int FieldHeight { get; private set; } + + ///+ /// Статус перемещения + /// + public StrategyStatus GetStatus() { return _state; } + + ///+ /// Установка данных + /// + /// Перемещаемы объект + /// Ширина поля + /// Высота поля + public void SetData(IMoveableObject moveableObject, int width, int height) + { + if (moveableObject == null) + { + _state = StrategyStatus.NotInit; + return; + } + + _state = StrategyStatus.InProgress; + _moveableObject = moveableObject; + FieldWidth = width; + FieldHeight = height; + } + + ///+ /// Шаг перемещения + /// + public void MakeStep() + { + if (_state != StrategyStatus.InProgress) + { + return; + } + + if (IsTargetDestination()) + { + _state = StrategyStatus.Finish; + return; + } + + MoveToTarget(); + } + + ///+ /// Перемещение влево + /// + ///+ protected bool MoveLeft() => MoveTo(MovementDirection.Left); + + /// + /// Перемещение вправо + /// + ///+ protected bool MoveRight() => MoveTo(MovementDirection.Right); + + /// + /// Перемещение вверх + /// + ///+ protected bool MoveUp() => MoveTo(MovementDirection.Up); + + /// + /// Перемещение вниз + /// + ///+ protected bool MoveDown() => MoveTo(MovementDirection.Down); + + + protected ObjectParameters? GetObjectParameters => _moveableObject?.GetObjectPosition; + + + protected int? GetStep() + { + if (_state != StrategyStatus.InProgress) + { + return null; + } + return _moveableObject?.GetStep; + } + + + + /// + /// Перемещение к цели + /// + protected abstract void MoveToTarget(); + + ///+ /// Достигнута ли цель + /// + ///+ protected abstract bool IsTargetDestination(); + + + private bool MoveTo(MovementDirection direction) + { + if (_state != StrategyStatus.InProgress) + { + return false; + } + return _moveableObject?.TryMoveObject(direction) ?? false; + } + +} diff --git a/ProjectCruiser/ProjectCruiser/MovementStrategy/IMoveableObject.cs b/ProjectCruiser/ProjectCruiser/MovementStrategy/IMoveableObject.cs new file mode 100644 index 0000000..fd23511 --- /dev/null +++ b/ProjectCruiser/ProjectCruiser/MovementStrategy/IMoveableObject.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectCruiser.MovementStrategy; + +/// +/// Интерфейс для работы с перемещением объектов +/// +public interface IMoveableObject +{ + ///+ /// Получение координаты объекта + /// + ObjectParameters? GetObjectPosition { get; } + + ///+ /// Шаг объекта + /// + int GetStep { get; } + + ///+ /// Попытка переместить объект в указанном направлении + /// + /// Направление + ///+ bool TryMoveObject(MovementDirection direction); +} diff --git a/ProjectCruiser/ProjectCruiser/MovementStrategy/MoveToBorder.cs b/ProjectCruiser/ProjectCruiser/MovementStrategy/MoveToBorder.cs new file mode 100644 index 0000000..8469f08 --- /dev/null +++ b/ProjectCruiser/ProjectCruiser/MovementStrategy/MoveToBorder.cs @@ -0,0 +1,50 @@ +namespace ProjectCruiser.MovementStrategy; + +public class MoveToBorder : AbstactStrategy +{ + protected override bool IsTargetDestination() + { + ObjectParameters? objParams = GetObjectParameters; + if (objParams == null) + { + return false; + } + return objParams.ObjectMiddleHorizontal - GetStep() <= FieldWidth && objParams.ObjectMiddleHorizontal + GetStep() >= FieldWidth && + objParams.ObjectMiddleVertical - GetStep() <= FieldHeight && objParams.ObjectMiddleVertical + GetStep() >= FieldHeight; + } + + protected override void MoveToTarget() + { + ObjectParameters? objParams = GetObjectParameters; + if (objParams == null) + { + return; + } + + int diffX = objParams.ObjectMiddleHorizontal - FieldWidth; + if (Math.Abs(diffX) > GetStep()) + { + if (diffX > 0) + { + MoveLeft(); + } + else + { + MoveRight(); + } + } + + int diffY = objParams.ObjectMiddleVertical - FieldHeight; + if (Math.Abs(diffY) > GetStep()) + { + if (diffY > 0) + { + MoveUp(); + } + else + { + MoveDown(); + } + } + } +} diff --git a/ProjectCruiser/ProjectCruiser/MovementStrategy/MoveToCenter.cs b/ProjectCruiser/ProjectCruiser/MovementStrategy/MoveToCenter.cs new file mode 100644 index 0000000..c88b51e --- /dev/null +++ b/ProjectCruiser/ProjectCruiser/MovementStrategy/MoveToCenter.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectCruiser.MovementStrategy; + +public class MoveToCenter : AbstactStrategy +{ + protected override bool IsTargetDestination() + { + ObjectParameters? objParams = GetObjectParameters; + if (objParams == null) + { + return false; + } + return objParams.ObjectMiddleHorizontal - GetStep() <= FieldWidth / 2 && objParams.ObjectMiddleHorizontal + GetStep() >= FieldWidth / 2 && + objParams.ObjectMiddleVertical - GetStep() <= FieldHeight / 2 && objParams.ObjectMiddleVertical + GetStep() >= FieldHeight / 2; + } + + protected override void MoveToTarget() + { + ObjectParameters? objParams = GetObjectParameters; + if (objParams == null) + { + return; + } + + int diffX = objParams.ObjectMiddleHorizontal - FieldWidth / 2; + if (Math.Abs(diffX) > GetStep()) + { + if (diffX > 0) + { + MoveLeft(); + } else + { + MoveRight(); + } + } + + int diffY = objParams.ObjectMiddleVertical - FieldHeight / 2; + if (Math.Abs(diffY) > GetStep()) + { + if (diffY > 0) + { + MoveUp(); + } else + { + MoveDown(); + } + } + } +} diff --git a/ProjectCruiser/ProjectCruiser/MovementStrategy/MoveableCruiser.cs b/ProjectCruiser/ProjectCruiser/MovementStrategy/MoveableCruiser.cs new file mode 100644 index 0000000..4755f4d --- /dev/null +++ b/ProjectCruiser/ProjectCruiser/MovementStrategy/MoveableCruiser.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ProjectCruiser.Drawings; + +namespace ProjectCruiser.MovementStrategy; + +/// +/// Класс реализация IMoveableObject с использованием DrawningCruiser +/// +public class MoveableCruiser : IMoveableObject +{ + ///+ /// Поле-объект класса DrawningCruiser или его наследника + /// + private readonly DrawningCruiser? _cruiser = null; + + ///+ /// Конструктор + /// + /// + public MoveableCruiser(DrawningCruiser? cruiser) + { + _cruiser = cruiser; + } + + public ObjectParameters? GetObjectPosition + { + get + { + if (_cruiser == null || _cruiser.EntityCruiser == null || !_cruiser.GetPosX.HasValue || !_cruiser.GetPosY.HasValue) + { + return null; + } + return new ObjectParameters(_cruiser.GetPosX.Value, _cruiser.GetPosY.Value, _cruiser.GetWidth, _cruiser.GetHeight); + } + } + + public int GetStep => (int)(_cruiser?.EntityCruiser?.Step ?? 0); + + public bool TryMoveObject(MovementDirection direction) + { + if (_cruiser == null || _cruiser.EntityCruiser == null) + { + return false; + } + return _cruiser.MoveTransport(GetDirectionType(direction)); + } + + ///+ /// Конвертация из MovementDirection в DirectionType + /// + /// + ///+ private static DirectionType GetDirectionType(MovementDirection direction) + { + return direction switch + { + MovementDirection.Left => DirectionType.Left, + MovementDirection.Right => DirectionType.Right, + MovementDirection.Up => DirectionType.Up, + MovementDirection.Down => DirectionType.Down, + _ => DirectionType.Unknow, + }; + } +} diff --git a/ProjectCruiser/ProjectCruiser/MovementStrategy/MovementDirection.cs b/ProjectCruiser/ProjectCruiser/MovementStrategy/MovementDirection.cs new file mode 100644 index 0000000..2d6fe5f --- /dev/null +++ b/ProjectCruiser/ProjectCruiser/MovementStrategy/MovementDirection.cs @@ -0,0 +1,24 @@ +namespace ProjectCruiser.MovementStrategy; + +/// +/// Направление перемещения +/// +public enum MovementDirection +{ + ///+ /// Вверх + /// + Up = 1, + ///+ /// Вниз + /// + Down = 2, + ///+ /// Влева + /// + Left = 3, + ///+ /// Вправо + /// + Right = 4 +} diff --git a/ProjectCruiser/ProjectCruiser/MovementStrategy/ObjectParameters.cs b/ProjectCruiser/ProjectCruiser/MovementStrategy/ObjectParameters.cs new file mode 100644 index 0000000..dd28ac0 --- /dev/null +++ b/ProjectCruiser/ProjectCruiser/MovementStrategy/ObjectParameters.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectCruiser.MovementStrategy; +///+/// Параметры координаты объекта +/// +public class ObjectParameters +{ + ///+ /// Координата X + /// + private readonly int _x; + + ///+ /// Координата Y + /// + private readonly int _y; + + ///+ /// Ширина объекта + /// + private readonly int _width; + + ///+ /// Высота объекта + /// + private readonly int _height; + + ///+ /// Левая граница + /// + public int LeftBorder => _x; + + ///+ /// Верхняя граница + /// + public int TopBorder => _y; + + ///+ /// Правая граница + /// + public int RightBorder => _x + _width; + + ///+ /// Нижняя граница + /// + public int DownBorder => _y + _height; + + ///+ /// Середина объекта + /// + public int ObjectMiddleHorizontal => _x + _width / 2; + + ///+ /// Середина объекта + /// + public int ObjectMiddleVertical => _y + _height / 2; + + ///+ /// Конструктор + /// + /// + /// + /// + /// + public ObjectParameters(int x, int y, int width, int height) + { + _x = x; + _y = y; + _width = width; + _height = height; + } +} diff --git a/ProjectCruiser/ProjectCruiser/MovementStrategy/StrategyStatus.cs b/ProjectCruiser/ProjectCruiser/MovementStrategy/StrategyStatus.cs new file mode 100644 index 0000000..d769b40 --- /dev/null +++ b/ProjectCruiser/ProjectCruiser/MovementStrategy/StrategyStatus.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectCruiser.MovementStrategy; + +///+/// Статус выполнения операции перемещения +/// +public enum StrategyStatus +{ + ///+ /// Все готово к началу + /// + NotInit, + ///+ /// Выполняется + /// + InProgress, + ///+ /// Завершено + /// + Finish +} -- 2.25.1 From 801caf48d30b903b2a52d8d1899de91999ccfda0 Mon Sep 17 00:00:00 2001 From: Almaz <79022113685@mail.ru> Date: Wed, 10 Apr 2024 00:34:32 +0400 Subject: [PATCH 5/6] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D1=80=D0=B8=D1=81?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BA=D1=80=D0=B5=D0=B9=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Drawings/DrawningCruiser.cs | 31 ++++++----- .../Drawings/DrawningMilitaryCruiser.cs | 51 +++++++++---------- 2 files changed, 38 insertions(+), 44 deletions(-) diff --git a/ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs b/ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs index ea8c06f..7fee537 100644 --- a/ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs +++ b/ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs @@ -34,11 +34,11 @@ public class DrawningCruiser ////// Ширина прорисовки крейсера /// - private readonly int _drawningCruiserWidth = 90; + private readonly int _drawningCruiserWidth = 180; ////// Высота прорисовки крейсера /// - private readonly int _drawingCruiserHeight = 50; + private readonly int _drawingCruiserHeight = 70; ////// Координата X объекта @@ -158,21 +158,20 @@ public class DrawningCruiser Pen pen = new(Color.Black); + // Основной корпус крейсера + Brush Brush = new + SolidBrush(EntityCruiser.BodyColor); - //Границы крейсера - g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value, 20, 20); - g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value + 30, 20, 20); - g.DrawEllipse(pen, _startPosX.Value + 70, _startPosY.Value, 20, 20); - g.DrawEllipse(pen, _startPosX.Value + 70, _startPosY.Value + 30, 20, 20); - g.DrawRectangle(pen, _startPosX.Value + 1, _startPosY.Value + 10, 10, 30); - g.DrawRectangle(pen, _startPosX.Value + 80, _startPosY.Value + 10, 10, 30); - g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 1, 70, 52); - - //кузов крейсера - Brush br = new SolidBrush(EntityCruiser.BodyColor); - g.FillRectangle(br, _startPosX.Value, _startPosY.Value + 10, 10, 30); - g.FillRectangle(br, _startPosX.Value + 80, _startPosY.Value + 10, 10, 30); - g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value, 70, 50); + Point[] hull = new Point[] + { + new Point((int)(_startPosX + 5), (int)(_startPosY + 10)), + new Point((int)(_startPosX + 110), (int)(_startPosY + 10)), + new Point((int)(_startPosX + 170), (int)(_startPosY + 40)), + new Point((int)(_startPosX + 110), (int)(_startPosY + 60)), + new Point((int)(_startPosX + 5), (int)(_startPosY + 60)) + }; + g.FillPolygon(Brush, hull); + g.DrawPolygon(pen, hull); } } diff --git a/ProjectCruiser/ProjectCruiser/Drawings/DrawningMilitaryCruiser.cs b/ProjectCruiser/ProjectCruiser/Drawings/DrawningMilitaryCruiser.cs index b86968c..9409d28 100644 --- a/ProjectCruiser/ProjectCruiser/Drawings/DrawningMilitaryCruiser.cs +++ b/ProjectCruiser/ProjectCruiser/Drawings/DrawningMilitaryCruiser.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -19,7 +20,7 @@ public class DrawningMilitaryCruiser: DrawningCruiser /// Признак наличия обвеса /// Признак наличия брони /// Признак наличия оружия - public DrawningMilitaryCruiser(int speed, double weigth, Color bodyColor, Color additionalColor, bool bodyKit, bool armor, bool weapon): base(110, 60) + public DrawningMilitaryCruiser(int speed, double weigth, Color bodyColor, Color additionalColor, bool bodyKit, bool armor, bool weapon): base(180, 70) { EntityCruiser = new EntityMilitaryCruiser(speed, weigth, bodyColor, additionalColor, bodyKit, armor, weapon); } @@ -33,36 +34,30 @@ public class DrawningMilitaryCruiser: DrawningCruiser } Pen pen = new(Color.Black); - Brush additionalBrush = new SolidBrush(militaryCruiser.AdditionalColor); - //Границы крейсера - g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 5, 20, 20); - g.DrawEllipse(pen, _startPosX.Value + 10, _startPosY.Value + 35, 20, 20); - g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 5, 20, 20); - g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 35, 20, 20); - g.DrawRectangle(pen, _startPosX.Value + 9, _startPosY.Value + 15, 10, 30); - g.DrawRectangle(pen, _startPosX.Value + 90, _startPosY.Value + 15, 10, 30); - g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value + 4, 70, 52); + // Основной корпус парусника + Brush brush = new SolidBrush(militaryCruiser.BodyColor); - //кузов крейсера - Brush br = new SolidBrush(militaryCruiser.BodyColor); - g.FillRectangle(br, _startPosX.Value + 10, _startPosY.Value + 15, 10, 30); - g.FillRectangle(br, _startPosX.Value + 90, _startPosY.Value + 15, 10, 30); - g.FillRectangle(br, _startPosX.Value + 20, _startPosY.Value + 5, 70, 50); - - _startPosX += 10; - _startPosY += 5; - base.DrawTransport(g); - _startPosX -= 10; - _startPosY -= 5; - - // оружие крейсера - if (militaryCruiser.Weapon) + Point[] hull = new Point[] { - g.FillRectangle(additionalBrush, _startPosX.Value + 75, _startPosY.Value + 23, 25, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 35, _startPosY.Value + 23, 35, 15); - g.FillRectangle(additionalBrush, _startPosX.Value + 10, _startPosY.Value + 23, 20, 15); + new Point((int)(_startPosX + 5), (int)(_startPosY + 10)), + new Point((int)(_startPosX + 110), (int)(_startPosY + 10)), + new Point((int)(_startPosX + 170), (int)(_startPosY + 40)), + new Point((int)(_startPosX + 110), (int)(_startPosY + 60)), + new Point((int)(_startPosX + 5), (int)(_startPosY + 60)) + }; + g.FillPolygon(brush, hull); + g.DrawPolygon(pen, hull); + base.DrawTransport(g); + + //Взлетная полоса + Brush additionalBrush = new SolidBrush(militaryCruiser.AdditionalColor); + g.FillEllipse(additionalBrush, (int)(_startPosX + 100), (int)(_startPosY + 25), 20, 20); + g.DrawEllipse(pen, (int)(_startPosX + 100), (int)(_startPosY + 25), 20, 20); + + //Рокетная шахта + g.FillRectangle(additionalBrush, (int)(_startPosX + 70), (int)(_startPosY + 20), 20, 30); + g.FillRectangle(additionalBrush, (int)(_startPosX + 40), (int)(_startPosY + 27), 30, 15); - } } } -- 2.25.1 From 2238e92799cf89b3591efa1b19782bdc2e3c1bab Mon Sep 17 00:00:00 2001 From: Almaz <79022113685@mail.ru> Date: Mon, 15 Apr 2024 17:32:53 +0400 Subject: [PATCH 6/6] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20DrawningCruiser?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs b/ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs index 7fee537..e3cdcbb 100644 --- a/ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs +++ b/ProjectCruiser/ProjectCruiser/Drawings/DrawningCruiser.cs @@ -133,13 +133,13 @@ public class DrawningCruiser } return true; case DirectionType.Right: - if (_startPosX.Value - EntityCruiser.Step > 0) + if (_startPosX.Value + _drawningCruiserWidth + EntityCruiser.Step < _pictureWidth) { _startPosX += (int)EntityCruiser.Step; } return true; case DirectionType.Down: - if (_startPosY.Value - EntityCruiser.Step > 0) + if (_startPosY.Value + _drawingCruiserHeight + EntityCruiser.Step < _pictureHeight) { _startPosY += (int)EntityCruiser.Step; } -- 2.25.1