Курсы по программированию

Формула программиста

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.

Шахматы по сети / Классы. Шахматная библиотека

  • На данном уроке мы начинаем создание шахматных классов на языке 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);
    }
  • Что было сложным: Ничего
  • Оценка видео-уроку:
Отчёт от 10080 за Шахматы по сети / Классы. Шахматная библиотека


Отчёт от 10080 за Шахматы по сети / Классы. Шахматная библиотека




Оцени работу

 
Сохранить страницу:

1. --
Евгений Волосатов
Евгений Волосатов
ответить
→  FireWolf  # Шахматы по сети / Классы. Шахматная библиотека / 2018-05-07 09:47

Внимательно посмотрел твой алгоритм - очень хорошее решение


  • Отчёт оценивали:
    17947Dmitry Sinitsin+1   17606Виктор+1   3747Сергей+1   17443WildOrc+1   16533Андрей Шевченко+1   791Валерий Жданов+1   16066Bodrik_torf+1   4395Денис+1   16218Дмитрий+1   5394Anton+1   1Евгений Волосатов+1   10895Danil42Russia+1   11582Родион+1   17240Андрей Гришагин+1   18181DbIM+1   3922Александр+1   9980Timoha+1   459Сергей Сергеевич+1   6452Кирилл Шмойлов+1   18249Александр+1   17255Слава+1   10494Алексей В.+1  

Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Узнал про Class Library и возможности подключения классов к загружаемым проектам. Видимо, нам потребуется класс фигур figures, класс canMove с проверкой возможности ходить для каждой фигур, enum со статусом состояний - (none, check, stalemate, checkmate).
Трудности: Все понятно и очень интересно как это будет реализовано на C#. На javascript "Микрошахматы" разбиение на классы не использовалось.



Научился: Класс "Фигура" наверняка потребуется. Кстати, у меня Visual Studio 13 и там два типа проекта - Class Library и Portable Class Library. Я использовал просто Class Library. Правильно?