Мы продолжаем написание шахматных алгоритмов. На этом уроке мы начинаем реализацию проверок можно ли пойти с одной клетки на другую.
Дата отправки отчёта:
11 мая 2018 г.
Задание выполнено: за
1 час. 18 мин.
Чему научился:
Попрактиковался в использовании yield. В общих чертах представляю, что это и как это работает (что-то вроде синтаксического сахара для автогенерации Observer/Observable (?)), но всегда сложно понять, где именно это стоит применить.
Ещё довёл до ума красивое отображение шахматного поля! :)
Если интересно, то я его вывожу вот так (ещё я тут использую нововведение в C# 7.0 - вложенные функции):
static string ChessToAscii(Chess chess) { var sb = new StringBuilder(); sb.AppendLine(" a b c d e f g h "); sb.AppendLine(" +----------------+"); for (int y = 7; y >= 0; y--) { sb.Append(" "); sb.Append(y + 1); sb.Append(" |"); for (int x = 0; x < 8; x++) sb.Append(chess.GetFigureAt(x, y)); sb.AppendLine("| " + (y + 1)); } sb.AppendLine(" +----------------+"); sb.AppendLine(" A B C D E F G H ");
return sb.ToString(); }
static void Print(string text) { OutputEncoding = Encoding.Unicode; ConsoleColor fcOld = ForegroundColor; ConsoleColor bcOld = BackgroundColor; int c = 0; for (int i = 0; i < text.Length; i++, c++) { if (text[i] >= 'a' && text[i] <= 'z') { ForegroundColor = ConsoleColor.Red; } else if (text[i] >= 'A' && text[i] <= 'Z') { ForegroundColor = ConsoleColor.DarkYellow; } else ForegroundColor = ConsoleColor.Cyan;
PrintChar(text[i], i); }
ForegroundColor = fcOld; BackgroundColor = bcOld;
void PrintChar(char f, int i) { if (i > 49 && i < 209) switch (f) { case 'K' : SetBGColor(); Write('\u2654'); break; case 'Q' : SetBGColor(); Write('\u2655'); break; case 'R' : SetBGColor(); Write('\u2656'); break; case 'B' : SetBGColor(); Write('\u2657'); break; case 'N' : SetBGColor(); Write('\u2658'); break; case 'P' : SetBGColor(); Write('\u2659'); break; case 'k' : SetBGColor(); Write('\u265A'); break; case 'q' : SetBGColor(); Write('\u265B'); break; case 'r' : SetBGColor(); Write('\u265C'); break; case 'b' : SetBGColor(); Write('\u265D'); break; case 'n' : SetBGColor(); Write('\u265E'); break; case 'p' : SetBGColor(); Write('\u265F'); break; case '.' : SetBGColor(); Write(" "); break; default: Write(f); break; } else Write(f); BackgroundColor = bcOld;