/// <summary> /// Обработка механизма взаимной установки/снятия признака ошибки для двух ячеек /// </summary> /// <param name="testingCell">Взаимная ячейка для обработки из взаимного состояния</param> /// <param name="thisIsError">true, если эта ячейка и проверяемая взаимно ошибочны; false, если нет.</param> private void SetError(CSudokuCell testingCell, bool thisIsError) { // Определение индекса взаимной ячейки int testingIndex = testingCell.Index; if (thisIsError) { // Ячейки взаимно ошибочны if (!errorCellList.Contains(testingIndex)) { // Взаимное добавление ячеек в ошибочные списки errorCellList.Add(testingIndex); testingCell.errorCellList.Add(Index); } } else { // Ячейки взаимно НЕ ошибочны if (errorCellList.Contains(testingIndex)) { // Взаимное убирание из ошибочных списков errorCellList.Remove(testingIndex); testingCell.errorCellList.Remove(Index); } } // Проверка наличия ошибки во взаимной ячейке testingCell.CalculateErrorField(); }
/// <summary> /// Проверка этой ячейки на наличие ошибки по отношению к другой ячейке /// </summary> /// <param name="testingCell">Та ячейка, ошибочность по отношению к которой нужно установить</param> public void TestError(CSudokuCell testingCell) { if (Value == 0) { // Пустая ячейка не может быть ошибочной return; } if (0 == testingCell.Value) { // В проверяемой ячейке стёрто значение. Уберём её из списка ошибочных, если к текущей ячейке относилась ошибка, вызванная предыдущим значением в проверяемой ячейке SetError(testingCell, false); } else { // Ошибка - когда значения в ячейках одинаковые SetError(testingCell, Value == testingCell.Value); } // Проверка наличия ошибки для этой ячейки. Наличие ошибки может быть вызвано НЕ ТОЛЬКО той ячейкой, по отношению к которой проводиласть проверка в этом методе, но и какой-либо другой. CalculateErrorField(); }