diff --git a/mod_oop/5.6_01_sea_battle.py b/mod_oop/5.6_01_sea_battle.py index 30ec0ba..a8b4c3f 100644 --- a/mod_oop/5.6_01_sea_battle.py +++ b/mod_oop/5.6_01_sea_battle.py @@ -55,13 +55,13 @@ True >>> Ship(5) Traceback (most recent call last): ... -ValueError: 5 is not a valid Ship.ShipSize +ValueError: 5 is not a valid ShipSize >>> Ship(1, 1)._tp, Ship(1, 2)._tp (1, 2) >>> Ship(1, 3)._tp Traceback (most recent call last): ... -ValueError: 3 is not a valid Ship.ShipOrientation +ValueError: 3 is not a valid ShipOrientation >>> s = Ship(1) >>> {s[0] == 1, len(s) == 1} {True} @@ -71,7 +71,7 @@ ValueError: 3 is not a valid Ship.ShipOrientation >>> s[0] = 4 Traceback (most recent call last): ... -ValueError: 4 is not a valid Ship.DeckStatus +ValueError: 4 is not a valid DeckStatus >>> s2 = Ship(2) >>> s2._cells = [1, 2] >>> s2._cells @@ -350,21 +350,24 @@ class NonNegativeIntField: setattr(instance, self.name, value) +class ShipSize(EnumOrdering): + ONE_DECK = 1 + TWO_DECKS = 2 + THREE_DECKS = 3 + FOUR_DECKS = 4 + + +class ShipOrientation(EnumOrdering): + HORIZONTAL = 1 + VERTICAL = 2 + + +class DeckStatus(EnumOrdering): + OK = 1 + DAMAGED = 2 + + class Ship: - class ShipSize(EnumOrdering): - ONE_DECK = 1 - TWO_DECKS = 2 - THREE_DECKS = 3 - FOUR_DECKS = 4 - - class ShipOrientation(EnumOrdering): - HORIZONTAL = 1 - VERTICAL = 2 - - class DeckStatus(EnumOrdering): - OK = 1 - DAMAGED = 2 - pole_size: int = 10 _length: int = IntEnumField(ShipSize) @@ -384,7 +387,7 @@ class Ship: cells: Optional[List[DeckStatus]] = None, ): self._length, self._tp, self._x, self._y = length, tp, x, y - self._cells = cells or [self.DeckStatus.OK] * self._length + self._cells = cells or [DeckStatus.OK] * self._length def __repr__(self): return f"{self.__class__.__name__}{(self._length, self._tp, self._x, self._y, self._cells)!r}" @@ -400,11 +403,11 @@ class Ship: @property def _is_move(self) -> bool: - return all(cell == self.DeckStatus.OK for cell in self) + return all(cell == DeckStatus.OK for cell in self) @property def is_alive(self) -> bool: - return any(cell == self.DeckStatus.OK for cell in self) + return any(cell == DeckStatus.OK for cell in self) def set_start_coords(self, x: int, y: int): self._x, self._y = x, y @@ -414,7 +417,7 @@ class Ship: @property def is_horizontal(self): - return self._tp == self.ShipOrientation.HORIZONTAL + return self._tp == ShipOrientation.HORIZONTAL def move(self, go: int): if self._is_move: @@ -486,7 +489,7 @@ class Ship: left, top, right, bottom = self.rect if left <= x < right and top <= y < bottom: a, b = ((y, top), (x, left))[self.is_horizontal] - self[a - b] = self.DeckStatus.DAMAGED + self[a - b] = DeckStatus.DAMAGED return True return False @@ -557,7 +560,7 @@ class GamePole: координаты в виде кортежей в формате (x, y) | (индекс столбца, индекс строки) """ free_places = [] - is_horizontal = tp == Ship.ShipOrientation.HORIZONTAL + is_horizontal = tp == ShipOrientation.HORIZONTAL pole_s = pole if not is_horizontal: pole_s = list(zip(*pole)) @@ -595,10 +598,10 @@ class GamePole: def init(self): self._ships.clear() pole = self.get_pole_list() - sizes = Ship.ShipSize.values()[::-1] + sizes = ShipSize.values()[::-1] for ship_size, ship_count in zip(sizes, range(1, len(sizes) + 1)): for _ in range(ship_count): - tp = random.choice(Ship.ShipOrientation.values()) + tp = random.choice(ShipOrientation.values()) self.place_new_ship(pole, ship_size, tp) def get_ships(self) -> List[Ship]: