From 1ba926be259d688db1c6b596ac35642b4dd22cd6 Mon Sep 17 00:00:00 2001 From: ehermakov Date: Sun, 17 Mar 2024 21:34:18 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B6=D0=B0?= =?UTF-8?q?=D1=8E=20=D0=BA=D0=BE=D0=B4=20=D0=BF=D0=BE=20=D0=B8=D1=82=D0=BE?= =?UTF-8?q?=D0=B3=D0=B0=D0=BC=2017=20=D0=B7=D0=B0=D0=BD=D1=8F=D1=82=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ShipCraft/Переделка/ShipField.py | 24 ++++++-- .../__pycache__/ShipField.cpython-311.pyc | Bin 9559 -> 10200 bytes .../__pycache__/test_ShipField.cpython-311.pyc | Bin 10274 -> 12076 bytes HNS/Excercises/ShipCraft/Переделка/main.py | 2 + .../ShipCraft/Переделка/test_ShipField.py | 56 +++++++++++++----- 5 files changed, 61 insertions(+), 21 deletions(-) diff --git a/HNS/Excercises/ShipCraft/Переделка/ShipField.py b/HNS/Excercises/ShipCraft/Переделка/ShipField.py index f134494..c82fe05 100644 --- a/HNS/Excercises/ShipCraft/Переделка/ShipField.py +++ b/HNS/Excercises/ShipCraft/Переделка/ShipField.py @@ -15,6 +15,7 @@ class ShipField: ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '] + self.ships = [4, 3, 3, 2, 2, 2, 1, 1, 1, 1] self.field_size = 10 self.field_mode = 0 self.ship_size = 4 @@ -36,7 +37,7 @@ class ShipField: self.clear_marker() if self.field_mode == 0: - if self.check_possible(row, col): + if self.ship_size in self.ships and self.check_possible(row, col): self.set_ship(row, col) elif self.field_mode == 1: @@ -49,17 +50,23 @@ class ShipField: if self.check_possible(row, col): if self.ship_direction == 0: for r in range(row, row + self.ship_size): - self.field[r * self.field_size + col] = "p" + if self.ship_size in self.ships: + self.field[r * self.field_size + col] = "p" + else: + self.field[r * self.field_size + col] = "r" if self.ship_direction == 1: for c in range(col, col + self.ship_size): - self.field[row * self.field_size + c] = "p" + if self.ship_size in self.ships: + self.field[row * self.field_size + c] = "p" + else: + self.field[r * self.field_size + col] = "r" else: self.field[row * self.field_size + col] += "+" def clear_marker(self): for i in range(0, len(self.field)): - if self.field[i] == "p" or self.field[i] == "+": + if self.field[i] == "p" or self.field[i] == "r": self.field[i] = "" if "+" in self.field[i]: @@ -84,6 +91,10 @@ class ShipField: index = row * self.field_size + c self.field[index] = "1" + if self.ship_size in self.ships: + self.ships.remove(self.ship_size) + self.print_field() + def shoot(self, row, col): if row < 0 or row > self.field_size - 1: return ShootResult.UNDEFINED @@ -164,6 +175,7 @@ class ShipField: self.field_mode = 0 def print_field(self): + print(self.ships) for r in range(0, self.field_size): blocked_string = "" ship_string = "" @@ -171,5 +183,5 @@ class ShipField: blocked_string += str(self.check_blocked(r, c))[0] + ", " ship_string += self.field[r * self.field_size + c] + ', ' print(ship_string[:-2]) - #print(blocked_string[:-2] + ' ' + ship_string[:-2]) - print("********************************************************************") \ No newline at end of file + # print(blocked_string[:-2] + ' ' + ship_string[:-2]) + print("********************************************************************") diff --git a/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipField.cpython-311.pyc b/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipField.cpython-311.pyc index 88800194fffc3a9b346e55f2a50d86c5eee5ce1c..46d96c68812246803fb1cff96d60297a46fdf8be 100644 GIT binary patch delta 2751 zcma)8eN0nV6u-Ca>j!OV<)fu7(3a0U5iFw94di1WQ#RQ$m@Z}s!S<<0p?Hh9kt)kF zjepc^?q-o}WD>IvQUBONviOHFW`8Z&mb8uq@{%R^*G96KntjG)%g(ul2RJppJbu0R z-1E*o_nhB3m-()R7jr+e+j9s!_U(TvfB4Sl{!@AoW*5j|5}}u9g7o2{ctE1NM0q8Z zgA&LMEAof|W|B4|Jw!In_S4^KkDRlFT1$EWX2FpTN4TGWC5j{KI#?2`LeC5fvQd=| z4JgrwD#ecsjKuk{{$JX~hYY0-*Va^F1H5Mq$(#jm@$5N6jC$?(jgA$-k7^hgRfghd zDiC0W+-0n$MZDRVq;CF=(L;0Ivpiecnjl9}Lp(4>SH&|%SY3jr^W41ElrMP`WLo0g zE;o;vJp64_2{o?F$(WE&82`8`v0k?>5+P}_EhxX2e_JWYV zV=lH4=ccR*3TDk)irru$tepZTm>Hb^x)CJf^+Zi2t$Blq_=MSzPdf9re{_V^n)!3k*`7!%fqb!ZE9Wn(s* zDjiWN6Xd*4Yh()xf1W;)>juD28 zW6lZT4y(^t2a@<04_Tkq+wHq~)LQwnp>Q|N5X4Ek;PX#4U+%qjAm!T*??T6OlO0oC z)5k7vz1EVhe&%{ly1F%8+?FbCTYStCAGVfHJb~Fb?9`X8Zn}Q#Nz7(^;4yeA&`An5 zrSfYsy47tmHe%n9?0Ppo**n#j=JmEpD8Bu+TU6qUwjv&~H^3-jmk%vRoyl6L2&;jy zY+##ERE&VpRZUD8iS~z;l`5wLT8X0$rfJ;O1HGaX+eY2mVr=Jk?e9OPLY~siUd)}K z)WiMGEn9&xYdeEh8Bh)WwcMT7>ICw6##UjZ1iFQZ-!)cD2u2xJ7*#LmB%1|81cS2F z5hoPX$;A^InKBd`Q&j5+8yFt#6YWnnKENkc8W@f!uM1i+!60-)5KAzNuyR6tWIS&* z6mey=51Z)opcwC+{lQs8+ZL^kWHTh^K+0MT?}E*l?3%Zg+_sfWMy7_-w%R#cZOT@= zV7AShi*B2X(q`|R*_&EYRt90%496X7+&>bFjUMD}1!?M@%`ZGfTSUW^vVp{+ zTaBh_41C#d8NXO?oBTC^i*$oy0s~RMp2v8S~-Z zUIe^6W|prsX{<4%6|%Ri>_~+b>`#{yo5(iCw5f$kh>A9VMJV|F(TMK|v=D)*ewQMCE!pL^N0-yWkP%>M^ffJ*}a delta 2224 zcmaJ?U2Gdg5Wcm2w&VCGiIdpQkK@>m-NS8KCn^N$(l(?isZTmG*3-W;sFT(K|(U3>O&BSnLWozL(59{ z?auDZ?Cv+SbIXTs9CTiEIBXKOPp|y0e(yWu{JY~Zl+H@Wr7Zi9%}FU*6fJ82g(*HG z&Y9|S(zv9^NhQ0=0+sXZI|iSzE#4LK$PEZ9q^Zc7d@QHtv+$MiAGRC5H2Dpk-IZTV z1=c~Dih(y_rI63frbI* zhLp$0F2Nqlu>AJMV|w|?Icc(ft1O$Mn@fBL_-t{HXWp1K;JTUSsLdholNOk_c|3T% z4R*$w-2mLM#SeAPn>N{D3@0tR4@oM^=*d(@F@fJHZx-XX_T90Yu!0X7dlyV)2eF?q zkOk>tyhUs^Hp9DdZk5FpEBE7w+X;FIoCuoC)6>UQj`k84Dba|d%d&_z57I2rr!lUv zOc75;eAgK-rTKBSRE7igX7e^&D+b{i`-8H@F~XLi*%6Aewh@LrBc5Z+dmlMxdf&Df zUo3sJuoSxgs(UGvSn}?^?%fSdj_}ysbO$fBe%!MZ8oC;<>sDRlzA6c{Nv&J2yJJ5RIT z^DI|Sc+&C1ldevdfLYf&dgd6evPz_Bfw4}w&^)lP7AwWH7K6Bmfg*F_R?x2VE%p_! z%ejhY}Bv_o7sGZ8*|Ip-_4P-fUlD?n=t@GTTGDA`O&y`c@+Chz8A(nNTxR zsps;A%#@nt3eIgxH{JtXzHW959`gN)4nrN|EJF@g=uL`j7Z(z-9X+xZRzbN)>>*TB zHWR(hux84r`TT!)PQcC1F7^`K?)(uqUG9?EF2P*`d6Rh?cABwR;@m^0XeXdcU9Qzj z`D8jjtJd=ey#AQ^HC!*g2=Tx%xZ?K+uZ;EcE}X7;UZJMUB!W#A4)YjBV)LL%6Yic>*f_Yw4P zRw|L7TFX+!(PcQ(+zLMg?d|toZaX}0nlqFrA8V~%@;~vqAsLFf>i?)Y;Tc{J#aJVJ z5!#OUQ%GU`;0%xVne_)MBDoJ;ajJ6qQAS0{Tf` zmN@+xF%Azzf-aXFs7iGR!bHTs%^~lqN_Fs?h3srzeV8AG$!Oo$l!1}Ydv|~6Yq$PKMY#VLUS7<| diff --git a/HNS/Excercises/ShipCraft/Переделка/__pycache__/test_ShipField.cpython-311.pyc b/HNS/Excercises/ShipCraft/Переделка/__pycache__/test_ShipField.cpython-311.pyc index 1ea9f73b415fc202ce1ff6bcdc7d14d76593cfe9..caf4c6f9c0cd4dd8e2605ef39c1c0c635775cbba 100644 GIT binary patch delta 1565 zcmbu8-)j?D6vyYzWG1&soUZ9i%q0DhNlf!YYjN9HwOcTlR;xCyKM}>vR+DOr)a^_Z zu@MXF(=IIQo>hwvQubk0ROk}$p?`ocKA40+mp+vRS^B21;0l7?GpT|#ebGzilf(I* zbLVi*nLoaL_?>)r%^C;C&f5*Ia{v0S%Xi7t^~aNrYus@)s~qBDYB52sIm!LvoXg2O z!z|KhM?|3{_uAsj1QPTYr;KgI1?4pf zuNv5JB%SIX7))EC|9gHC)D@w4ov{;c`GRD7anARId{kMaWk9-s5pj6heBdMLSxc(n zk|i-%mG`vf37ITDY?~zH0BjDa(5D}feq^#a0)Mpyi*x$LnsQe98NCJc!kq4ar=fAU z(G-LoVh8*~RhX5(f|H6SkTDy4zqaKQUrB0hG6L+5m}uD8pK*|3L50q+YOnR`kX69j z_5H5jnPg5fOmWZQj;_nm3XPU&yh`IG8eaqw@RCJ15l(;<^zhqx2#7=03-1I}c;i&z zrslR0uE4>R=J6HC7`DthSy6j$ax)SPD+()IRyomQKov8>Lsc#QrA57R;YK{SJh(of>o_! zUhAr8U1cp%)e^HNOsGxkK2vL7C9h0-tF*WD{)hWa($FTRmp8#J_TZb z!s_fPv>GweX1LLALJT7IFqrsd1lTbYW-LVVIg<@%c|aL+^m48{qh8Dz`O(wE=Q8In z7!{cXimlKe*2lVbt9qkd`dxK$lgv#I4Jx{|G8lD+0(`c1OOEe0b{9X_GKbh@w z==6I)X$}eLmGGd60h%Q7gVh19H*ozoK>_;3%97P;MoIspLjDXzUN;X4B zdj;f3N5UcYyx=~->lD9v!F_BwMmf+sAdK7ZZ)(o+6g JMK?UGu6L}Ma5De^ delta 631 zcmZ1zwsoBeRti$7Ir*+kAd2HB%DAyrV3)F#b>XZAOM%P)d2XR>2_s|OW-<9{M#iAYlN7QT z+cy7ImonJg`@G&w<)b+UnSF=NAILw?1{KUF0rCkXOQ-oVc~c`us< zHOA*WDy($WfA(QW^M2SxaX}1Fs4Gdp77{uf!Mo)?E;JPunN7aUEG14L+p2qO?-1tRQ0gfocn0ueqS!Vg3QfQV2K5e_0EK}5`CPF*=hrO6t) zmnOf~wGn4yHUGeXNlcE>(~(L5X%GVuB0%C7hfQvNN@-52T~X5HMS7l&;Y^G`z1YbK O9v{InUvS8SjRgSMWsyMu diff --git a/HNS/Excercises/ShipCraft/Переделка/main.py b/HNS/Excercises/ShipCraft/Переделка/main.py index 2a01437..944c595 100644 --- a/HNS/Excercises/ShipCraft/Переделка/main.py +++ b/HNS/Excercises/ShipCraft/Переделка/main.py @@ -35,6 +35,8 @@ def colorize(field, buttons): bg = 'blue' if "+" in field[i]: bg = 'orange' + if "r" in field[i]: + bg = 'red' buttons[i].configure(bg=bg) diff --git a/HNS/Excercises/ShipCraft/Переделка/test_ShipField.py b/HNS/Excercises/ShipCraft/Переделка/test_ShipField.py index ab657be..6af2e04 100644 --- a/HNS/Excercises/ShipCraft/Переделка/test_ShipField.py +++ b/HNS/Excercises/ShipCraft/Переделка/test_ShipField.py @@ -6,7 +6,7 @@ from ShootResult import ShootResult class TestShipField(TestCase): def test_set_ship_size(self): - ship_field = ShipField() # Заводим объект типа ShipField + ship_field = ShipField() # Заводим объект типа ShipField ship_field.set_ship_size(1) self.assertEqual(ship_field.ship_size, 1) @@ -18,7 +18,7 @@ class TestShipField(TestCase): self.assertEqual(ship_field.ship_size, 4) def test_set_ship_size_outofrange(self): - ship_field = ShipField() # Заводим объект типа ShipField + ship_field = ShipField() # Заводим объект типа ShipField ship_field.set_ship_size(1) ship_field.set_ship_size(-1) @@ -31,7 +31,7 @@ class TestShipField(TestCase): self.assertEqual(ship_field.ship_size, 1) def test_set_ship_size_wrongtype(self): - ship_field = ShipField() # Заводим объект типа ShipField + ship_field = ShipField() # Заводим объект типа ShipField ship_field.set_ship_size(1) ship_field.set_ship_size([]) @@ -44,14 +44,14 @@ class TestShipField(TestCase): self.assertEqual(ship_field.ship_size, 1) def test_toggle_field_mode(self): - ship_field = ShipField() # Заводим объект типа ShipField - self.assertEqual(ship_field.field_mode, 0) # Проверяем, что изначальное значение field_mode равно 0 + ship_field = ShipField() # Заводим объект типа ShipField + self.assertEqual(ship_field.field_mode, 0) # Проверяем, что изначальное значение field_mode равно 0 - ship_field.toggle_field_mode() # Вызываем метод, который тестируем - self.assertEqual(ship_field.field_mode, 1) # Проверяем, что field_mode принял желаемое значение + ship_field.toggle_field_mode() # Вызываем метод, который тестируем + self.assertEqual(ship_field.field_mode, 1) # Проверяем, что field_mode принял желаемое значение - ship_field.toggle_field_mode() # Вызываем метод, который тестируем - self.assertEqual(ship_field.field_mode, 0) # Проверяем, что field_mode принял желаемое значение + ship_field.toggle_field_mode() # Вызываем метод, который тестируем + self.assertEqual(ship_field.field_mode, 0) # Проверяем, что field_mode принял желаемое значение def test_action(self): self.fail() @@ -114,9 +114,6 @@ class TestShipField(TestCase): new_field_string = str.join(' ', ship_field.field) self.assertEqual(new_field_string, old_field_string) - def test_set_ship(self): - self.fail() - def test_check_possible(self): self.fail() @@ -149,9 +146,38 @@ class TestShipField(TestCase): self.assertEqual(ship_field.ship_direction, 1) def test_toggle_ship_direction(self): - #arrangement установка - # action действие - #assertion проверка + # arrangement установка ship_field = ShipField() + ship_field.set_ship_direction(0) + # action действие ship_field.toggle_ship_direction() + # assertion проверка self.assertEqual(ship_field.ship_direction, 1) + + ship_field.toggle_ship_direction() + self.assertEqual(ship_field.ship_direction, 0) + + def test_set_ship(self): + # arrangement установка + ship_field = ShipField() + ship_field.set_ship_size(4) + ship_field.set_ship_direction(1) + # action действие + ship_field.set_ship(5, 3) + # assertion проверка + self.assertEqual(ship_field.field[53].strip(), '1') + self.assertEqual(ship_field.field[54].strip(), '1') + self.assertEqual(ship_field.field[55].strip(), '1') + self.assertEqual(ship_field.field[56].strip(), '1') + + def test_set_ship_size4_vertical_outofrange(self): + # arrangement установка + ship_field = ShipField() + ship_field.set_ship_size(4) + ship_field.set_ship_direction(0) + old_field_string = str.join(" ", ship_field.field) + # action действие + ship_field.set_ship(7, 3) + # assertion проверка + new_field_string = str.join(" ", ship_field.field) + self.assertEqual(new_field_string, old_field_string) \ No newline at end of file