diff --git a/HNS/Excercises/ShipCraft/.idea/ShipCraft.iml b/HNS/Excercises/ShipCraft/.idea/ShipCraft.iml index 6209b69..aee9ef2 100644 --- a/HNS/Excercises/ShipCraft/.idea/ShipCraft.iml +++ b/HNS/Excercises/ShipCraft/.idea/ShipCraft.iml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/HNS/Excercises/ShipCraft/.idea/misc.xml b/HNS/Excercises/ShipCraft/.idea/misc.xml index b16dd28..a971a2c 100644 --- a/HNS/Excercises/ShipCraft/.idea/misc.xml +++ b/HNS/Excercises/ShipCraft/.idea/misc.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/HNS/Excercises/ShipCraft/main.py b/HNS/Excercises/ShipCraft/main.py index bce8aad..2956215 100644 --- a/HNS/Excercises/ShipCraft/main.py +++ b/HNS/Excercises/ShipCraft/main.py @@ -5,8 +5,8 @@ import math buttons = [] field_size = 10 -ship_size = 4 -ship_direction = 0 +ship_size = 3 +ship_direction = 1 empty_field = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', @@ -117,49 +117,56 @@ def check_possible(field, row, col): # в противном случае - False if ship_direction == 0: + # Здесь мы знаем, что корабль помещается на поле. if field_size - row >= ship_size: - if check_blocked(field, row, col): - # Здесь мы знаем, что корабль помещается на поле. # Теперь нужно проверить, не заблокировано ли какое-то из полей, - # на которые мы хотим поставить корабль. - # Для этого, всего поля, на которые мы его поставили бы исходя из координат row, col - # нужно проверить с помощью вызова метода check_blocked(...) - return True + for i in range(row, row + ship_size): + if check_blocked(field, row, col): + return True if ship_direction == 1: if field_size - col >= ship_size: if check_blocked(field, row, col): - # Теперь нужно проверить, не заблокировано ли какое-то из полей, - # на которые мы хотим поставить корабль. - # Для этого, всего поля, на которые мы его поставили бы исходя из координат row, col - # нужно проверить с помощью вызова метода check_blocked(...) - return True - + for i in range(col, col + ship_size): + if check_blocked(field, row, col): + return True return False def check_blocked(field, row, col): # Функция возвращает True, если все клетки вокруг клетки с координатами row, col # либо находятся за пределами поля, либо в них нет корабля/они пустые - index = row * 10 + col - if abs(row) > field_size + 1 or abs(col) > field_size + 1: - return True - elif (field[index]).strip() == "": - return True - # Во всех других случаях, функция возвращает False - else: - return False + 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 window = Tk() window.title("Ship Craft!") window.geometry('450x410') -# set_ship(1, 1, 4, 1) -# set_ship(0, 6, 3, 0) -# set_ship(9, 9, 1, 0) -# set_ship(0, 0, 1, 0) -# set_ship(9, 0, 1, 0) -# set_ship(9, 2, 4, 1) -# draw_field(window, my_field) +set_ship(1, 1, 4, 1) +set_ship(0, 6, 3, 0) +set_ship(7, 3, 1, 0) +draw_field(window, my_field) # window.mainloop() -print(check_possible(my_field, 0, 0)) + +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("********************************************************************") + + +for r in range(0, field_size): + possible_string = "" + impossible_string = "" + for c in range(0, field_size): + possible_string += str(check_possible(my_field, r, c))[0] + ", " + impossible_string += my_field[r * field_size + c] + ', ' + print(possible_string[:-2] + ' ' + impossible_string[:-2]) \ No newline at end of file