From 0210d7f31e313e969bb31eea6ea8abccb870fc1b Mon Sep 17 00:00:00 2001 From: ehermakov Date: Sun, 11 Feb 2024 21:01:06 +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=BF=D0=B5=D1=80=D0=B2=D1=8B=D0=B9=20=D0=B2=D0=B0?= =?UTF-8?q?=D1=80=D0=B8=D0=B0=D0=BD=D1=82=20=D0=B4=D0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HNS/Excercises/ShipCraft/.idea/.name | 2 +- HNS/Excercises/ShipCraft/ShipField.py | 63 +++++++++++++++++- HNS/Excercises/ShipCraft/Test ShipCraft.py | 8 +++ .../__pycache__/main.cpython-311.pyc | Bin 0 -> 11604 bytes 4 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 HNS/Excercises/ShipCraft/Test ShipCraft.py create mode 100644 HNS/Excercises/ShipCraft/__pycache__/main.cpython-311.pyc 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 0000000000000000000000000000000000000000..0e342ecbb505739bf56eba04a8d2890f53c1009c GIT binary patch literal 11604 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 WJEO8^HTJARuZ@74sZW^-jQ<8`JCV2m literal 0 HcmV?d00001