Мы продолжаем создание шахматных классов на языке C#, которые позволят проверять правила игры. На этом уроке мы создадим класс Moves(), который будет заниматься проверкой возможности хода.
Дата отправки отчёта:
25 марта 2018 г.
Задание выполнено: за
2 час. 7 мин.
Чему научился:
Создали новый класс Moves, добавили булевую функцию CanMove (может ли ходить эта фигура) с 2 подфункциями (CanMoveFrom - "с клетки" и CanMoveTo - "на клетку"), а также добавили статический класс FigureMethods, определяющий цвет фигуры.
Что было сложным:
Не удалось найти ошибку в классе Moves, но не очень нравится строка fm.figure.GetColor() != board.moveColor. Возможно, недостаточно определить то, что цвет фигуры на клетке, с которой ходим, должен не совпадать с цветом клетки, на которую ходим. Возможно, нужно отдельно проверять на клетке, куда идем, пустую клетку и чужую фигуру. Побродил между классами Board, Color, FigureMethods и Moves и их функциями определения цвета фигуры и заблудился. Открыл функцию "Can_move_to" на "Микрошахматах", но там проверка реализована иначе. Но в них идут отдельные проверки на пустую клетку и на различие значений функций get_color и move_color.
Я не в курсе данного кода. В логике нужно смотреть. Шаг игрока (смена позиции фигуры) состоит из чего: 1) выбор фигуры (тут же наверное и реализуется выбор цвета и сама фигура), 2) установить возможные варианты перемещения для данной фигуры (тут же проверка выход за границы игрового поля/массива), 3) а потом выбор действий при условии пустая/занятая клетка (союзная фигурв или нет тоже по цвету определить вариант действий и варианты действий)
При цвете можно использовать тернарный оператор для определения белые/черные и определения последующих действий. Не уверен, что мой комментарий поможет, но может хоть подтолкнет в верное направление (хотя варианты реализации могут быть различными и представлятся для каждого по разному).
Научился: Еще раз вспомнила про метода расширения, поняла принцип проверок.
Ошибка же при движении на точку - не цвет доски нужно сравнивать, а цвет фигуры в этом месте на доске, верно?
Научился: 1.Create class Moves Question: Why this class is plural?
2.Create functions CanMoveFrom(), CanMoveTo()
3.Create extension class FigureMethods: again plural?
4.Create method GetColor()
5.Error? -> CanMoveFrom()???, CanMoveTo()??? Not working properly