
Мы начинаем создание клиент-серверной программы для игры в Шахматы по сети. Это комплекс программных решений с использованием: C#, ASP.NET, MS-SQL, EF, Unity. В результате мы создадим сервер, через который клиенты смогут играть друг с другом в шахматы со смартфона.
Самостоятельное задание:
Опишите свой опыт работы с каждой из технологий: C#, Unity, ASP.NET, MS-SQL, Entity Framework, Шахматы.
Приложите любой скриншот на шахматную тематику.
Цель этого урока — установить Unity и набрать несколько строчек шахматных терминов.
Скачать Unity3D, архив с картинками и потренироваться в наборе шахматных терминов можно, перейдя по ссылкам, указанным внизу описания урока.
Самостоятельное задание:
Приложите скриншот установленной Unity.
Напишите, с какой скоростью вы набрали шахматные термины и сколько сделали ошибок.
На этом уроке мы разместим доску с фигурами. Ссылка для скачивания архива с картинками указана ниже.
Самостоятельное задание:
Скачать и распаковать архив с фигурами (см. ссылку внизу).
Импортировать фигуры в проект.
Создать доску и разместить на ней все фигуры.
Переименовать все объекты в списке.
Приложить скриншот результата.
На этом уроке мы начнём процесс Drag-n-Drop и обсудим все состояния, через которые проходит объект в процессе переноса. Создадим скрипт, класс, перечисление, конструктор и метод Action.
Самостоятельное задание:
Понять все состояния переноса.
Создать скрипт, класс, перечисление, конструктор и метод Action.
Вывести сообщение в консоль и проверить.
На этом уроке мы найдём фигуру, по которой кликнул пользователь.
Самостоятельное задание:
Создать коллайдер вокруг всех фигур.
Написать вспомогательные функции.
Вывести в консоль название выбранной фигуры.
На этом уроке мы допишем перенос фигуры и учтём смещение при клике. Теперь вы сможете разыграть любую партию — сделайте скриншот интересной позиции!
Самостоятельное задание:
Закончить метод PickUp().
Написать методы Drag()/Drop().
Добавить учёт смещения.
Прислать скриншот интересной позиции.
На этом уроке мы создадим независимый билд (рабочую версию) нашей игры для платформы Windows.
Самостоятельное задание:
Внимательно прослушать и просмотреть видео.
Выбрать необходимую платформу.
Настроить Player Settings.
Выбрать место для хранения билдов.
Запустить созданный билд вашей игры.
Приложить скриншот результата.
* Запустить игру на другом ПК.
На этом уроке мы запустим нашу доску на операционной системе Android. Приготовьте свой планшет/телефон и приступайте к экспорту и запуску!
* Выполнять этот урок не обязательно.
* Если у вас есть iPhone и Mac — разберитесь как запустить доску на нём самостоятельно.
В Unity в редакторе Edit/Preferences/External tools — тут указать пути к SDK и JDK.
В переменных среды винды указать JDK_HOME JAVA_HOME как на скрине.
Если не билдится и ругается на сборщик gradle в настройках билда поменять билд систем на internal
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Напишите, удалось ли вам выполнить этот урок.
Запустить программу на Android устройстве.
Прислать фотографию, где видно вас, планшет, доску.
На этом уроке мы отправим наш проект в Интернет. Для этого мы воспользуемся технологией WebGL. Генерация страницы занимает продолжительное время. Засеки момент начала и напиши в отчете сколько времени это заняло.
* Выполнять этот урок необязательно.
Совет. Создавайте проект в папке с простыми именами — только английские буквы и цифры.
* Если у вас есть другая платформа из имеющихся в Unity, разберитесь как запустить доску на ней и запишите видеоурок об этом. Я размещу его в этом курсе.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Переключить проект на платформу WebGL.
Настроить Player Settings.
Скомпилировать и протестировать работу в браузере.
Написать продолжительность генерации сайта.
Прикрепить скриншот результата.
* Приложить ссылку на ваш сайт с размещенной там игрой.
На этом уроке мы познакомимся с архитектурой проекта, посмотрим на предстоящее путешествие с высоты птичьего полёта.
Задание: написать, что для вас в этом плане самое простое, а что — самое сложное.
Рекомендуемые страницы:
Стратегия MVP - Минимально жизнеспособного продукта
FEN-позиция после хода e2-e4
Демонстрация Наношахмат
Курс Микрошахматы
Демонстрация мата конём и слоном
Самостоятельное задание:
Посмотреть презентацию проекта.
Что для вас в этом плане самое простое?
Что для вас в этом плане самое сложное?
Откройте каждую из рекомендованных страниц.
На данном уроке мы начинаем создание шахматных классов на языке C#, которые позволят проверять правила игры.
Для этого мы напишем библиотеку, которая сможет для любой шахматной позиции определить возможность любого хода.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать новый проект Class Library на C#.
Переименовать класс Class1 в Chess.
Реализовать конструктор Chess(stirng fen).
Реализовать функцию Move(string move).
Реализовать функцию GetFigureAt(int x, int y).
Создать новый проект ChessDemo для тестирования.
Установить ChessDemo как запускаемый проект по умолчанию.
Добавить референс и юзинг на ChessRules в ChessDemo.
Добавить в конструктор Chess() аргумент по-умолчанию.
Реализовать основной цикл для тестирования.
Напишите, какие ещё классы нам потребуются.
Приложить скриншот результата.
* Вывести доску в консоль, используя метод GetFigureAt().
Мы продолжаем создание шахматных классов на языке C#, которые позволят проверять правила игры. На этом уроке мы рассмотри схему библиотеки dll, которая поможет нам сориентироваться в дальнейших действиях.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать перечисления Figure и Color.
Создать статичный класс ColorMethods().
Реализовать функцию FlipColor().
Приложить скриншот результата.
Мы продолжаем создание шахматных классов на языке C#, которые позволят проверять правила игры. На этом уроке мы создадим структуру классов с минимально необходимым кодом. Для лучшего восприятия материала, можно просмотреть "Урок об отличии структуры от класса", ссылка на который приведена ниже.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать структуру Square().
Реализовать конструктор Square().
Реализовать вспомогательную функцию OnBoard().
Реализовать конструктор Square(string name).
Реализовать геттер Name().
Протестировать работу нововведений.
Приложить скриншот результата.
* Протестировать выход координат за пределы доски.
Мы продолжаем создание шахматных классов на языке C#, которые позволят проверять правила игры. На этом уроке мы создадим классы для хранения и перемещения фигур по клеткам.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать класс FigureOnSquare().
Создать конструктор FigureOnSquare().
Создать класс FigureMoving().
Создать конструктор FigureMoving().
Создать конструктор FigureMoving(string move).
Приложить скриншот результата.
Мы продолжаем создание шахматных классов на языке C#, которые позволят проверять правила игры. На этом уроке мы создадим класс Board(), который будет заниматься доской и работать с FEN.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать класс Board().
Создать конструктор Board(string fen).
Создать геттер GetFigureAt(Square square).
Создать сеттер SetFigureAt(Square square, Figure figure).
В классе Board() реализовать функцию Init().
В классе Board() реализовать функцию Move(FigureMoving fm).
Приложить скриншот результата.
Мы продолжаем создание шахматных классов на языке C#, которые позволят проверять правила игры. На этом уроке мы создадим класс Moves(), который будет заниматься проверкой возможности хода.
Внимание! В классе Moves есть ошибка. Попробуйте её найти и исправить.
Мы её исправим на уроке "Консольная доска".
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать класс Moves().
Создать функцию CanMove(FigureMoving fm).
Создать вспомогательные функции CanMoveFrom/To().
Создать расширяющий класс FigureMethods.
Создать расширяющий метод GetColor().
Приложить скриншот результата.
*** Исправить ошибку в классе Moves().
Мы продолжаем создание шахматных классов на языке C#, которые позволят проверять правила игры. На этом уроке мы допишем класс Chess().
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Модифицировать конструктор Chess(string fen).
Модифицировать метод Move(stirng move).
Создать вспомогательный конструктор Chess(Board board).
Модифицировать метод GetFigureAt(int x, int y).
Приложить скриншот результата.
Мы приступаем к написанию тестов для нашей библиотеки. На этом уроке мы создадим функционал для отображения доски
и исправим старую ошибку копипаста.
Обещанное исправление ошибок можно увидеть на рисунке, прикрепленном ниже.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Реализовать вспомогательную функцию ChessToAscii(Chess chess).
Воспользоваться функцией ChessToAscii() для отображения доски.
Исправить ошибку, если ранее её не исправили.
Доработать функцию ChessToAscii(Chess chess).
Реализовать вспомогательную функцию Print(string text).
Воспользоваться функцией Print() для отображения цветной доски.
Приложить скриншот результата.
* Напишите, какую фигуру сложнее, а какую проще программировать.
Мы создали все основные классы нашего проекта. Ваша задача — нарисовать UML схему созданных классов. Для контроля приведена структура объектов, созданная в ходе выполнения заданий данного раздела, в виде скриншота вкладки Solution Explorer для ChessRules.
Нарисовать схему значительно проще, когда проект уже готов. Поэтому задание не сложное, но очень, очень полезное и нужное. Используйте иерархическую структуру Solution Explorer в VisualStudio. Нарисовать можно от руки, либо в сервисе draw.io. Можно использовать любой другой *не автоматический* инструмент рисования. Важно сделать это самостоятельно, а не "сгенерить" программой! Поэтому все должно быть нарисовано самостоятельно!
* Не забывайте потом дорисовывать схему в процессе добавления новых методов в классах.
Самостоятельное задание:
Разобраться в правилах создания UML схем.
Нарисовать структуру проекта и приложить фото/скриншот.
Мы приступаем к написанию шахматных алгоритмов. На этом уроке мы добавим в класс Board() необходимые свойства и реализуем парсинг передаваемого FEN. Для лучшего понимания сути урока посмотрите отрывок про волшебные шахматы из фильма о Гарри Поттере (ссылка на отрывок - внизу описания урока).
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Посмотреть отрывок про волшебные шахматы из фильма о Гарри Поттере.
Добавить свойства возможности рокировки в класс Board().
Добавить свойство взятия на проходе в класс Board().
Добавить свойство правила 50-ти ходов в класс Board().
Добавить свойство текущего хода в класс Board().
Доработать функцию Init() в классе Board().
Реализовать вспомогательные функции для парсинга FEN.
Приложить скриншот результата.
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы реализуем формирование текущей позиции в формате FEN.
Во вспомогательной функции FenCastleFlags() необходимо подправить последовательность флагов так, чтобы в строке FEN последовательность флагов выглядела так: KQkq .
Часть этого кода можно увидеть на рисунке "22.последовательность флагов", прикрепленном внизу описания урока.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Реализовать вспомогательную функцию GenerateFEN().
Реализовать вспомогательные функции для формирования FEN.
Доработать функцию Move(FigureMovoing fm) в классе Board().
Приложить скриншот результата.
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы начинаем реализацию проверок возможности перехода с одной клетки на другую.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Реализовать функцию Chess().YieldValidMoves().
Добавить вывод результата функции в Program().Main().
Реализовать статичную функцию Square().YieldBoardSquares().
Реализовать статичную функцию Board().YieldMyFigureOnSquares().
Переопределить функцию FigureMoving().ToString().
Протестировать работу текущего функционала.
Приложить скриншот результата.
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы реализуем проверку возможности перехода с одной клетки на другую для Короля (King).
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
В классе Moves() доработать функцию CanMoves().
Реализовать функцию Moves().CanFigureMove().
Добавить атрибуты deltaX/Y и absDeltaX/Y в классе FigureMoving().
Протестировать работу текущего функционала.
Приложить скриншот результата.
* Добавить проверку для фигуры Конь (Knight).
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы реализуем проверку возможности перехода с одной клетки на другую для Коня (Knight).
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Добавить на доску белого и чёрного коней.
Реализовать функцию Moves().CanKnightMove().
Доработать функцию CanFigureMove().
Протестировать работу текущего функционала.
Приложить скриншот результата.
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы переходим к дальнобойным фигурам.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Добавить на доску белого и чёрного ферзей.
Реализовать функцию Moves().CanStraightMove()
Добавить атрибуты signX/Y в классе FigureMoving().
Реализовать операторы сравнения в Square().
Реализовать проверку движения Ферзя, Ладьи и Слона.
Протестировать работу текущего функционала.
Приложить скриншот результата.
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы приступаем к реализации алгоритмов самой сложной фигуры — Пешки (Pawn).
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Добавить на доску белые и чёрные пешки.
Реализовать функцию Moves().CanPawnMove().
Реализовать функции Moves().CanPawnGo/Jump/Eat().
Протестировать работу текущего функционала.
Приложить скриншот результата.
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы реализуем превращение Pawn в одну из четырёх фигур: Queen, Knight, Bishop и Rook.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Доработать функцию Chess().YieldValidMoves().
Реализовать статичную функцию FigureMethods().YieldPromotions().
Доработать функцию FigureMoving().ToString().
Доработать функцию Board().Move().
Протестировать работу текущего функционала.
Приложить скриншот результата.
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы займёмся рефакторингом.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать класс NextBoard().
Модифицировать функцию Board().Move().
Перенести функцию Board().SetFigureAt() в класс NextBoard().SetFigureAt().
Перенести функцию Board().GenerateFEN() в класс NextBoard().GenerateFEN().
Перенести функцию Board().GetFigures() в класс NextBoard().GetFigures().
Перенести функцию Board().GetMoveColor() в класс NextBoard().GetMoveColor().
Перенести функцию Board().GetCastleFlags() в класс NextBoard().GetCastleFlags().
Перенести функцию Board().GetEnPassant() в класс NextBoard().GetEnPassant().
Перенести функцию Board().GetDrawNumber() в класс NextBoard().GetDrawNumber().
Перенести функцию Board().GetMoveNumber() в класс NextBoard().GetMoveNumber().
Отрефакторить конструктор NextBoard().
Протестировать работу текущего функционала.
Приложить скриншот результата.
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы займёмся взятием пешкой на проходе.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Подготовить начальную позицию в FEN для удобства тестирования.
Дописать конструктор NextBoard().
Реализовать функцию NextBoard().SetEnpassant().
Дописать функцию Moves().CanPawnMove().
Реализовать функцию Moves().CanPawnEnPassant().
Реализовать функцию NextBoard().DropEnpassant().
Реализовать метод FigureMoving().PlacedFigure.
Протестировать работу текущего функционала.
Приложить скриншот результата.
* Приложите картинку взятия на проходе.
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы реализуем рокировку.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Подготовить начальную позицию в FEN для удобства тестирования.
Дописать конструктор NextBoard().
Реализовать функцию NextBoard().UpdateCastleFlags().
Дописать функцию Moves().CanFigureMove().
Реализовать функцию Moves().CanKingCastle().
Реализовать функцию NextBoard().MoveCastlingRook().
Протестировать работу текущего функционала.
Приложить скриншот результата.
* Приложите картинку рокировки.
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы будем защищать короля от ШАХа.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Подготовить начальную позицию в FEN для удобства тестирования.
Дописать функцию Chess().YieldValidMoves().
Реализовать функцию Board().IsCheckAfterMove().
Реализовать вспомогательную функцию Board().CanEatKing().
Реализовать вспомогательную функцию Board().FindBadKing().
Доработать функцию Moves().CanKingCastle().
Реализовать конструктор FigureMoving() для пустого хода.
Реализовать функцию Board().IsCheck().
Протестировать работу текущего функционала.
Приложить скриншот результата.
Мы заканчиваем написание шахматных алгоритмов. На этом уроке мы реализуем возврат ситуации на доске.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Подготовить начальную позицию в FEN для удобства тестирования.
Дописать класс Chess().
Реализовать вспомогательную функцию Chess().SetCheckFlags().
Протестировать работу текущего функционала.
Приложить скриншот результата.
* Реализовать все доп. условия ничьи.
На этом уроке мы исправим одну ошибку и добавим ещё один вариант метода GetFigureAt(string xy). Ваше задание — записать подробный отзыв об алгоритмической части проекта.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Дописать функцию Chess().Move().
Реализовать функцию Chess().GetFigureAt(string xy).
Протестировать работу текущего функционала.
Опишите что вы думаете по данной части алгоритмов.
Приложить скриншот результата.
На этом уроке мы проверим корректность ваших алгоритмов. Для этого мы прогоним супер-тест по генерации всех вариантов.
* Выполнять этот урок необязательно.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Реализовать вспомогательную функцию Program().NextMoves().
Протестировать несколько позиций.
Приложить скриншот результата.
* Протестировать различные позиции более глубоко.
На этом уроке мы немного порефакторим и добавим очень полезную функцию.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Реализовать функцию Chess().IsValidMove().
Модифицировать функцию Chess().Move().
Протестировать компиляцию и запуск.
Приложить скриншот результата.
На этом уроке мы подготовим библиотеку ChessRules. Для этого мы скомпилируем её в необходимой версии .NET и проверим работоспособность в Unity проекте.
!в видео-уроке неточность: первым делом надо скопировать библиотеку ChessRules.dll в папку Assets, после чего она автоматически будет доступна в списке References.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Сменить версию .NET у проекта ChessRules на 3.5.
Создать новый проект на Unity.
Добавить только белые фигуры, переименовать их.
Скопировать библиотеку ChessRules.dll в папку Assets.
Создать новый скрипт ChessTest и открыть его в Visual Studio.
Добавить строчку using ChessRules.
Реализовать функцию Start().
Добавить скрипт ChessTest в MainCamera.
Протестировать работу скрипта.
Приложить скриншот результата.
На этом уроке мы обсудим дальнейший план действий.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Открыть проект созданный ранее в Unity.
Удалить игровую доску и все фигуры.
Добавить текстуры клеток доски обычные и помеченные.
Разместить за пределами видимой области необходимые объекты.
Переименовать объекты по стандарту FEN.
Удалить все лишние объекты сцены.
Приложить скриншот результата.
На этом уроке мы сгенерируем шахматную доску с базовыми объектами на ней.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Добавить для всех фигур Box Collider 2D.
Добавить скрипт Board к объекту Main Camera.
Установить Order in Layer равное -1 для шахматных клеток.
Реализовать конструктор Board().
Реализовать вспомогательную функцию InitGameObjects().
Протестировать работу скрипта.
Приложить скриншот результата.
На этом уроке мы добавим ранее созданную библиотеку ChessRules.dll в проект на Unity.
!В видео уроке неточность: первым делом надо скопировать ChessRules.dll в папку Assets, после чего она автоматически будет доступна в списке References.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Копируем библиотеку ChessRules.dll в папку Assets.
Дописываем в Board.cs необходимый юзинг.
Реализовать функцию ShowFigures().
Протестировать работу скрипта.
Приложить скриншот результата.
На этом уроке мы активируем проверку ходов, которую реализовали в ChessRules.dll.
Примечание.
У некоторых студентов возникли проблемы по видео в 7:15. Дополнительно продублирую текстом:
148-149 строчки ОСТАЮТСЯ и КОПИРУЮТСЯ в 83-84 строчки. 84 строка "Drop()" УДАЛЯЕТСЯ.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Доработать вспомогательные функции DragAndDrop().PickUp/Drop().
Создать вспомогательную функцию Board().DropObject().
Реализовать вызов функции через делегат.
Протестировать работу скрипта.
Приложить скриншот результата.
На продолжаем реализацию необходимого функционала для активации проверки ходов на основе ChessRules.dll.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Реализовать вспомогательную функцию Board().VectorToSquare().
Реализовать вспомогательную функцию Board().DropObject().
Протестировать работу скрипта.
Приложить скриншот результата.
* Предложить простой вариант реализации превращения пешки.
Это бонусный урок, выполнять его не обязательно. На данном уроке мы реализуем подсветку тех клеток, с которых можно ходить.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Реализовать вспомогательную функцию Board().ShowSquare().
Реализовать вспомогательную функцию Board().MarkSquaresFrom().
Доработать функции DropObject() и Start().
Реализовать вспомогательную функцию Board().UnmarkSquares().
Протестировать работу скрипта.
Приложить скриншот результата.
Это бонусный урок, выполнять его не обязательно. На данном уроке мы реализуем подсветку тех клеток, на которые можно ходить.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Реализовать вспомогательную функцию Board().PickObject().
Реализовать вызов функции через делегат.
Реализовать вспомогательную функцию Board().MarkSquaresTo().
Доработать вспомогательную функцию DragAndDropю().PickUp().
Протестировать работу скрипта.
Приложить скриншот результата.
На этом уроке мы начинаем подготовку к превращению пешки в одну из четырёх фигур. Для начала проведём небольшой рефакторинг.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Реализовать вспомогательную функцию Board().CreateGameObject().
Реализовать вспомогательную функцию Board().SetSprite().
Доработать вспомогательную функцию Board().ShowSquare().
Протестировать работу скрипта.
Приложить скриншот результата.
На этом уроке мы продолжаем подготовку к превращению пешки в одну из четырёх фигур. Теперь нам надо подготовить фигуры, в которые будем превращать.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Доработать вспомогательную функцию Board().InitGameObjects().
Реализовать вспомогательную функцию Board().ShowPromotionFigures().
Протестировать работу скрипта.
Приложить скриншот результата.
На этом уроке мы наконец превратим нашу пешку в одну из четырёх фигур.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Доработать вспомогательную функцию Board().DropObject().
Доработать вспомогательную функцию Board().PickObject().
Протестировать работу скрипта.
Приложить скриншот результата.
* придумайте свой способ проверки валидности хода пешкой.
На этом уроке мы приступаем к созданию базы данных (БД) для нашего сервера "шахматы по сети".
Убедитесь, что у вас установлен MS SQL Server (ссылка для скачивания - внизу). Выберите "Выпуск Developer".
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Скачать и установить SQL Server Management Studio.
Убедится, что установлен MS SQL Server.
Приложить скриншот результата.
Мы продолжаем создание базы данных для нашего сервера "шахматы по сети". На данном уроке мы спроектируем схему нашей БД.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Нарисовать схематично структуру БД.
Приложить скриншот результата.
Мы продолжаем создание БД для нашего сервера "шахматы по сети". На данном уроке мы упростим схему нашей БД.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Упростить структуру БД.
Приложить скриншот результата.
Мы продолжаем создание БД для нашего сервера "шахматы по сети". На данном уроке мы наконец создадим нашу базу данных для онлайн шахмат.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать базу данных.
Создать таблицу с необходимыми столбцами.
Приложить скриншот результата.
Мы продолжаем создание БД для нашего сервера "шахматы по сети". На данном уроке мы создадим дополнительные таблицы, которые понадобятся для реализации полноценной онлайн игры.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать дополнительные таблицы.
Добавить необходимые ключи и индексы.
Приложить скриншот результата.
На данном уроке мы нарисуем диаграмму нашей БД.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать диаграмму созданной базы данных.
Приложить скриншот результата.
На данном уроке мы приступаем к созданию серверной части нашего онлайн проекта "Шахматы по сети".
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать новый проект ChessAPI.
Выбрать Empty + Web API.
Создать контроллер отображающий версию.
Настроить проект, чтобы при запуске открывалась api/Versions.
Создать класс Version().
Вернуть версию через конструктор класса Version.
Приложить скриншот результата.
На этом уроке мы создадим EDM — Entity Data Model.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Добавить ADO.NET EDM.
Подключиться к созданной ранее БД.
Создать контроллер ChessController.
Модифицировать ChessController под наши нужды.
Настроить проект, чтобы при запуске открывалась api/Chess.
Приложить скриншот результата.
На этом уроке мы изменим формат вывода с XML на JSON.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Модифицировать файл Global.asax.
Модифицировать ChessController.
Реализовать вспомогательную функцию NewGame().
Протестировать создание новой игры.
Приложить скриншот результата.
На этом уроке мы будем упрощать наш ChessController.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать класс Logic().
Реализовать конструктор класса Logic().
Создать функцию Logic().GetCurrentGame().
Модифицировать ChessController.
Подключить и использовать ChessRules.dll.
Протестировать создание новой игры.
Приложить скриншот результата.
Мы продолжаем создание серверной части для нашего проекта "Шахматы по сети". На этом уроке мы реализуем выполнение ходов.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Реализовать функцию ChessController().GetMoves().
Реализовать функцию Logic().MakeMove().
Модифицировать WebApiConfig().Register().
Поиграть через адресную строку.
Приложить скриншот результата.
* Что нужно сделать для того, чтобы конец хода увидел не только тот, кто походил последним.
Мы продолжаем создание серверной части для нашего проекта "Шахматы по сети". На этом уроке мы обсудим Шахматную идемпотентность. Напишите своими словами, что такое Идемпотентность.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Реализовать функцию ChessController().GetGameById().
Модифицировать WebApiConfig().Register().
Реализовать функцию Logic().GetGame().
Модифицировать Logic().MakeMove().
Протестировать корректность отработки адресной строки.
Приложить скриншот результата.
Мы продолжаем создание серверной части для нашего проекта "Шахматы по сети". На этом уроке мы реализуем завершение игры при сдаче.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Модифицировать ChessController().GetMoves().
Реализовать функцию Logic().ResignGame().
Протестировать корректность через адресную строку.
Приложить скриншот результата.
Приступаем к размещению нашего сервера в интернете. Для этого нам потребуется Windows-хостинг с поддержкой ASP.NET. Для того, чтобы мы были на одной волне и смогли проработать всё вместе, пожалуйста, зарегистрируйтесь на хостинг-сервисе, ссылка на который приведена ниже.
Самостоятельное задание:
Открыть страницу хостинга по этой указанной ссылке.
Зарегистрироваться и подтвердить адрес электронной почты.
Прислать скриншот личного кабинета из хостинга.
На этом уроке мы выберем план, доменное имя, укажем контактную информацию. И после всего этого — заплатим за хостинг, чтобы перейти к опытам.
Правда: лучше заплатить 380 рублей и получить надёжный хостинг, чем мыкаться по бесплатным с кучей ограничений. Эта инвестиция стоит полученного опыта.
ВНИМАНИЕ!
На видео момент в 7:30 выберите пункт: DNS-серверы.
* Использовать DNS-серверы хостинга REG.RU
Самостоятельное задание:
Выбрать подходящий план.
Выбрать доменное имя.
Выбрать срок подписки.
* Заполнить контактную информацию (это не просто:)
Использовать DNS-серверы хостинга REG.RU (на видео ошибка в 7:30).
Заплатить за хостинг.
На этом уроке мы установим пароль для подключения к хостингу по FTP. Напишите, какой FTP-клиент вы используете и приложите скриншот вашей FTP программы с подключением к хостингу.
Самостоятельное задание:
Установить пароль для подключения к FTP.
Установить FTP клиент Total Commander или любой другой.
Подключиться к FTP хостингу и приложить скриншот результата.
На этом уроке мы настроим публикацию проекта из Visual Studio. Выполните все шаги и опубликуйте проект. Приложите скриншот Visual Studio с логами публикации и содержимое FTP каталога после публикации.
Самостоятельное задание:
Настроить публикацию проекта из Visual Studio.
Опубликовать проект и приложить скриншот результата.
* Приложить скриншот страницы API/Versions на вашем домене.
На этом уроке мы перенесём базу данных на сервер и подключимся к ней из скрипта.
Строка подключения к базе данных:
data source=localhost;Initial Catalog=u0000000_chess_db;User ID=u0000000_chess_user;Password=xxxxxxxxx
Если у вас более новая версия MS SQL Server — возможны проблемы при переноса резервной копии БД, во время восстановления базы может возникнуть ошибка несоответствия форматов. Посмотрите инструкцию для "понижения" версии MS SQL (см. ссылку внизу). Если всё равно не получается перенести базу, вы всегда можете создать нужные таблицы самостоятельно.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать резервную копию БД.
Добавить MS SQL БД на хостинге.
Придумать название БД, имя и пароль пользователя.
Импортировать резервную копию в БД на хостинге.
Прописать строку подключения к БД на хостинге.
Протестировать API/Chess через адресную строку.
Приложить скриншот результата.
На этом уроке мы обсудим нюансы с публикацией очередной версии серверной части на хостинге.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Скопировать настроенный файл Web.config с хостинга к себе в отдельную папку.
Опубликовать проект ещё раз и убедиться, что API/Chess не работает.
Модифицировать Web.Release.config.
Протестировать API/Chess через адресную строку.
Приложить скриншот результата.
На этом уроке мы приступаем к завершающему этапу по созданию клиент-серверной игры "Шахматы по сети".
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Использовать проект ChessRules.
Создать класс ChessDemo.Client.
Реализовать конструктор Client().
Реализовать функцию Client().GetFenFromServer().
Протестировать получения json строчки.
Приложить скриншот результата.
* как выделить именно FEN из полученной строчки.
На этом уроке мы выделим FEN из полученной json строки.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Реализовать вспомогательную функцию Client().GetFenFromJSON().
Протестировать получения json строчки.
Приложить скриншот результата.
На этом уроке мы научимся отправлять на сервер наш ход.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Добавить геттер/сеттер Client().GameID.
Реализовать функцию Client().GetIdFromJSON().
Реализовать функцию Client().SendMove().
Использовать функцию SendMove() в цикле демо-режима.
Реализовать загрузку текущей позиции с сервера.
Протестировать поиграв в двух консолях за каждую сторону.
Приложить скриншот результата.
На этом уроке мы используем ранее созданный класс Client() в наш проект на Unity, чтобы можно было поиграть с GUI.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Импортировать класс Client() в проект на Unity.
Использовать класс Clint() в Board().
Протестировать загрузку партии с сервера.
Приложить скриншот результата.
На этом уроке мы реализуем отправку хода через GUI.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Реализовать вспомогательную функцию Board().MakeMove().
Протестировать обмен данными между сервером и клиентом.
Приложить скриншот результата.
На этом уроке мы реализуем функцию обновления текущего состояния на доске.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Модифицировать функцию Board().Start().
Реализовать вспомогательную функцию Board().Refresh().
Установить галку Run in Background* если необходимо.
Протестировать обновление текущего состояния доски.
Приложить скриншот результата.
* Портировать клиент на различные платформы.
Поздравляю вас с завершением нашего эпического курса по созданию клиент-серверной игры в шахматы по сети!
Запишите живое видео, где будет видно, что в игру можно поиграть с двух разных устройств/компьютеров. Расскажите на видео о своём подвиге. Чем курс понравился, что было сложно, что было интересно, что можно будет добавить.
Самостоятельное задание:
Записать живой видео-обзор с отзывом о курсе.
На этом уроке мы начинаем рефакторинг кода клиентской части на Unity.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Вынесли класс DragAndDrop() в отдельный файл.
Добавить необходимый using в файл Board.cs.
Протестировать работу после проведённого рефакторинга.
Приложить скриншот результата.
На этом уроке мы продолжаем рефакторинг, и сейчас мы выделим статические элементы.
Так как видео по рефакторингу записывались до того, как были записаны финальные части курса, то в видео есть неточности, а именно:
Функция MakeMove() всё же появилась к этом уроку и удалять её не стоит.
Функция CallServer() так и не появилась, поэтому искать и удалять её не надо.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать класс Coords().
Перенести функцию VectorToSquare() в класс Coords().
Реализовать функции Coords().GetX/Y/Vector().
Переименовать функцию VectorToSquare() в GetSquare().
Протестировать работу после проведённого рефакторинга.
Приложить скриншот результата.
Мы продолжаем рефакторинг нашего кода. На данном уроке мы займёмся словарями.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать абстрактный класс Box().
Реализовать конструктор Box().
Модифицировать работу с фигурами через Box().
Протестировать работу после проведённого рефакторинга.
Приложить скриншот результата.
Мы продолжаем рефакторинг нашего кода. На данном уроке мы создадим интерфейс ICreatable.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать интерфейс ICreatable.
Реализовать созданный интерфейс в классе Box().
Модифицировать класс Board(), используя новый функционал.
Протестировать работу после проведённого рефакторинга.
Приложить скриншот результата.
Мы продолжаем рефакторинг нашего кода. На данном уроке мы сделаем класс Box() абстрактным.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать класс BoxFigures() : Box.
Реализовать конструктор BoxFigures().
Реализовать функцию BoxFigures().Init().
Сделать класс Box() абстрактным.
Модифицировать класс Board(), используя новый функционал.
Протестировать работу после проведённого рефакторинга.
Приложить скриншот результата.
Мы продолжаем рефакторинг нашего кода. На данном уроке мы создадим класс BoxSquares().
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать класс BoxSquares() : Box.
Реализовать конструктор BoxSquares().
Реализовать функцию BoxSquares().Init().
Реализовать функцию BoxSquares().GetColor().
Модифицировать класс Board(), используя новый функционал.
Протестировать работу после проведённого рефакторинга.
Приложить скриншот результата.
* Проделать тоже самое с классом BoxPromots().
Мы продолжаем рефакторинг нашего кода. На данном уроке мы создадим класс Box().SetPosition().
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Реализовать функцию Box().SetPosition().
Модифицировать класс Board(), используя новый функционал.
Протестировать работу после проведённого рефакторинга.
Приложить скриншот результата.
Мы продолжаем рефакторинг нашего кода. На данном уроке мы создадим класс Box().SetSpriteAt().
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Реализовать методы Box().SetSpriteAt().
Дописать интерфейс ICreatable().
Модифицировать класс Board(), используя новый функционал.
Протестировать работу после проведённого рефакторинга.
Приложить скриншот результата.
Мы продолжаем рефакторинг нашего кода. На данном уроке мы перенесём и разделим класс ShowSquare().
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Перенести функцию ShowSquare() из Board() в BoxSquares().
Реализовать функции Box().MarkSquare().
Модифицировать класс Board(), используя новый функционал.
Протестировать работу после проведённого рефакторинга.
Приложить скриншот результата.
Мы продолжаем рефакторинг нашего кода. На данном уроке мы перенесём некоторые функции в класс BoxSquares().
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Перенести функцию UnmarkSquares() из Board() в BoxSquares().
Перенести функцию MarkSquaresFrom/To() из Board() в BoxSquares().
Модифицировать класс Board(), используя новый функционал.
Протестировать работу после проведённого рефакторинга.
Приложить скриншот результата.
Мы продолжаем рефакторинг нашего кода. На данном уроке мы по-рефакторим функционал превращения пешки.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать константы proFigures, minx, whitey и blacky.
Реализовать функции GetWhite/BlackProFigure().
Модифицировать функции InitGameObjects() и ShowPromotionFigures().
Протестировать работу после проведённого рефакторинга.
Приложить скриншот результата.
Мы продолжаем рефакторинг нашего кода. На данном уроке мы создадим класс BoxPromots().
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Оптимизировать код прошлого урока.
Создать класс BoxPromots() : Box.
Реализовать конструктор BoxPromots().
Реализовать функцию BoxPromots().Init().
Переместить константы в класс BoxPromots().
Переместить функцию ShowPromotionFigures() в класс BoxPromots().
Реализовать функцию BoxPromots().HidePromotionFigures().
Реализовать функцию Box().SetSpriteFor().
Реализовать функцию BoxPromots().GetPromotionFigure().
Модифицировать класс Board(), используя новый функционал.
Протестировать работу после проведённого рефакторинга.
Приложить скриншот результата.
На этом уроке мы вернёмся к нашей библиотеке для исправления старой ошибки: пешка может превратиться в чужую фигуру ил остаться пешкой.
Важно!
Добавьте в начало метода IsValidMove() строчки:
public bool IsValidMove (string move)
{
if (move.Length < 5) return false;
...
Иначе в конструкторе FigureMoving возникнет ошибка.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Открыть проект библиотеки ChessRules.dll.
Реализовать функцию Moves().CanPawnPromote().
Доработать функцию Moves().CanPawnMove().
Реализовать функцию FigureMoving().CheckPromotion().
Заменить библиотеку ChessRiles.dll везде где используется.
Протестировать работу после проведённых исправлений.
Приложить скриншот результата.
Мы на финишной прямой нашего рефакторинга. На данном уроке мы вынесем логику игры в отдельный класс Game().
Так как урок по созданию функции IsValidMove() вынесли намного раньше других уроков, то в функции Board().DropObject() мы уже применили её. Следовательно, вам её вторично создавать не нужно!!!
Строчка chess = chess.Move(move) — уже давно устаревшая в этом уроке, так как мы давно заменили её на chess = new Chess(client.game.fen). Поэтому функцию Game().Move() нужно реализовать таким образом:
public void Move(string fen)
{
chess = new Chess(fen);
}
после чего использовать game.Move(client.game.fen)
Инициализацию game.Init() нам не нужно будет делать, так как у нас уже давно сетевая версия и мы работаем с сервером через game.Move(client.game.fen).
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Создать класс Game().
Реализовать функцию Game().Init().
Реализовать функцию Game().GetMoves().
Реализовать функцию Game().GetFigureAt().
Реализовать функцию Game().Move().
Протестировать работу после проведённого рефакторинга.
Приложить скриншот результата.
Мы всё ближе и ближе к финишу нашего рефакторинга. На данном уроке мы вынесем оставшуюся логику игры в класс Game().
Некоторые строчки могут визуально отличаться от того, что показано в видео, так как данный урок был записан до того, как была реализована работа по сети. Поэтому будьте внимательнее с переносом логики, В любом случае, это отличная практика и опыт для проверки самого себя.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Добавить проверку в IsValidMove() если не сделали это ранее.
Реализовать функцию Game().NextMove().
Реализовать функцию Game().NextPromotionMove().
Протестировать работу после проведённого рефакторинга.
Приложить скриншот результата.
Мы поздравляем тебя с завершением рефакторинга. На данном уроке мы причешем наши скрипты.
Самостоятельное задание:
Внимательно просмотреть и прослушать видео.
Убрать во всех скриптах неиспользуемые юзинги.
Переместить вызов MarkSquaresFrom() и HidePromotionFigures() в ShowFigures().
Оптимизировать функции инициализации.
Протестировать работу после проведённого рефакторинга.
Приложить скриншот результата.
На этом уроке мы заканчиваем наш эпический курс. Получилось здорово. Я доволен результатом. Надеюсь, вы тоже. Мы проделали огромную работу. Каждый стал чуточку умнее и опытнее.
Самостоятельное задание:
Написать финальный отзыв.
Приложить эпическую картинку.
Создание и размещение кнопки вызова меню и панели с кнопками.
Программирование действий по нажатиям кнопок — создание функций и привязка их к событиям нажатия.
Самостоятельное задание: Создать меню.
На этом курсе мы создадим на C# алгоритмы и программу для игры в Шахматы.
Создадим пользовательский интерфейс на Unity и запустим игру на телефоне.
Мы задействуем несколько современных технологий: C#, Unity,
а также напишем алгоритмы генерации ходов по всем шахматным правилам.
Все занятия практические - повторяй и получай, всё подробно и поэтапно.
Этот курс - первая часть более крупного проекта "Шахматы по сети",
в котором создаётся клиент-серверная программа для игры через Интернет.
На этом курсе мы создадим на C# алгоритмы и программу для игры в Шахматы.
Создадим пользовательский интерфейс на Unity и запустим игру на телефоне.
Мы задействуем несколько современных технологий: C#, Unity,
а также напишем алгоритмы генерации ходов по всем шахматным правилам.
Все занятия практические - повторяй и получай, всё подробно и поэтапно.
Этот курс - первая часть более крупного проекта "Шахматы по сети",
в котором создаётся клиент-серверная программа для игры через Интернет.
На этом курсе мы создадим на C# алгоритмы и программу для игры в Шахматы.
Создадим пользовательский интерфейс на Unity и запустим игру на телефоне.
Мы задействуем несколько современных технологий: C#, Unity,
а также напишем алгоритмы генерации ходов по всем шахматным правилам.
Все занятия практические - повторяй и получай, всё подробно и поэтапно.
Этот курс - первая часть более крупного проекта "Шахматы по сети",
в котором создаётся клиент-серверная программа для игры через Интернет.