From f6b7bf03546650b59d2cc88dec47a011aa0fb950 Mon Sep 17 00:00:00 2001 From: Artur Savitskiy Date: Mon, 27 Nov 2023 19:16:07 +0100 Subject: [PATCH 1/2] Add some features --- HNC/Exercises/Ship_Battle/main.py | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/HNC/Exercises/Ship_Battle/main.py b/HNC/Exercises/Ship_Battle/main.py index c0aa5d8..16a7c45 100644 --- a/HNC/Exercises/Ship_Battle/main.py +++ b/HNC/Exercises/Ship_Battle/main.py @@ -2,6 +2,8 @@ from tkinter import * from enum import Enum field_size = 10 +ship_size = 4 +ship_direction = 0 buttons = [] @@ -101,7 +103,7 @@ def check_possible(field, row, col): # Здесь мы знаем, что корабль помещается на поле. # Теперь нужно проверить, не заблокировано ли какое-то из полей, # на которые мы хотим поставить корабль. - # Для этого, всего поля, на которые мы его поставили бы исходя из координат row, col + # Для этого, все поля, на которые мы его поставили бы исходя из координат row, col # нужно проверить с помощью вызова метода check_blocked(...) return True @@ -110,7 +112,7 @@ def check_possible(field, row, col): # Здесь мы знаем, что корабль помещается на поле. # Теперь нужно проверить, не заблокировано ли какое-то из полей, # на которые мы хотим поставить корабль. - # Для этого, всего поля, на которые мы его поставили бы исходя из координат row, col + # Для этого, все поля, на которые мы его поставили бы исходя из координат row, col # нужно проверить с помощью вызова метода check_blocked(...) return True @@ -121,7 +123,13 @@ def check_blocked(field, row, col): # Функция возвращает True, если все клетки вокруг клетки с координатами row, col # либо находятся за пределами поля, либо в них нет корабля/они пустые # Во всех других случаях, функция возвращает False - pass + for r in range(row - 1, row + 2): + for c in range(col - 1, col + 2): + if 0 < r < field_size and 0 < c < field_size: + if (field[r * field_size + c]).strip() != '': + return False + + return True def button_click(field, row, col): @@ -129,7 +137,6 @@ def button_click(field, row, col): colorize(field, buttons) - window = Tk() window.title("Ship Craft!") window.geometry('450x410') @@ -141,4 +148,14 @@ set_ship(7, 3, 1, 0) draw_field(window, my_field) colorize(my_field, buttons) -window.mainloop() \ No newline at end of file +#window.mainloop() + +for r in range(0, field_size): + #blocked_string = '' + ship_string = '' + for c in range(0, field_size): + #blocked_string += str(check_blocked(my_field, r, c))[0] + ', ' + ship_string += my_field[r * field_size + c] + ', ' + + #print(blocked_string[:-2] + ' ' + ship_string[:-2]) + print(ship_string[:-2]) From d51d6b9fd1009b5d2eec1276597e4b6e34e005b5 Mon Sep 17 00:00:00 2001 From: Artur Savitskiy Date: Mon, 29 Apr 2024 19:44:54 +0200 Subject: [PATCH 2/2] Lesson results commit --- HNC/Exercises/Ship_Battle/ShipField.py | 10 ++-------- HNC/Exercises/Ship_Battle/main.py | 8 ++++---- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/HNC/Exercises/Ship_Battle/ShipField.py b/HNC/Exercises/Ship_Battle/ShipField.py index 3045881..5ab3b54 100644 --- a/HNC/Exercises/Ship_Battle/ShipField.py +++ b/HNC/Exercises/Ship_Battle/ShipField.py @@ -24,7 +24,6 @@ class ShipField: self.ship_size = 4 self.ship_direction = ShipDirection.VERTICAL - def from_json(self, obj): self.field = obj['field'] self.ships = obj['ships'] @@ -32,8 +31,7 @@ class ShipField: self.field_mode = obj['field_mode'] self.ship_size = obj['ship_size'] self.ship_direction = obj['ship_direction'] - - + def __getitem__(self, item): if item is None: return None @@ -46,7 +44,6 @@ class ShipField: return None - def action(self, row, col): self.clear_marker() @@ -60,7 +57,6 @@ class ShipField: elif self.field_mode == ShipMode.SHOOT: self.shoot(row, col) - def target(self, row, col): self.clear_marker() @@ -79,10 +75,8 @@ class ShipField: self.field[row * self.field_size + c] = "p" else: self.field[row * self.field_size + c] = "r" - - else: - self.field[row * self.field_size + col] = "+" + self.field[row * self.field_size + col] += "+" def clear_marker(self): for i in range(0, len(self.field)): diff --git a/HNC/Exercises/Ship_Battle/main.py b/HNC/Exercises/Ship_Battle/main.py index a5c85ac..e8232f0 100644 --- a/HNC/Exercises/Ship_Battle/main.py +++ b/HNC/Exercises/Ship_Battle/main.py @@ -33,10 +33,11 @@ def colorize(field, buttons): bg = 'black' if field.field[i] == "p": bg = 'blue' + if field.field[i] == "r": + bg = 'red' if "+" in field.field[i]: bg = 'orange' - if "r" in field[i]: - bg = 'red' + buttons[i].configure(bg=bg) @@ -111,5 +112,4 @@ loadbutton = Button(window, text='Load', width=20, height=2) loadbutton.bind('', loadbutton_click) loadbutton.grid(column=5, row=11, columnspan=4) - -window.mainloop() \ No newline at end of file +window.mainloop()