Задача решена, но есть некоторые улучшения (ну как мне кажется):
- Доска перерисована, у неё теперь есть визуально различимые клетки и обозначения с двух сторон
- Появилась человеческое обозначение клеток доски вместо индексов массива (для возврата к прежнему обозначению нужно выставить свойство chessNotation у ChessBoard в false)
- Появилась шахматная нотация ходов, теперь вместо команд хода в виде "move 1 4 3 4" можно просто ввести "e2e4". При этом старая запись также работает
- Вместо того, чтобы руками водить все ходы, можно передать их в командной строке списох ходов через пробел, но, правда, только в шахматной нотации
- Поскольку не всегда удобно вводить ходы даже в командной строке, можно первым параметром указать путь к файлу, где эти ходы записаны по одному на строку. В любом варианте
- Вместо ошибки "Передвижение не удалось" выводится подробное описание с причиной, почему именно ход не удался
- Помиио указанных правил в задании, реализованы все правила, которые я мог вспомнить, типа возможности прикрыть короля, пешка может стать ферзём и прочее
- Ну и в качестве баловства, можно изменить размер доски. Фигуры на новые места нужно расставить самостоятельно в функции buildBoard, пару коней там добавить или дополнительных ферзей :)
Но также есть и минусы:
- В связи с тем, что я без понятия как писать юнит тесты, поэтому тестировал вручную, так что возможны ошибки, которые руками выявить не удалось. Попробовал сделать тест функции replaceChessNotation (replaceChessNotationTest), но чую, что это колхоз.
- Хотел сделать запись ходов партии, но потом подумал, что никому это не нужно, задание и так подзатянулось, так что делать не стал. Но мог, чессное слово, просто вот такая я ленивая жопа.