На данном уроке мы начинаем создание шахматных классов на языке C#, которые позволят проверять правила игры. Для этого мы напишем библиотеку, которая сможет для любой шахматной позиции определить возможность любого хода.
Дата отправки отчёта:
6 мая 2018 г.
Задание выполнено: за
1 день 13 мин.
Чему научился:
Очевидно, понадобится ещё класс для взаимодействия по сети. В ChessRules добавить, собственно, проверку правил. Ещё я бы добавил историю всех ходов с автовоспроизведением и, возможно, подключить шахматный движок для одиночной игры :)
Пока всё просто. Но кроме вывода доски в допзадании я решил ещё сделать вывод фигуры по координатам и попробовать "оптимизировать" перевод строки fen в двумерный массив. И по возможности использую везде StringBuilder, чтобы снизить нагрузку на GarbageCollector;
Перевод строки fen в двумерный массив: char[,] board = new char[8, 8]; void FenParse(string fen) { StringBuilder figures = new StringBuilder(); foreach (var c in fen) { if (c == ' ') break; if (c >= '0' && c <= '9') { figures.Append('.', c - 48); //Добавляю точки в количестве выведенном из char } else figures.Append(c); } for (int i = 0, x = 0, y = 0; i<figures.Length; i++) { if (x == 8) x = 0; if (figures[i] == '/') { y++; continue; } board[y, x++] = figures[i]; } }
Вывод строки по координатам: void PrintFigure(char figure) { if (figure == '.') { WriteLine("There is no figure at this position"); return; } StringBuilder whatfigure = new StringBuilder(); whatfigure.Append("The figure is a"); string colour = (figure > 90) ? " Black" : " White"; whatfigure.Append(colour); string name = null; figure = (char) ((figure > 90) ? figure - 32 : figure); //Привожу знак фигуры к строчной букве switch (figure) { case 'P': { name = " Pawn"; break;} case 'R': { name = " Rook"; break; } case 'N': { name = " Knight"; break; } case 'B': { name = " Bishop"; break; } case 'Q': { name = " Queen"; break; } case 'K': { name = " King"; break; } } whatfigure.Append(name); WriteLine(whatfigure); }
Научился: Узнал про Class Library и возможности подключения классов к загружаемым проектам. Видимо, нам потребуется класс фигур figures, класс canMove с проверкой возможности ходить для каждой фигур, enum со статусом состояний - (none, check, stalemate, checkmate). Трудности: Все понятно и очень интересно как это будет реализовано на C#. На javascript "Микрошахматы" разбиение на классы не использовалось.
Научился: Класс "Фигура" наверняка потребуется. Кстати, у меня Visual Studio 13 и там два типа проекта - Class Library и Portable Class Library. Я использовал просто Class Library. Правильно?