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 8880019..46d96c6 100644 Binary files a/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipField.cpython-311.pyc and b/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipField.cpython-311.pyc differ diff --git a/HNS/Excercises/ShipCraft/Переделка/__pycache__/test_ShipField.cpython-311.pyc b/HNS/Excercises/ShipCraft/Переделка/__pycache__/test_ShipField.cpython-311.pyc index 1ea9f73..caf4c6f 100644 Binary files a/HNS/Excercises/ShipCraft/Переделка/__pycache__/test_ShipField.cpython-311.pyc and b/HNS/Excercises/ShipCraft/Переделка/__pycache__/test_ShipField.cpython-311.pyc differ 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