diff --git a/HNS/Excercises/ShipCraft/Переделка/.idea/.gitignore b/HNS/Excercises/ShipCraft/Переделка/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/HNS/Excercises/ShipCraft/Переделка/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/HNS/Excercises/ShipCraft/Переделка/.idea/modules.xml b/HNS/Excercises/ShipCraft/Переделка/.idea/modules.xml
new file mode 100644
index 0000000..d1a7964
--- /dev/null
+++ b/HNS/Excercises/ShipCraft/Переделка/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HNS/Excercises/ShipCraft/Переделка/.idea/workspace.xml b/HNS/Excercises/ShipCraft/Переделка/.idea/workspace.xml
index 2ebfb14..4cd2d83 100644
--- a/HNS/Excercises/ShipCraft/Переделка/.idea/workspace.xml
+++ b/HNS/Excercises/ShipCraft/Переделка/.idea/workspace.xml
@@ -4,7 +4,7 @@
-
+
@@ -27,6 +27,9 @@
+
+
+
{
"associatedIndex": 0
}
@@ -35,20 +38,20 @@
- {
- "keyToString": {
- "Python.ShipField.executor": "Run",
- "Python.main (1).executor": "Run",
- "Python.main.executor": "Debug",
- "RunOnceActivity.ShowReadmeOnStart": "true",
- "git-widget-placeholder": "main",
- "last_opened_file_path": "C:/Users/Eduardo/Documents/Программирование с Артуром/HNS/hnc-eduard/HNS/Excercises/ShipCraft/Переделка"
+
+}]]>
-
@@ -70,7 +73,6 @@
-
@@ -92,7 +94,6 @@
-
@@ -114,7 +115,6 @@
-
@@ -161,12 +161,16 @@
+
+
+
+
file://$PROJECT_DIR$/main.py
- 139
+ 136
diff --git a/HNS/Excercises/ShipCraft/Переделка/.idea/Переделка.iml b/HNS/Excercises/ShipCraft/Переделка/.idea/Переделка.iml
new file mode 100644
index 0000000..d0876a7
--- /dev/null
+++ b/HNS/Excercises/ShipCraft/Переделка/.idea/Переделка.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HNS/Excercises/ShipCraft/Переделка/3.json b/HNS/Excercises/ShipCraft/Переделка/3.json
new file mode 100644
index 0000000..9eb1a04
--- /dev/null
+++ b/HNS/Excercises/ShipCraft/Переделка/3.json
@@ -0,0 +1 @@
+{"shipField": {"field": [" ", " ", " ", "", " ", " ", " ", "", "", "1", "", "1", "1", "", "1", "1", " ", "", "", "1", "", "", "", "", "", "", " ", "", "", "1", "", "", "", "", "1", "1", " ", "", "", "1", "1", "1", "1", "", "", "", " ", " ", " ", "", "", "", "", "", "", "1", "1", "1", " ", " ", "", "", "", "", "", " ", " ", " ", " ", " ", "", "1", "", "1", "", "1", " ", "", "1", " ", " ", "", "", "", "", "", " ", " ", " ", " ", " ", " ", " ", "", "", "", "", " ", " ", " "], "ships": [], "field_size": 10, "field_mode": "PUT", "ship_size": 4, "ship_direction": "VERTICAL"}}
\ No newline at end of file
diff --git a/HNS/Excercises/ShipCraft/Переделка/ShipField.py b/HNS/Excercises/ShipCraft/Переделка/ShipField.py
index 459ba91..d4b0519 100644
--- a/HNS/Excercises/ShipCraft/Переделка/ShipField.py
+++ b/HNS/Excercises/ShipCraft/Переделка/ShipField.py
@@ -6,6 +6,7 @@ from ShipMode import ShipMode
class ShipField:
+ field_size = 10
def __init__(self):
self.field = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
@@ -20,7 +21,6 @@ class ShipField:
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
self.ships = [4, 3, 3, 2, 2, 2, 1, 1, 1, 1]
- self.field_size = 10
self.field_mode = ShipMode.PUT
self.ship_size = 4
self.ship_direction = ShipDirection.VERTICAL
@@ -28,7 +28,7 @@ class ShipField:
def from_json(self, obj):
self.field = obj['field']
self.ships = obj['ships']
- self.field_size = obj['field_size']
+ ShipField.field_size = obj['field_size']
self.field_mode = ShipMode.from_string(obj['field_mode'])
self.ship_size = obj['ship_size']
self.ship_direction = ShipDirection.from_string(obj['ship_direction'])
@@ -66,18 +66,18 @@ class ShipField:
if self.ship_direction == ShipDirection.VERTICAL:
for r in range(row, row + self.ship_size):
if self.ship_size in self.ships:
- self.field[r * self.field_size + col] = "p"
+ self.field[r * ShipField.field_size + col] = "p"
else:
- self.field[r * self.field_size + col] = "r"
+ self.field[r * ShipField.field_size + col] = "r"
if self.ship_direction == ShipDirection.HORIZONTAL:
for c in range(col, col + self.ship_size):
if self.ship_size in self.ships:
- self.field[row * self.field_size + c] = "p"
+ self.field[row * ShipField.field_size + c] = "p"
else:
- self.field[row * self.field_size + c] = "r"
+ self.field[row * ShipField.field_size + c] = "r"
else:
- self.field[row * self.field_size + col] += "+"
+ self.field[row * ShipField.field_size + col] += "+"
def clear_marker(self):
for i in range(0, len(self.field)):
@@ -88,22 +88,22 @@ class ShipField:
self.field[i] = self.field[i].replace("+", "")
def set_ship(self, row, col):
- if row < 0 or row > self.field_size:
+ if row < 0 or row > ShipField.field_size:
return
- if col < 0 or col > self.field_size:
+ if col < 0 or col > ShipField.field_size:
return
- index = row * self.field_size + col
+ index = row * ShipField.field_size + col
if self.ship_direction == ShipDirection.VERTICAL:
- if self.field_size - row < self.ship_size:
+ if ShipField.field_size - row < self.ship_size:
return
for r in range(row, row + self.ship_size):
- index = r * self.field_size + col
+ index = r * ShipField.field_size + col
self.field[index] = "1"
if self.ship_direction == ShipDirection.HORIZONTAL:
- if self.field_size - col < self.ship_size:
+ if ShipField.field_size - col < self.ship_size:
return
for c in range(col, col + self.ship_size):
- index = row * self.field_size + c
+ index = row * ShipField.field_size + c
self.field[index] = "1"
if self.ship_size in self.ships:
@@ -111,22 +111,22 @@ class ShipField:
self.print_field()
def get_ship(self, row, col):
- if row < 0 or row > self.field_size:
+ if row < 0 or row > ShipField.field_size:
return
- if col < 0 or col > self.field_size:
+ if col < 0 or col > ShipField.field_size:
return
- self.field[row * self.field_size + col] = ""
+ self.field[row * ShipField.field_size + col] = ""
ship_size = 1
ship_direction = ShipDirection.UNKNOWN
# проверим вертикаль
- for r in range(row + 1, self.field_size):
+ for r in range(row + 1, ShipField.field_size):
if self.check_ship(r, col):
ship_size += 1
ship_direction = ShipDirection.VERTICAL
- self.field[r * self.field_size + col] = ""
+ self.field[r * ShipField.field_size + col] = ""
else:
break
@@ -134,18 +134,18 @@ class ShipField:
if self.check_ship(r, col):
ship_size += 1
ship_direction = ShipDirection.VERTICAL
- self.field[row * self.field_size + col] = ""
+ self.field[row * ShipField.field_size + col] = ""
else:
break
if ship_direction == ShipDirection.UNKNOWN:
# проверим горизонталь
- for c in range(col + 1, self.field_size):
+ for c in range(col + 1, ShipField.field_size):
if self.check_ship(row, c):
ship_size += 1
ship_direction = ShipDirection.HORIZONTAL
- self.field[row * self.field_size + c] = ""
+ self.field[row * ShipField.field_size + c] = ""
else:
break
@@ -153,7 +153,7 @@ class ShipField:
if self.check_ship(row, c):
ship_size += 1
ship_direction = ShipDirection.HORIZONTAL
- self.field[row * self.field_size + c] = ""
+ self.field[row * ShipField.field_size + c] = ""
else:
break
self.set_ship_direction(ship_direction)
@@ -161,11 +161,11 @@ class ShipField:
self.ships.append(ship_size)
def shoot(self, row, col):
- if row < 0 or row > self.field_size - 1:
+ if row < 0 or row > ShipField.field_size - 1:
return ShootResult.UNDEFINED
- if col < 0 or col > self.field_size - 1:
+ if col < 0 or col > ShipField.field_size - 1:
return ShootResult.UNDEFINED
- index = row * self.field_size + col
+ index = row * ShipField.field_size + col
if (self.field[index]).strip() == "":
self.field[index] = "0"
return ShootResult.EMPTY
@@ -178,14 +178,14 @@ class ShipField:
def check_ship(self, row, col):
# функция должна возвражать тру, если в заданной клетке есть корабль
# в противном случае фолс
- return self.field[row * self.field_size + col].strip() == "1"
+ return self.field[row * ShipField.field_size + col].strip() == "1"
def check_possible(self, row, col):
# Функция должна возвращать True, если можно поставить сюда корабль,
# в противном случае - False
if self.ship_direction == ShipDirection.VERTICAL:
# Здесь мы знаем, что корабль помещается на поле.
- if self.field_size - row >= self.ship_size:
+ if ShipField.field_size - row >= self.ship_size:
# Теперь нужно проверить, не заблокировано ли какое-то из полей,
for r in range(row, row + self.ship_size):
if not self.check_blocked(r, col):
@@ -193,7 +193,7 @@ class ShipField:
return True
if self.ship_direction == ShipDirection.HORIZONTAL:
- if self.field_size - col >= self.ship_size:
+ if ShipField.field_size - col >= self.ship_size:
for c in range(col, col + self.ship_size):
if not self.check_blocked(row, c):
return False
@@ -206,8 +206,8 @@ class ShipField:
# либо находятся за пределами поля, либо в них нет корабля/они пустые
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 0 <= r < ShipField.field_size and 0 <= c < ShipField.field_size:
+ cell = (self.field[r * ShipField.field_size + c]).strip()
if cell != '' and cell != 'p':
return False
return True
@@ -246,12 +246,12 @@ class ShipField:
def print_field(self):
print(self.ships)
- for r in range(0, self.field_size):
+ for r in range(0, ShipField.field_size):
blocked_string = ""
ship_string = ""
- for c in range(0, self.field_size):
+ for c in range(0, ShipField.field_size):
blocked_string += str(self.check_blocked(r, c))[0] + ", "
- ship_string += self.field[r * self.field_size + c] + ', '
+ ship_string += self.field[r * ShipField.field_size + c] + ', '
print(ship_string[:-2])
# print(blocked_string[:-2] + ' ' + ship_string[:-2])
print("********************************************************************")
diff --git a/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipDirection.cpython-311.pyc b/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipDirection.cpython-311.pyc
index 0747ff5..1b0ea2f 100644
Binary files a/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipDirection.cpython-311.pyc and b/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipDirection.cpython-311.pyc differ
diff --git a/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipField.cpython-311.pyc b/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipField.cpython-311.pyc
index 43800db..5a945b9 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__/ShipMode.cpython-311.pyc b/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipMode.cpython-311.pyc
index 78fa41e..a3b69e1 100644
Binary files a/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipMode.cpython-311.pyc and b/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipMode.cpython-311.pyc differ
diff --git a/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipView.cpython-311.pyc b/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipView.cpython-311.pyc
index b010ba3..1f1f4c0 100644
Binary files a/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipView.cpython-311.pyc and b/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShipView.cpython-311.pyc differ
diff --git a/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShootResult.cpython-311.pyc b/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShootResult.cpython-311.pyc
index 59f8d04..0e00a70 100644
Binary files a/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShootResult.cpython-311.pyc and b/HNS/Excercises/ShipCraft/Переделка/__pycache__/ShootResult.cpython-311.pyc differ
diff --git a/HNS/Excercises/ShipCraft/Переделка/json4 b/HNS/Excercises/ShipCraft/Переделка/json4
new file mode 100644
index 0000000..ac72a75
--- /dev/null
+++ b/HNS/Excercises/ShipCraft/Переделка/json4
@@ -0,0 +1 @@
+{"shipField": {"field": [" ", " ", "1", " ", " ", " ", " ", " ", " ", "1", "1", " ", " ", " ", " ", "1", "1", "1", " ", " ", "", " ", "1", " ", " ", "", "", "", " ", " ", "", "", "1", " ", "", "", "", "", "", "", "", "", "1", " ", "", "1", "1", "1", "", " ", "", "", "1", " ", " ", "", "", "", " ", "", "", "", "", " ", "1", "", "", " ", " ", "", "", "", " ", " ", "1", "", "1", "1", " ", " ", "", "1", "1", " ", "", "", " ", " ", " ", " ", " ", " ", " ", " ", "", " ", " ", " ", "1", " "], "ships": [], "field_size": 10, "field_mode": "PUT", "ship_size": 1, "ship_direction": "VERTICAL"}}
\ No newline at end of file
diff --git a/HNS/Excercises/ShipCraft/Переделка/json4.json b/HNS/Excercises/ShipCraft/Переделка/json4.json
new file mode 100644
index 0000000..d27a688
--- /dev/null
+++ b/HNS/Excercises/ShipCraft/Переделка/json4.json
@@ -0,0 +1 @@
+{"shipField": {"field": ["1", "", "", "", " ", " ", "1", " ", "1", " ", "1", "", "", "", " ", " ", " ", " ", " ", " ", "1", "", "", "1", "", "", "1", " ", "", " ", "1", "", "", "1", "", "", "1", " ", "", " ", " ", " ", "", "1", "", "", "1", " ", "", " ", " ", "1", " ", "", "", " ", " ", " ", "1", "", " ", " ", " ", "", "", "", "", "", "", "", " ", "1", "", "1", "1", "", "", "", "", "", " ", "1", "", "", " ", " ", " ", "", "", "", " ", " ", " ", " ", " ", "", "1", "1", "", ""], "ships": [], "field_size": 10, "field_mode": "PUT", "ship_size": 1, "ship_direction": "VERTICAL"}}
\ No newline at end of file
diff --git a/HNS/Excercises/ShipCraft/Переделка/json5 b/HNS/Excercises/ShipCraft/Переделка/json5
new file mode 100644
index 0000000..d27a688
--- /dev/null
+++ b/HNS/Excercises/ShipCraft/Переделка/json5
@@ -0,0 +1 @@
+{"shipField": {"field": ["1", "", "", "", " ", " ", "1", " ", "1", " ", "1", "", "", "", " ", " ", " ", " ", " ", " ", "1", "", "", "1", "", "", "1", " ", "", " ", "1", "", "", "1", "", "", "1", " ", "", " ", " ", " ", "", "1", "", "", "1", " ", "", " ", " ", "1", " ", "", "", " ", " ", " ", "1", "", " ", " ", " ", "", "", "", "", "", "", "", " ", "1", "", "1", "1", "", "", "", "", "", " ", "1", "", "", " ", " ", " ", "", "", "", " ", " ", " ", " ", " ", "", "1", "1", "", ""], "ships": [], "field_size": 10, "field_mode": "PUT", "ship_size": 1, "ship_direction": "VERTICAL"}}
\ No newline at end of file
diff --git a/HNS/Excercises/ShipCraft/Переделка/json5.json b/HNS/Excercises/ShipCraft/Переделка/json5.json
new file mode 100644
index 0000000..ac72a75
--- /dev/null
+++ b/HNS/Excercises/ShipCraft/Переделка/json5.json
@@ -0,0 +1 @@
+{"shipField": {"field": [" ", " ", "1", " ", " ", " ", " ", " ", " ", "1", "1", " ", " ", " ", " ", "1", "1", "1", " ", " ", "", " ", "1", " ", " ", "", "", "", " ", " ", "", "", "1", " ", "", "", "", "", "", "", "", "", "1", " ", "", "1", "1", "1", "", " ", "", "", "1", " ", " ", "", "", "", " ", "", "", "", "", " ", "1", "", "", " ", " ", "", "", "", " ", " ", "1", "", "1", "1", " ", " ", "", "1", "1", " ", "", "", " ", " ", " ", " ", " ", " ", " ", " ", "", " ", " ", " ", "1", " "], "ships": [], "field_size": 10, "field_mode": "PUT", "ship_size": 1, "ship_direction": "VERTICAL"}}
\ No newline at end of file
diff --git a/HNS/Excercises/ShipCraft/Переделка/main.py b/HNS/Excercises/ShipCraft/Переделка/main.py
index 7844661..5cf8d83 100644
--- a/HNS/Excercises/ShipCraft/Переделка/main.py
+++ b/HNS/Excercises/ShipCraft/Переделка/main.py
@@ -11,15 +11,16 @@ active_view ={}
def create_view(window, col_offset=0, row_offset=0):
field = ShipField()
buttons = []
+ view = ShipView(field, buttons)
for r in range(0, field.field_size):
for c in range(0, field.field_size):
btn = Button(window, text='', width=5, height=2)
btn.grid(column=c + col_offset, row=r + row_offset)
- btn.bind('', lambda e, x=r, y=c: left_button_click(x, y))
- btn.bind('', right_button_click)
- btn.bind('', lambda e, x=r, y=c: button_enter(buttons, x, y))
+ btn.bind('', lambda e, x=r, y=c: left_button_click(view, x, y))
+ btn.bind('', lambda e: right_button_click(view))
+ btn.bind('', lambda e, x=r, y=c: button_enter(view, x, y))
buttons.append(btn)
- view = ShipView(field, buttons)
+
colorize(view)
return view
@@ -42,6 +43,8 @@ def colorize(view):
bg = 'red'
view.buttons[i].configure(bg=bg)
+ refresh_remaining_ships_label(view)
+
def keypress_handler(e):
global active_view
@@ -52,28 +55,22 @@ def keypress_handler(e):
active_view.ship_field.toggle_field_mode()
-def left_button_click(row, col):
+def left_button_click(view, row, col):
+ view.ship_field.action(row, col)
+ colorize(view)
+
+
+def right_button_click(view):
+ view.ship_field.toggle_ship_direction()
+ colorize(view)
+
+def button_enter(view, row, col):
global active_view
-
- active_view.ship_field.action(row, col)
- colorize(active_view)
- refresh_remaining_ships_label(active_view)
-
-
-def right_button_click(unused):
- global active_view
- active_view.ship_field.toggle_ship_direction()
-
-def button_enter(buttons, row, col):
- global active_view
-
- if buttons == my_view.buttons:
- active_view = my_view
+ active_view = view
+ if view == my_view:
enemy_view.ship_field.clear_marker()
my_view.ship_field.target(row, col)
-
- elif buttons == enemy_view.buttons:
- active_view = enemy_view
+ elif view == enemy_view:
my_view.ship_field.clear_marker()
enemy_view.ship_field.target(row, col)
@@ -115,13 +112,13 @@ window.bind_all('', keypress_handler)
start_column_my_field = 1
start_row_my_field = 1
-start_column_enemy_field = start_column_my_field + 10 + 1
+start_column_enemy_field = start_column_my_field + ShipField.field_size + 1
start_row_enemy_field = start_row_my_field
-col_vertical_separator = start_column_my_field + 10
-row_horizontal_separator = start_row_my_field + 10
+col_vertical_separator = start_column_my_field + ShipField.field_size
+row_horizontal_separator = start_row_my_field + ShipField.field_size
-load_button_row = start_row_my_field + 10 + 1
+load_button_row = start_row_my_field + ShipField.field_size + 1
my_view = create_view(window, start_column_my_field, start_row_my_field)
enemy_view = create_view(window, start_column_enemy_field, start_row_enemy_field)