Как решить проблему зависимости между двумя функциями? ⇐ Python

Программы на Python
Anonymous
Как решить проблему зависимости между двумя функциями?

Сообщение Anonymous »

В настоящее время я пытаюсь создать многомерную игру «крестики-ноли» в pygame, в которой каждая коробка содержит меньшую коробку 3x3, а шаблон продолжается (до 3 измерений). Чтобы сохранить метку каждого поля разной степени («x», «O» или «Нет»), я создал словарь для каждого измерения в форме {(top_left_pos, Bottom_right_pos): mark}. Моя проблема возникает в моей логике проверки.
функция get_marks_in_box() принимает позицию выбранной ячейки, желаемую степень box_grade (1 для наименьшего размера 3x3, 2 для большего размера 3x3, состоящего из 3x3 и т. д.) и соответствующий блочный словарь. затем он возвращает вложенный цикл 3x3 — отметки — с отметками, полученными из словаря блоков.
Во-вторых, функция box_completed() принимает позицию ячейки, по которой щелкнули, размерность игры (1 для 3x3, 2 для 9x9, 3 для 27x27), желаемую степень блока, отметки из функции get_marks_in_box() и соответствующий словарь блоков. с помощью этой информации он проверяет, заполнен ли этот блок (имеет 3 подряд), и обновляет соответствующий словарь блоков, чтобы его можно было пометить соответствующим образом.
Моя проблема в том, что get_marks_in_box () требует обновления box_dict, что делается в функции box_completed. и моя функция box_completed требует оценок, которые вычисляются в функции get_marks_in_box_function. ниже приведены две функции. Я относительно новичок в программировании, поэтому понимаю, что может быть несколько (потенциально много) неэффективностей и неточностей. буду очень признателен за любую помощь в рефакторинге моего кода. заранее спасибо.

Код: Выделить всё

def get_marks_in_box(self, coords, box_deg, box_dict):
N = len(coords)

box_pos = self.coords_to_row_col(coords, N, box_deg)
tl_pos = box_pos[0]

marks = [[None for _ in range(3)] for _ in range(3)]
for i in range(3):
for j in range(3):
# Calculate the coordinates of the current sub-box
sub_tl_pos = (
(tl_pos[0] + i * 3 ** (box_deg - 1)),
(tl_pos[1] + j * 3 ** (box_deg - 1)),
)
sub_br_pos = (
(sub_tl_pos[0] + 3 ** (box_deg - 1) - 1),
(sub_tl_pos[1] + 3 ** (box_deg - 1) - 1),
)

# Create a key for this sub-box (degree + its coordinates)
box_key = (sub_tl_pos, sub_br_pos)

self.box_completed(coords, N, 2, marks)

marks[i][j] = box_dict[box_key]

return marks

Код: Выделить всё

def box_completed(self, coords, N, box_deg, marks, box_dict):
# Check rows and columns for a win
for i in range(3):
# horizontal
if marks[i][0] == marks[i][1] == marks[i][2] and marks[i][0] != None:
box_pos = self.coords_to_row_col(coords, N, box_deg)
box_dict[box_pos] = marks[i][0]
# vertical
if marks[0][i] == marks[1][i] == marks[2][i] and marks[0][i] != None:
box_pos = self.coords_to_row_col(coords, N, box_deg)
box_dict[box_pos] = marks[0][i]

# diagonal
if marks[2][0] == marks[1][1] == marks[0][2] and marks[2][0] != None:
box_pos = self.coords_to_row_col(coords, N, box_deg)
box_dict[box_pos] = marks[2][0]
if marks[0][0] == marks[1][1] == marks[2][2] and marks[0][0] != None:
box_pos = self.coords_to_row_col(coords, N, box_deg)
box_dict[box_pos] = marks[0][0]
ссылка на полный код, если необходимо: https://drive.google.com/file/d/1xxzltk ... sp=sharing

Подробнее здесь: https://stackoverflow.com/questions/790 ... -functions

Вернуться в «Python»