Комментарии:
Замудрено слишком )) Можно проще. Без барьерных ячеек, без предварительного расчета окружения, всего двумя методами.
demining() это аналог click()
self.allfields это self.buttons ну и т.д.
def open_field(self, field: MineField):
fields_around = []
count = 0
for row in range(max(field.row-1, 0), min(field.row+2, self.ROWS)):
for col in range(max(field.col-1, 0), min(field.col+2, self.COLS)):
fld = self.allfields[row][col]
if fld.mine:
count += 1
elif not fld.opened:
fields_around.append(fld)
if count:
field.config(text=count, disabledforeground=self.FIELD_COLORS[count])
else:
for fld in fields_around:
self.demining(fld)
def demining(self, clicked_field: MineField):
clicked_field.opened = True
if clicked_field.mine:
clicked_field.config(text="*", bg="red", disabledforeground="black")
else:
self.open_field(clicked_field)
clicked_field.config(state=tk.DISABLED, relief=tk.SUNKEN)
непонятно почему в видео говориться об очереди и что берётся первый элемент, а по факту используется pop(), который берет последний элемент.
почему бы для очереди не использовать deque()?
Можете порекомендовать какую-нибудь книжку, курс, ресурс для изучения алгоритмов с применением питона?
Ответитьу меня после нажатия на пустую клетку программа не отвечает (зависает) что делать?
ОтветитьВи дуже зрозуміло пояснюєте. Все інтуітивно сприймається. Коли роблю павзу для набору того, що Ви вже описали, то стає зрозумілим, що зараз зміниться.
Красно дякую за додаткові завдання.
Почему-то не работает, хоть и код вроде такой же. Открывается только одна клетка, не понимаю в чём проблема, могу скинуть код
ОтветитьСпасибо!👍👍👍
ОтветитьСупер. Спосибо за разбор.
Ответитьнесколько вопросов: 1. почему не открываем диагональные кнопки, ведь там не может быть мин.
2. зачем столько дублирующего кода, ведь мы можем просто в функции click в случае если кнопка пуста, вызывать функцию click для всех граничащих не нажатых кнопок. в случае если кнопка пустая возникнет рекурсия, если нет, то она просто откроется.
clicked_button.is_open = True
for i in [-1,0,1]:
for j in [-1,0,1]:
if (i+clicked_button.x) in range(0,self.ROW) and (j+clicked_button.y) in range(0,self.COLUMNS):
if is not self.buttons[i+clicked_button.x][j+clicked_button.y].is_open:
self.click(self.buttons[i+clicked_button.x][j+clicked_button.y])
Супер, спасибо! А можно ссылку на задачки по алгоритму обхода в ширину?
ОтветитьСпасибо за подробный разбор. Круто объясняешь! Про данный метод все понял. Но не понятно как реализовано наследование в class MyButton(tk.Button). Если не сложно, запиши пожалуйста видео про это. Думаю многим будет это интересно
ОтветитьЛайк! Спс
ОтветитьПродолжай пожалуйста, это круто
ОтветитьЛучи добра за очередной урок !
Ответить