diff --git a/HNS/Excercises/ShipCraft/.idea/.name b/HNS/Excercises/ShipCraft/.idea/.name index 11a5d8e..fc75dea 100644 --- a/HNS/Excercises/ShipCraft/.idea/.name +++ b/HNS/Excercises/ShipCraft/.idea/.name @@ -1 +1 @@ -main.py \ No newline at end of file +ShipField.py \ No newline at end of file diff --git a/HNS/Excercises/ShipCraft/ShipField.py b/HNS/Excercises/ShipCraft/ShipField.py index e509a47..56472b3 100644 --- a/HNS/Excercises/ShipCraft/ShipField.py +++ b/HNS/Excercises/ShipCraft/ShipField.py @@ -2,7 +2,6 @@ from main import ShootResult class ShipField: - field = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', @@ -55,3 +54,65 @@ class ShipField: return ShootResult.DAMAGED else: return ShootResult.UNDEFINED + + def check_possible(self, row, col, ship_size, ship_direction): + # Функция должна возвращать True, если можно поставить сюда корабль, + # в противном случае - False + + if self.ship_direction == 0: + # Здесь мы знаем, что корабль помещается на поле. + if self.field_size - row >= self.ship_size: + # Теперь нужно проверить, не заблокировано ли какое-то из полей, + for r in range(row, row + self.ship_size): + if not self.check_blocked(self, r, col): + return False + return True + + if ship_direction == 1: + if self.field_size - col >= self.ship_size: + for c in range(col, col + self.ship_size): + if not self.check_blocked(self, row, c): + return False + return True + + return False + + def check_blocked(self, row, col): + # Функция возвращает True, если все клетки вокруг клетки с координатами row, col + # либо находятся за пределами поля, либо в них нет корабля/они пустые + for r in range(row - 1, row + 2): + for c in range(col - 1, col + 2): + if 0 <= r < self.field_size and 0 <= c < self.field_size: + cell = (self.field[r * self.field_size + c]).strip() + if cell != '' and cell != 'p': + return False + return True + + def set_ship_size(self, value): + if value.isnumeric(): + number = int(value) + if 1 <= number <= 4: + self.ship_size = number + + def set_ship_direction(self, value): + if value.isnumeric() == 0 or value.isnumeric() == 1: + self.ship_direction = value + + def toggle_field_mode(self): + if self.field_mode == 0: + self.field_mode = 1 + else: + self.field_mode = 0 + + def print_field(self): + for r in range(0, self.field_size): + blocked_string = "" + ship_string = "" + for c in range(0, self.field_size): + blocked_string += str(self.check_blocked(self, r, c))[0] + ", " + ship_string += self.field[r * self.field_size + c] + ', ' + print(blocked_string[:-2] + ' ' + ship_string[:-2]) + print("********************************************************************") + + + \ No newline at end of file diff --git a/HNS/Excercises/ShipCraft/Test ShipCraft.py b/HNS/Excercises/ShipCraft/Test ShipCraft.py new file mode 100644 index 0000000..25b1d31 --- /dev/null +++ b/HNS/Excercises/ShipCraft/Test ShipCraft.py @@ -0,0 +1,8 @@ +from main import ShootResult +from ShipField import ShipField + +ship_field = ShipField() +ship_field.set_ship_size(3) +ship_field.set_ship_direction(0) +ship_field.set_ship(1, 1) +ship_field.print_field() \ No newline at end of file diff --git a/HNS/Excercises/ShipCraft/__pycache__/main.cpython-311.pyc b/HNS/Excercises/ShipCraft/__pycache__/main.cpython-311.pyc new file mode 100644 index 0000000..0e342ec Binary files /dev/null and b/HNS/Excercises/ShipCraft/__pycache__/main.cpython-311.pyc differ