# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
3 теста |
|||
Мы начинаем создание клиент-серверной программы для игры в Шахматы по сети. Это комплекс программных решений с исользованием: C#, ASP.NET, MS-SQL, EF, Unity В результате мы создадим сервер, через который клиенты смогут играть друг с другом в шахматы со смартфона. Записаться на курс Отчёт отправил: 17535. Алексей Выполнено за 16 мин. [Показать отчёт] Научился: С перечисленными технологиями знаком. Сложности: Использовать все эти технологии в одном проекте. Это интересно. |
|||||
2 | Доска. Установка Unity 3D |
|
|||
Цель этого урока - установить Unity и набрать несколько строчек шахматных терминов. Скачать Unity3D: unity3d.com/ru Набрать шахматные термины: videosharp.info/console/task/level=1766 Скачать архив с картинками: https://yadi.sk/d/irBRduLp3SseXY Отчёт отправил: 17535. Алексей Выполнено за 24 мин. [Показать отчёт] Научился: 6 ошибок, 1 подход, 98 сим/мин Сложности: Да сложно капец! |
|||||
3 | Доска. Фигуры |
|
|||
На этом уроке мы разместим доску с фигурами. Отчёт отправил: 17535. Алексей Выполнено за 2 час. 17 мин. [Показать отчёт] Научился: Расставлять фигуры) Сложности: Сделать это оригинально. |
|||||
4 | Доска. Состояния переноса |
|
|||
На этом уроке мы начнём процесс Drag-n-Drop и обсудим все состояния, через которые проходит объект в процессе переноса. Создадим скрипт, класс, перечисление, конструктор и метод Action. Отчёт отправил: 17535. Алексей Выполнено за 29 мин. [Показать отчёт] Научился: Упрощать ненужные состояния. Сложности: Ничего не работало потому что забыл добавить экшн в апдейт. |
|||||
5 | Доска. Подцеп фигуры |
|
|||
На этом уроке мы найдём фигуру, по которой кликнул пользователь. Отчёт отправил: 17535. Алексей Выполнено за 15 мин. [Показать отчёт] Научился: Вычислять координаты клика, определять фигуру находящуюся этим координатам. |
|||||
6 | Доска. Смещение |
|
|||
На этом уроке мы допишем перенос фигуры и учтём смещение при клике. Теперь вы сможете разыграть любую партию - сделайте скриншот интересной позиции! Отчёт отправил: 17535. Алексей Выполнено за 47 мин. [Показать отчёт] Научился: Трюку со смещением. Сложности: По какой-то невероятной причине содержимое методов Драг и Дроп было поменяно местами. Не знаю как я так сделал. И когда хочешь взять фигуру она не всегда берется, тащить не получается вообще. Но если 1 щелчком без зажатия кнопки бать, то все нормально и можно поставить на нужное место и сбросить, но фигура может опять прилипнуть. Смотрел отзывы у других людей не тащилось, возможно похожая ситуация была. |
|||||
7 | Доска. Запуск на Windows |
|
|||
На этом уроке мы создадим независимый билд (рабочая версия) нашей игры для платформы Windows. Отчёт отправил: 17535. Алексей Выполнено за 9 час. 45 мин. [Показать отчёт] Научился: Что настройка билдера х86_х64 на самом деле х64 и наоборот Сложности: Опытным путем было выяснено, что с настройкой билда х86_х64 программа не запускается на 32хразрядной системе как это было бы логично предположить. Зато если выставить х86, то запускается и на 32 и на 64разрядных системах. |
|||||
8 | Доска. ПЕРВЫЙ ФИНАЛЬНЫЙ УРОК |
|
|||
Мы закончили первую часть курса, создали шахматную доску, запустили её на Windows. Напишите отзыв о первой части курса: что получилось, что было сложным, что ещё вы добавите в программу. Отчёт отправил: 17535. Алексей Выполнено за 6 мин. [Показать отчёт] Научился: Опрашивать мышку, перемещать фигуры, использовать для этого состояния Сложности: Набрать шахматный текст. Ошибки были или из-за невнимательности или из-за того что торопился. И особенно доставало если ошибка в конце строки и нужно все начинать с начала, а не продолжать с места ошибки. |
|||||
9 | Доска. VIP. Запуск на Android |
|
|||
На этом уроке мы запустим нашу доску на операционной системе Android. Приготовьте свой планшет/телефон и приступайте к эскпорту и запуску! * Выполнять этот урок не обязательно. Отчёт отправил: 17535. Алексей Выполнено за 13 час. 16 мин. [Показать отчёт] Научился: Билдить под андроид. Комментарии: в меню телефона 7 раз тапать по билду чтоб открыть меню разработчика. Сложности: Первое что хочется сказать и что мне очень не хотелось делать, но пришлось, это то, что Unity пока не работает с Java 10, пришлось откатиться на 8ю. Про настройку Unity и винды в видео не сказано, потому что уже все было настроено, но так не у всех. Нужные настройки я опишу тут, неплохо бы добавить к описанию видео. Мне бы это сэкономило пару часов. В Unity в редакторе Edit/Preferences/External tools - тут указать пути к SDK и JDK. В переменных среды винды указать JDK_HOME JAVA_HOME как на скрине. Если не билдится и ругается на сборщик gradle в настройках билда поменять билд систем на internal |
|||||
10 | Доска. VIP. Запуск в Интернете |
|
|||
На этом уроке мы отправим наш проект в Интернет. Для этого мы воспользуемся технологией WebGL. Генерация страницы занимает продолжительное время. Засеки момент начала и напиши в отчете сколько времени это заняло. * Выполнять этот урок необязательно. Отчёт отправил: 17535. Алексей Выполнено за 5 час. 29 мин. [Показать отчёт] Научился: Билдить под веб. Заняло около 20 минут. Разобраться с тем почему не работает нигде кроме локального компьютера заняло еще 2-3 часа. Ссылка на шахматы в облаке https://chessexample.azurewebsites.net Сложности: В любом браузере выскакивала ошибка: An error occurred running the Unity content on this page. See your browser JavaScript console for more info. The error was: SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data. что не нравится '{" первый символ, и такое парсить не буду. Решается созданием файла web.config и добавлением его в папку Build. При чем в документации Unity касаемо gzip-компрессии под WebGL как раз и не хватает строчки для распознавания JSON, она выделена на скрине. |
|||||
11 |
![]() |
1 тест |
|||
На этом уроке мы познакомимся с архитектурой проекта, посмотрим на предстоящее путешествие с высоты птичьего полёта. Задание: написать, что для вас в этом плане самое простое, а что - самое сложное. Отчёт отправил: 17535. Алексей Выполнено за 44 мин. [Показать отчёт] Научился: Самое простое, и мы это уже сделали, графическая часть и все что качается Unity. Самое сложное и для понимания и для реализации - серверная часть. |
|||||
12 | Классы. Шахматная библиотека |
2 теста |
|||
На данном уроке мы начинаем создание шахматных классов на языке C#, которые позволят проверять правила игры. Для этого мы напишем библиотеку, которая сможет для любой шахматной позиции определить возможность любого хода. Отчёт отправил: 17535. Алексей Выполнено за 2 час. 59 мин. [Показать отчёт] Научился: Создавать dll, подключать, тестировать. Сложности: В уроке все работало, что странно, мне же после изменения в коде dll приходилось делать build чтоб изменения подхватил тестовый модуль |
|||||
13 | Классы. Цветная фигура |
|
|||
Мы продолжаем создание шахматных классов на языке C#, которые позволят проверять правила игры. На этом уроке мы рассмотри схему библиотеки dll, которая поможет нам сориентироваться в дальнейших действиях. Отчёт отправил: 17535. Алексей Выполнено за 1 час. 45 мин. [Показать отчёт] Научился: Расширять enum. Сложности: Если уже делали свою Яву для .Net копируя все конструкции из оригинала, тут явно стратили. |
|||||
14 | Классы. Квадратная площадь |
|
|||
Мы продолжаем создание шахматных классов на языке C#, которые позволят проверять правила игры. На этом уроке мы создадим структуру классов с минимально необходимым кодом. Отчёт отправил: 17535. Алексей Выполнено за 57 мин. [Показать отчёт] Научился: Создавать клетку, проверять попадает ли она на поле, получать имя клетки. Сложности: В конструкторе Square(int x, int y) наверное стоило бы тоже добавить проверку на допустимые координаты как в Square(string name) |
|||||
15 | Классы. Фигурой марш! |
|
|||
Мы продолжаем создание шахматных классов на языке C#, которые позволят проверять правила игры. На этом уроке мы создадим классы для хранения и перемещения фигур по клеткам. Отчёт отправил: 17535. Алексей Выполнено за 32 мин. [Показать отчёт] Научился: Сделал из клетки хранилище для фигуры, передвижение фигуры. Сложности: Понять как работает пустой класс-обертка и зачем он. Как все это работает вместе с движением, как работает движение. |
|||||
16 | Классы. Квадратная матрица |
|
|||
Мы продолжаем создание шахматных классов на языке C#, которые позволят проверять правила игры. На этом уроке мы создадим класс Board(), который будет заниматься доской и работать с FEN. Отчёт отправил: 17535. Алексей Выполнено за 27 мин. [Показать отчёт] Научился: Создали доску к которой и применили все созданные ранее классы. Сложности: Не сохранять скрины со словом "chess" в русской раскладке, а то и некультурно получается и весело одновременно. Издержки того, что пока не умею набирать слепым методом как ЕВ. И когда подымаешь глаза, часто ожидает сюрприз. |
|||||
17 | Классы. Стой, кто идёт! |
|
|||
Мы продолжаем создание шахматных классов на языке C#, которые позволят проверять правила игры. На этом уроке мы создадим класс Moves(), который будет заниматься проверкой возможности хода. Отчёт отправил: 17535. Алексей Выполнено за 11 час. 32 мин. [Показать отчёт] Научился: Метод bool CanMove позволяет нам ходить только в случае если оба метода bool CanMoveFrom() и bool CanMoveTo() возвращают истину. Но им трудно это сделать когда в одном стоит условие fm.figure.GetColor() == board.moveColor а во втором fm.figure.GetColor() != board.moveColor, кто-то из них не удержится и таки вернет false. В итоге CanMove всегда возвращает ложь. Сложности: Найти ошибку, потому что все выглядело очень логично и правильно. Правильный вариант bool CanMoveTo() на скрине |
|||||
18 | Классы. Шахматная бюрократия |
|
|||
Мы продолжаем создание шахматных классов на языке C#, которые позволят проверять правила игры. На этом уроке мы допишем класс Chess(). Отчёт отправил: 17535. Алексей Выполнено за 34 мин. [Показать отчёт] Научился: Добавил конструктор не по фене, сделал ход, вернул фигуру по координатам. Сложности: Удерживать в гове все связи. |
|||||
19 | Классы. Консольная доска |
1 тест |
|||
Мы приступаем к написанию тестов для нашей библиотеки. На этом уроке мы создадим функционал для отображения доски и исправим старую ошибку копипаста. Отчёт отправил: 17535. Алексей Выполнено за 1 час. 6 мин. [Показать отчёт] Научился: Красиво рисовать доску в консоли с рюшечками и разукрашивать ее. Фигуры в порядке возрастания сложности: конь, офицер слон, ферзь, король, пешка. Сложности: На счет исправления ошибки: в уроке вы исправили 1 метод bool CanMoveTo(). Сравниваем текущий цвет хода с фигурой на клеточке куда собираемся стать: board.moveColor != board.GetFigureAt(fm.to).GetColor(); оно как бы правильно, но мне кажется чуть более логично сравнивать fm.figure.GetColor() != board.GetFigureAt(fm.to).GetColor(); цвет фигуры которой мы хотим походить с цветом фигуры куда мы хотим стать, хотя это не принципиальная мелочь. А в описании к уроку появилось не анонсированная правка в методе bool CanMoveFrom() где все вроде было и так нормально: board.GetFigureAt(fm.from) == fm.figure; разве это не одно и то же? fm: this.figure = fs.figure; this.from = fs.square; очень похоже что мы сравниваем себя с собой же. |
|||||
20 | Классы. ВТОРОЙ ФИНАЛЬНЫЙ УРОК |
|
|||
Мы создали все основные классы нашего проекта. Твоя задача - нарисовать UML схему созданных классов. Нарисовать схему значительно проще, когда проект уже готов. Поэтому задание не сложное, но очень, очень полезное и нужное. Используй иерархическую структуру Solution Explorer в VisualStudio. Нарисовать можно от руки, либо в сервисе draw.io. Можно использовать любой другой *не автоматический* инструмент рисования. Важно сделать это самостоятельно, а не сгенерить программой! Поэтому рисуй сам. * Не забывайте потом дорисовывать схему в процессе добавления новых методов в классах. Отчёт отправил: 17535. Алексей Выполнено за 21 час. 11 мин. [Показать отчёт] Научился: Создавать UML диаграммы. В Студии 2017 их удалили, можно установить дополнительно. Теперь они называются диаграммы классов : https://docs.microsoft.com/ru-ru/visualstudio/ide/class-designer/how-to-add-class-diagrams-to-projects И тут как их подключить к Студии: http://www.nookery.ru/domain-specific-language/ Сложности: Уверен что это было самое сложное задание из всех что были и из всех что будут. Как отдельный курс, сутки ушли на все про все. Вот курс по диаграммам: https://www.youtube.com/playlist?list=PLwwk4BHih4fguh8o7gYRmftnapy9cmZBt И по их использованию: https://www.youtube.com/playlist?list=PLwwk4BHih4fiQPuw29hsXYRwEd2sah_Cn |
|||||
21 | Алгоритмы. Волшебные шахматы |
1 тест |
|||
Мы приступаем к написанию шахматных алгоритмов. На этом уроке мы добавил в класс Board() необходимые свойства и реализуем парсинг передаваемого FEN. Отчёт отправил: 17535. Алексей Выполнено за 2 час. 29 мин. [Показать отчёт] Научился: Красивому способу распарсить FEN, когда был на марафоне не понял его логику работы, сейчас при дебаге в голове прояснилось. Так же понравился метод Init() и фраза что комментарий нужно заменить понятным методом. Так же узнал про правило 50 ходов, про которое ранее не знал. Разбор видео Гарри Поттера тоже зашел) Использование видео попадает под добросовестное использование, ютуб ничего не скажет. А тут источник откуда эта идея появилась у Поттера: https://zen.yandex.ru/media/history_world/krovavye-shahmaty-inkvizitora-5a9fb94e8c8be3ce579424db Сложности: Мне все не давало покоя исправление в рабочем методе CanMoveFrom() и я взял обе части сравнения, получил их хеши и результат на скрине. |
|||||
22 | Алгоритмы. Сборка фена |
1 тест |
|||
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы реализуем формирование текущей позиции в формате FEN. Отчёт отправил: 17535. Алексей Выполнено за 1 час. 9 мин. [Показать отчёт] Научился: Генерировать FEN. Интересный вариант с упаковкой 11111111 нужно будет тоже обдумать. Сложности: По какой-то неведомой причине пустые места на поле отмечаются не точками а 1. Я даже Figure.none захардкодил как '.' но ничего не изменилось. И есть вопрос. Как сделать так чтоб дллку не приходилось билдить перед каждым запуском как в видео? Потому что если я после внесения изменений не создам новый ее билд то оно работает со старой версией. |
|||||
23 | Алгоритмы. Генератор ходов |
1 тест |
|||
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы начинаем реализацию проверок можно ли пойти с одной клетки на другую. Отчёт отправил: 17535. Алексей Выполнено за 55 мин. [Показать отчёт] Научился: Делать Yield, чтобы это ни значило. Комментарии: Рeaлизoвaть cтaтичнyю функцию Board().YieldMyFigureOnSquares() в уроке мы с ней заканчиваем на 12й минуте и статичной не делаем. Так надо ее делать статик или не надо? Сложности: Сложно. Теперь нужно не только с полем из единичек разобраться, но и с елдом. |
|||||
24 | Алгоритмы. Куда идёт Король |
1 тест |
|||
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы реализуем проверку может ли King пойти с одной клетки на другую. Отчёт отправил: 17535. Алексей Выполнено за 33 мин. [Показать отчёт] Научился: Ограничивать ходы Короля и Коня. С новыми методами это легко. Сложности: Пока так и не разобрался почему нужно компилировать длл перед каждым запуском и почему на поле 1ки. С yield разобрался. |
|||||
25 | Алгоритмы. Ночью с Конём |
1 тест |
|||
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы реализуем проверку может ли Knight пойти с одной клетки на другую. Отчёт отправил: 17535. Алексей Выполнено за 14 мин. [Показать отчёт] Научился: Убрал немного лишних скобок, по сравнению с вариантом ЕВ где их нет вообще. Но не все Сложности: Тут нужно понимать приоритеты логических операций. По идее && выполняется первой, а потом ||. Но чтоб точно было все без разночтений пару скобок решено оставить. |
|||||
26 | Алгоритмы. Дальнобойщики |
1 тест |
|||
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы переходим к дальнобойным фигурам. Отчёт отправил: 17535. Алексей Выполнено за 3 час. 43 мин. [Показать отчёт] Научился: Дебажить как нога Акинфеева. Параллельно сделал методы для проверки возможности хода дальнобойных фигур. Сложности: В InitFigures(string v) по какой-то неведомой причине строка v.Replace('1', (char)Figure.none); не работала и когда у всех после нее на выходе были точки у меня были единички. На скринах с предыдущих уроков видно. Ну единички и фиг с ними. В итоге когда дело дошло до хода Ферзя, Ладьи, Слона они все ходили как Король, на 1 клеточку. Пересмотреть урок 3 раза и сравнить все функции посимвольно не помогло, дебаг (а тут уже спасибо нашему не быстрому алгоритму где смотрятся все клеточки и ты сидишь их увлеченно щелкаешь по 1й..) тоже ничего не дал. Тогда было принято решение заняться единичками. Строку "v" оставил, все манипуляции провел в StringBuilder и потом только скопировал результат в строку "v" после этого все заработало. По какой причине строка кода выше не меняла единички на none сие есть тайна покрытая мраком, но из-за этого функция CanStraightMove() делала почти из всех фигур королей) потому что часть условия в цикле (board.GetFigureAt(at) == Figure.none) нормально не работало. Другое дело если бы оно не работало вообще ни как было бы проще, но Ферзь мог ходить в любую сторону по 1й клеточке, Ладья крестом по 1й клеточке, Слон по диагонали по 1й клеточке.. Жэсть жесточайшая. В итоге урок на 20 минут растянулся на несколько часов. |
|||||
27 | Алгоритмы. Храбрая пешка |
|
|||
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы приступаем к реализации алгоритмов самой сложной фигуры: Pawn. Отчёт отправил: 17535. Алексей Выполнено за 42 мин. [Показать отчёт] Научился: Двигать пешку. Теперь танцуют все Сложности: CanPawnJump(int stepY) можно заранее записать из условия клетку через которую мы прыгаем для взятия на проходе if (board.GetFigureAt(new Square( fm.from.x, fm.from.y + stepY)) == Figure.none) в какую-нибудь переменную. |
|||||
28 | Алгоритмы. Четвёртое превращение |
1 тест |
|||
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы реализуем превращение Pawn в одну из четырёх фигур: Queen, Knight, Bishop и Rook. Отчёт отправил: 17535. Алексей Выполнено за 58 мин. [Показать отчёт] Научился: Делать превращения. Программирование - это магия. Сложности: Добавление promotion в разные места кода. Сложно. Нужно время на обдумывание. |
|||||
29 | Алгоритмы. Рефакторинг на доске |
1 тест |
|||
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы займёмся рефакторингом. Отчёт отправил: 17535. Алексей Выполнено за 44 мин. [Показать отчёт] Научился: Рефакторить код. Раньше я выносил повторяющиеся куски кода в отдельные методы и считал что все норм, код отрефакторил). Комментарии: я не умею пока так быстро печатать или набирать текст в слепую, но я знаю хитрые комбинации Студии. Это еще немножечко ускорит редактирование кода. Например когда меняли privat на protected это можно было сделать 1м движением. Зажимаем левые Alt+Shift и мышкой растягиваем прямоугольник. Теперь там где текс выделен мы можем или печатать и он будет меняться везде или вставить слово protected из буфера и это будет применено ко всему тексту. Сложности: Держать в памяти где что находится. Хотя сейчас стало чуть проще. Все методы Get находятся в старом классе, а все Set в новом. И что действительно удивительно во всем этом, так это то что после рефакторинга программа все еще работает. |
|||||
30 | Алгоритмы. Допрыгалась! |
|
|||
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы займёмся взятием пешкой на проходе. Отчёт отправил: 17535. Алексей Выполнено за 1 час. 12 мин. [Показать отчёт] Научился: Делать взятие на проходе. Интересно. Сложности: В конце запутался с рефакторингом где что писать, немножко потупил. |
|||||
31 | Алгоритмы. Королевский паркур |
|
|||
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы реализуем рокировку. Отчёт отправил: 17535. Алексей Выполнено за 2 час. 44 мин. [Показать отчёт] Научился: Делать рокировку. Есть комментарий по поводу "взятия на проходе". Мы могли не делать новый метод для этого, а записывать значение прямо во время прыжка пешки. Она же прыгает через эту клетку и координаты ее нам известны Сложности: Какой комбинацией клавиш вы отменяли автоформатирование текста после копипаста? Там где ифы сами выстраивались лесенкой. |
|||||
32 | Алгоритмы. Защита короля |
|
|||
Мы продолжаем написание шахматных алгоритмов. На этом уроке мы будем защищать короля от ШАХа. Отчёт отправил: 17535. Алексей Выполнено за 1 час. 14 мин. [Показать отчёт] Научился: Делать шаг, делать пустой ход - интересное решение, попробуй до такого догадаться сам.. очень круто. На картинке вид со стороны шахмат на наши мутки с FEN'ом. Сложности: Когда делал конструктор без параметров куда-то пропали параметры из того конструктора который уже был ранее, это очень странно 100% его не трогал, пришлось писать их заново. Мистика. |
|||||
33 | Алгоритмы. Шах и Мат! |
|
|||
Мы заканчиваем написание шахматных алгоритмов. На этом уроке мы реализуем возврат ситуации на доске. Отчёт отправил: 17535. Алексей Выполнено за 2 час. 2 мин. [Показать отчёт] Научился: Проверять состояние игры: есть ли ШАГ, МАТ или ПАТ. Сложности: Сделать проверку на НИЧЬЮ не огромной простыней, а почти так же элегантно, как и у ЕВ. |
|||||
34 | Алгоритмы. ТРЕТИЙ ФИНАЛЬНЫЙ УРОК |
|
|||
На этом уроке мы исправим одну ошибку и добавим ещё один вариант метода GetFigureAt(string xy). Ваше задание - записать подробный отзыв об алгоритмической части проекта. Отчёт отправил: 17535. Алексей Выполнено за 2 час. 59 мин. [Показать отчёт] Научился: Передавать данные о ходе через FEN, использовать это для расстановки фигур на доске Board. На уроке интересным образом этот FEN распарсили, там же сделали метод Init() простой, удобочитаемый, а значит понятный, тоже понравилось. Научился обратной передачи данных, как упаковать 11111111 в 8ку для генерации FEN. Познакомился с Yield. Знал о нем раньше, но не понимал как работает, разобрался. Создали вспомогательные функции DeltaXY, AbsDeltaXY, SignXY для определения правильности хода фигур. Маленькие, но очень полезные, очень легко с их помощью конструировать ходы для разных фигур. На примере движения короля, реализовал движение коня и угадал с первого раза. Следом реализовали движение дальнобойных фигур Ферзя, Ладьи (Ферзь, ограниченный по диагонали), Слона (Ферзь ограниченный по вертикали/горизонтали) не быстро, они по одной перебирают все клеточки в направлении движения, но мы и не торопимся. Отдельный урок для Пешки, сложно, много но зато теперь все ходят правильно. CanPawnJump(int stepY) можно заранее записать из условия клетку через которую мы прыгаем для "взятия на проходе" if (board.GetFigureAt(new Square( fm.from.x, fm.from.y + stepY)) == Figure.none) в какую-нибудь переменную. Научился превращать пешку в одну из четырёх фигур: Queen, Knight, Bishop и Rook. Сделали рефакторинг класса Board он стал чем-то вроде геттера, а новый класс nextBoard сеттера. Причем программа не сломалась и продолжала работать, удивительно. Реализовали "взятие на проходе" для пешки и "рокировку" для короля. В уроке "32 Зашита короля" научился делать шаг и пустой ход(это круто, для шага наоборот). На уроке "33 Шах и Мат!" научился проверять состояние игры: есть ли ШАГ, МАТ или ПАТ. Сделал проверку на НИЧЬЮ. Очень понравилось, крутые интересные алгоритмы, много интересных, оригинальных решей, один обманный ход чего стоит. Теперь в голове все разложено по полочкам (шучу), как на картинке Алисы в зазеркалье у нее были похожие шахматы, картинку прилагаю. Сложности: Critical: Не работала функция String.Replace('1', Figure.none) пришлось заменить на собираемую вручную строку из StringBuilder'a. Из-за этого на поле вместо точек были 1ки. Это не было проблемой пока не дошли до реализации хода дальнобойных фигур, они вдур стали короткобойными) Ферзь, Слон, Ладья ходили только на 1 клеточку. Решив проблему с полем из единичек, проблема с ходами отпала сама собой. <br> Minor: Вторая проблема достаточно неприятная, но не смертельная - я добавил в референсы dll'ку (а нужно было добавить солюшн с кодом дллки) из Bin\Debug и долго удивлялся почему мне сначала нужно билдить длл и только потом запускать программу чтоб она работала уже с изменениями, а на всех видео она работала сразу |
|||||
35 | Алгоритмы. VIP. Шахматное супертестирование |
|
|||
На этом уроке мы проверим корректность ваших алгоритмов. Для этого мы прогоним супер-тест по генерации всех вариантов. * Выполнять этот урок необязательно. Ссылка: Сайт с результатами тестирования Отчёт отправил: 17535. Алексей Выполнено за 18 час. 59 мин. [Показать отчёт] Научился: Проходить супер тест. Сложности: Найти места в коде откуда можно считать правильные параметры шага, взятия, рокировки. Мы вызываем методы много раз за ход при различных проверках, поэтому значения считанные из метода где происходит проверка например на шаг не верны. |
|||||
36 | Алгоритмы. VIP. Можно пройти? |
|
|||
На этом уроке мы немного порефакторим и добавим очень полезную функцию. Отчёт отправил: 17535. Алексей Выполнено за 15 мин. [Показать отчёт] Научился: Рефакторить Сложности: if (!IsValidMove()) return this; не хотело работать и выдавало ошибку. Даже повторяя 2хминутное видео где трудно ошибиться, можно накосячить. Не передал параметр move обычно наши булевские методы не принимал параметров и я написал по аналогии) |
|||||
37 | Алгоритмы. VIP. Как пройти в библиотеку |
|
|||
На этом уроке мы подготовим библиотеку ChessRules. Для этого мы скомпилируем её в необходимой версии .NET и проверим работоспособность в Unity проекте. Отчёт отправил: 17535. Алексей Выполнено за 36 мин. [Показать отчёт] Научился: В версии Unity 2018.2 уже не нужно переделывать длл под 3.5 Сложности: Забыл прицепить скрипт на камеру и не мог понять чего же не работает то. |
|||||
38 | Интерфейс. План действий |
|
|||
На этом уроке мы обсудим дальнейший план действий.
Отчёт отправил: 17535. Алексей Выполнено за 59 мин. [Показать отчёт] Научился: Разместил и переименовал фигуры по фену Сложности: Жалко было все грохать, а так же нет пустой картинки |
|||||
39 | Интерфейс. Генерация объектов |
|
|||
На этом уроке мы сгенерируем шахматную доску с базовыми объектами на ней. Отчёт отправил: 17535. Алексей Выполнено за 1 час. 23 мин. [Показать отчёт] Научился: Рисовать доску. Немного изменил: GameObject square = GameObject.Find(((x + y) % 2 == 0 ? "Black" : "White") + "Square"); Сложности: Сделать самому картинку из 1го пикселя, потому что у меня в комплекте не было ее. Но выход был найден http://www.1x1px.me |
|||||
40 | Интерфейс. Начальная позиция |
|
|||
На этом уроке мы добавим ранее созданную библиотеку ChessRules.dll в проект на Unity. Отчёт отправил: 17535. Алексей Выполнено за 2 час. 11 мин. [Показать отчёт] Научился: Расставлять фигуры используя написанную ранее длл Сложности: У черных выставлялись только пешки и 1 Ладья, на остальные фигуры писало GameObject.Find(figure).GetComponent<SpriteRenderer>().sprite; что в этой строке нулл референс экцепшн. Когда я переименовывал фигуры в редакторе юнити я поначалу нажимал энетер к конце каждого переименования, а потом для ускорения только клацал по след фигуре мышкой, в окне свойств менял букву и без энтера обходился. Хоть оно все и переименовало но видимо не сохранило. Удалил черные фигуры и произвел всю операцию переименования заново, нулл референс исчез а на поле появились фигуры. Хорошо что я не разобрался как тут дебажить, иначе поиск такой неявной ошибки мог и на сутки затянуться |
|||||
41 | Интерфейс. Ход делегата |
|
|||
На этом уроке мы активируем проверку ходов, которую реализовали в ChessRules.dll. Отчёт отправил: 17535. Алексей Выполнено за 29 мин. [Показать отчёт] Научился: Ловить координаты фигуры откуда, куда. Сложности: Делегат как был темным лесом, так и ничего не изменилось) |
|||||
42 | Интерфейс. Проверка хода |
|
|||
Мы продолжаем реализацию необходимого функционала для активации проверки ходов на основе ChessRules.dll. Отчёт отправил: 17535. Алексей Выполнено за 26 мин. [Показать отчёт] Научился: Подключил проверку правильности хода из библиотеки. Теперь фигуры ходят по очереди и только туда куда могут. Сложности: Так как пешка получается только на крайних линиях, можно над(под ней для черных) ней нарисовать 4 фигуры для выбора, будет понятно. |
|||||
43 | Интерфейс. VIP. Клетки отправления |
|
|||
Это бонусный урок, выполнять его не обязательно. На данном уроке мы реализуем подсветку тех клеток, с которых можно ходить. Отчёт отправил: 17535. Алексей Выполнено за 1 час. 15 мин. [Показать отчёт] Научился: Подсвечивать фигуры. Так шахматы смотрятся гораздо круче. Сложности: То ли я скачал бракованный комплект фигур, то ли еще не понятно что произошло, но у меня не было картинки 1х1, а подсветка белой клеточки почти не отличалась от самой белой клеточки, черная тоже бледнее, но ее видно. А белую пришлось переделывать, теперь она выглядит как в видео. 2 варианта: как было и как стало прикрепил. |
|||||
44 | Интерфейс. VIP. Клетки прибытия |
1 тест |
|||
Это бонусный урок, выполнять его не обязательно. На данном уроке мы реализуем подсветку тех клеток, на которые можно ходить. Отчёт отправил: 17535. Алексей Выполнено за 24 мин. [Показать отчёт] Научился: Показывать куда может ходить выбранная фигура. Не плохо бы сделать не только превращение, но и говорить статус ШАХ и др. Сложности: Делегат. Но в этот раз уже проще, можно было делать по аналогии с 1м делегатом все. |
|||||
45 | Интерфейс. Щепотка рефакторинга |
1 тест |
|||
На этом уроке мы начинаем подготовку к превращению пешки в одну из четырёх фигур. Для начала проведём небольшой рефакторинг. Отчёт отправил: 17535. Алексей Выполнено за 34 мин. [Показать отчёт] Научился: Рефакторить вспомогательные методы. Благодаря рефакторингу уменьшил количество кода и улучшил его читаемость. Сложности: Мы называли методы Square, Figure, FigureOnSquare. А тут вдруг CreateGameObject, не CreateFigure, не CreateSquare, не CreateFigureOnSquare, а именно CreateGameObject как класс GameObject из самой юнити, что немного сбивает с толку. |
|||||
46 | Интерфейс. Выставка фигур |
|
|||
На этом уроке мы продолжаем подготовку к превращению пешки в одну из четырёх фигур. Теперь нам надо подготовить фигуры, в которые будем превращать. Отчёт отправил: 17535. Алексей Выполнено за 40 мин. [Показать отчёт] Научился: Подготовил методы к превращению Сложности: Переписать позицию без ошибок, вот она: "b1q1kn1r/1P1pp1Pp/5P2/8/8/1p3p2/p1PPP1pP/1R2KN1R w - - 0 1" |
|||||
47 | Интерфейс. Долгожданное превращение |
|
|||
На этом уроке мы наконец превратим нашу пешку в одну из четырёх фигур. Отчёт отправил: 17535. Алексей Выполнено за 39 мин. [Показать отчёт] Научился: Сделал превращение к которому так долго готовились. Сложности: Все немного запутанно. Так же на картинке нарисовано что может походить черный Ферзь, а он не может потому что открывается ШАГ, но походить им не дает. |
|||||
48 | Интерфейс. ЧЕТВЁРТЫЙ ФИНАЛЬНЫЙ УРОК |
|
|||
Напишите отзыв о четвёртой части курса: что получилось, что было сложным, что ещё вы добавите в программу. Отчёт отправил: 17535. Алексей Выполнено за 3 мин. [Показать отчёт] Научился: Очень интересная часть. Расчет координат, передвижение фигур, подсветка, возможные варианты ходов, драгэнддроп пригодятся во многих играх. Сложности: Делегаты |
|||||
49 | База данных. Management в студию! |
|
|||
На этом уроке мы приступаем к созданию БД для нашего сервера шахматы онлайн. Отчёт отправил: 17535. Алексей Выполнено за 7 мин. [Показать отчёт] Научился: Скачивать и устанавливать студию Сложности: Сделать скрин установки когда Managment Studio уже стоит) |
|||||
50 | База данных. Планирование |
|
|||
Мы продолжаем создание БД для нашего сервера шахматы онлайн. На данном уроке мы спроектируем схему нашей БД. Отчёт отправил: 17535. Алексей Выполнено за 1 час. 28 мин. [Показать отчёт] Научился: Проектировать БД. Сложности: Не забыть никакую мелочь чтоб потом не переделывать |
|||||
51 | База данных. Упрощение |
|
|||
Мы продолжаем создание БД для нашего сервера шахматы онлайн. На данном уроке мы упростим схему нашей БД. Отчёт отправил: 17535. Алексей Выполнено за 24 мин. [Показать отчёт] Научился: Упрощать. Раз мы отказались от всего и у нас остается только 1 таблица, то для удобства в нее можно добавить ход и полуход. Сложности: Жалко столько всего вырезать. |
|||||
52 | База данных. Созидание |
|
|||
Мы продолжаем создание БД для нашего сервера шахматы онлайн. На данном уроке мы наконец создадим нашу базу данных для онлайн шахмат. Отчёт отправил: 17535. Алексей Выполнено за 13 час. 36 мин. [Показать отчёт] Научился: Создавать таблицы Сложности: Установить SQL Server. 2017 так и не заработал. Никаких БД, только их анализ. 2014 с пол пинка |
|||||
53 | База данных. VIP. Таблицы на вырост |
|
|||
Мы продолжаем создание БД для нашего сервера шахматы онлайн. На данном уроке мы создадим дополнительные таблицы, которые понадобятся для реализации полноценной онлайн игры. Отчёт отправил: 17535. Алексей Выполнено за 37 мин. [Показать отчёт] Научился: Создавать зависимости между таблицами Сложности: Соотнести русский перевод на видео с моим английским вариантом. Некий дискомфорт |
|||||
54 | База данных. VIP. Красивая диаграма |
|
|||
На данном уроке мы нарисуем диаграмму нашей БД.
Отчёт отправил: 17535. Алексей Выполнено за 29 мин. [Показать отчёт] Научился: Составлять диаграмму зависимомстей Сложности: По кнопке добавить новую диаграмму выскакивала ошибка и получался пустой лист, но в него можно было перетащить все таблицы вручную из Object Explorer'a |
|||||
55 | База данных. ПЯТЫЙ ФИНАЛЬНЫЙ УРОК |
|
|||
Напишите отзыв о пятой части курса: что получилось, что было сложным, что ещё вы добавите в программу. Отчёт отправил: 17535. Алексей Выполнено за 4 мин. [Показать отчёт] Научился: Создавать таблицы, заполнять их, создавать между ними связи. Сложности: Установить и настроить сервер, обойти ошибки связанные с его работой, точнее неработоспособностью |
|||||
56 | Сервер. Последняя версия |
|
|||
На данном уроке мы приступаем к созданию серверной части нашего онлайн проекта по шахматам. Отчёт отправил: 17535. Алексей Выполнено за 53 мин. [Показать отчёт] Научился: Создавать контроллер. Сложности: Пришлось использовать 2 браузера, так как когда использовал вызов браузера по умолчанию, программа при закрытии закрывала и его тоже. Что тупо. Непонятно зачем они так сделали. Если мне не нужна страница по завершении программы я и сам могу ее закрыть. |
|||||
57 | Сервер. Райский Эдем - EDM |
|
|||
На этом уроке мы создадим EDM - Entity Data Model.
Отчёт отправил: 17535. Алексей Выполнено за 14 мин. [Показать отчёт] Научился: Подключать БД к проекту Сложности: Не запутаться во всех этих окнах при подключении БД |
|||||
58 | Сервер. Новая игра на JSON |
|
|||
На этом уроке мы изменим формат вывода с XML на JSON.
Отчёт отправил: 17535. Алексей Выполнено за 34 мин. [Показать отчёт] Научился: В конфигурационном файле Global.asax отключил XML и подключил JSON. Обновил контроллер GetGame и создал NewGame, теперь уже есть запись новой игры в БД. Сложности: Linq. Когда с ним не знаком самому понять как формировать запросы не очень просто. var games = db.Games.Where(g => g.Status == "play"); но тут вроде пока понятно все. |
|||||
59 | Сервер. Официант без логики |
|
|||
На этом уроке мы будем упрощать наш ChessController.
Отчёт отправил: 17535. Алексей Выполнено за 31 мин. [Показать отчёт] Научился: Создал в модели новый класс Logic, куда из контроллера перенес всю логику, теперь он не занимается чужой работой. В метод NewGame добавил создание новой игры используя ChessRules.dll Сложности: Managment Studio постоянно глючит, не мог долго поменять статус 2й игры на done, потому что при выборе EDIT оно ее просто не показывало, а при выборе SELECT показывало. Помог рестарт MS. |
|||||
60 | Сервер. Ваш ход! |
|
|||
Мы продолжаем создание серверной части для нашего проекта Шахматы по сети. На этом уроке мы реализуем выполнение ходов. Отчёт отправил: 17535. Алексей Выполнено за 2 час. 3 мин. [Показать отчёт] Научился: Сделал метод MakeMove в классе Logic и в контроллере, теперь можно играть. В конфигурации Web API поменял route с id на move, чтоб код смотрелся более логично Сложности: Наверное нужно запоминать последний ход, и если после него статус игры поменялся на done игру закончить, показать обоим игрокам, спросить начинать ли новую партию и только тогда ее начинать. |
|||||
61 | Сервер. Шахматная Идемпотентность |
|
|||
Мы продолжаем создание серверной части для нашего проекта Шахматы по сети. На этом уроке мы обсудим Шахматную Идемпотентность. Напишите своими словами, что такое Идемпотентность. Отчёт отправил: 17535. Алексей Выполнено за 27 мин. [Показать отчёт] Научился: Добавил метод GetGameById, а иначе как мне кажется все желающие при двух или более открытых играх играли бы все в первую или последнюю, потому как ID игры никак не был задействован. Изменил роут в Web API под новый функционал. Добавил в MakeMove проверки на корректность хода: когда партия уже закончена - ходить нельзя, когда такой игры нет, играть в нее тоже нельзя. Сложности: Идемпотентность что-то очень похожее на синглтон. При попытке повторить операцию получаем тот же ответ что получали прошлый раз. |
|||||
62 | Сервер. Китайская ничья |
|
|||
Мы продолжаем создание серверной части для нашего проекта Шахматы по сети. На этом уроке мы реализуем завершение игры при сдаче. Отчёт отправил: 17535. Алексей Выполнено за 1 час. 42 мин. [Показать отчёт] Научился: Сделал возможность окончания игры. Она же "сдаться" |
|||||
63 | Сервер. ШЕСТОЙ ФИНАЛЬНЫЙ УРОК |
|
|||
Напишите отзыв о шестой части курса: что получилось, что было сложным, что ещё вы добавите в программу. Отчёт отправил: 17535. Алексей Выполнено за 21 мин. [Показать отчёт] Научился: Спроектировал БД, но оно не пригодилось, хирург отсек все лишнее, теперь все девочки. Создал таблицы и связи между ними, потом диаграмму по этому поводу нарисовал. Заполнил таблицы тестовыми данными. Подключил БД к проекту. Создал контроллер и модель для работы с данными на основе EF. Добавил в модель класс Logic с логикой работы сервера. В конфигурационном файле Global.asax отключил XML и подключил JSON. В конфигурации Web API поменял route с id на move, чтоб код смотрелся более логично, затем и id добавил, чтоб обращаться к конкретной игре. Добавил метод MakeMove проверки на корректность хода и самого хода. Узнал все про Идемпотентность. Реализовал завершение игры при сдаче. Сложности: Были проблемы с установкой сервера БД. Также для проверки работы сервера нужно использовать 2 браузера, потому как при остановке программы, она закрывает и браузер в котором проводился тест, и если использовать браузер по умолчанию, то оно его закроет вместе с уроком. При переоткрытии браузера урок нельзя сдать пока не пройдет время урока, только тогда появится кнопка сдачи урока. |
|||||
64 | Хостинг. Регистрация аккаунта |
|
|||
Приступаем к размещению нашего сервера в интернете. Для этого нам потребуется Windows-хостинг с поддержкой ASP.NET Чтобы мы были на одной волне и смогли проработать всё вместе, пожалуйста зарегистрируйтесь на этом хостинг-сервисе: Ссылка для регистрации на хостинге: https://www.reg.ru/?rlink=reflink-30461 Отчёт отправил: 17535. Алексей Выполнено за 9 мин. [Показать отчёт] Научился: Зарегистрировался на хостинге reg.ru Сложности: Ни кнопки ни ссылки не открываются когда по ним щелкаешь, действия происходят только когда жмешь "открыть в новой вкладке" |
|||||
65 | Хостинг. Лучше заплатить |
|
|||
На этом уроке мы выберем план, доменное имя, укажем контактную информацию. Отчёт отправил: 17535. Алексей Выполнено за 3 час. 29 мин. [Показать отчёт] Научился: Платить. |
|||||
66 | Хостинг. Доступ по FTP |
|
|||
На этом уроке мы установим пароль для подключения к хостингу по FTP. Напишите, какой FTP-клиент вы используете и приложите скриншот вашей FTP программы с подключением к хостингу. Отчёт отправил: 17535. Алексей Выполнено за 1 час. 12 мин. [Показать отчёт] Научился: Заливать файлы по FTP |
|||||
67 | Хостинг. Публикация проекта |
|
|||
На этом уроке мы настроим публикацию проекта из Visual Studio. Выполните все шаги и опубликуйте проект. Приложите скриншот Visual Studio с логами публикации и содержимое FTP каталога после публикации. Отчёт отправил: 17535. Алексей Выполнено за 25 мин. [Показать отчёт] Научился: Публиковать проект |
|||||
68 | Хостинг. Перенос базы данных |
|
|||
На этом уроке мы перенесём базу данных на сервер и подключимся к ней из скрипта. Отчёт отправил: 17535. Алексей Выполнено за 2 дня 8 час. 35 мин. [Показать отчёт] Научился: Делать копию БД и заливать ее на хостинг Сложности: Проблемы с оплатой. Решал их сначала с банком, потом с Reg.ru. Два дня было потеряно. |
|||||
69 | Хостинг. VIP. Двойные стандарты |
|
|||
На этом уроке мы обсудим нюансы с публикацией очередной версии серверной части на хостинге. Отчёт отправил: 17535. Алексей Выполнено за 45 мин. [Показать отчёт] Научился: Делать так чтоб локальные изменения при разработке/допиливании проекта не затирали релизную ConnectionString, модифицируя web.Release.config. Сложности: E:\MyCSharpProj\ChessAPI\ChessAPI\Web.Release.config(19,121): An error occurred while parsing EntityName. Line 19, position 121. Ошибка во время публикации и все такое из-за того что студии не понравился амперсант в пароле Password=Sl&av039. Пришлось удалять БД и перезаливать и менять пароль так чтоб студии нравилось |
|||||
70 | Хостинг. СЕДЬМОЙ ФИНАЛЬНЫЙ УРОК |
|
|||
В этой части мы разместили сервер не хостинге. Шахматная серверная программа нашла пристанище в интернете. Наконец-таки можно будет переходить к игре по сети. Напишите в отчёте, всё ли получилось и по какому адресу можно найти ваш серверный API. Отчёт отправил: 17535. Алексей Выполнено за 37 мин. [Показать отчёт] Научился: Размещать сайт на хостинге. Мой серверный API можно найти по адресу: xlab.website/api/chess. Зарегистрировался на хостинге reg.ru, купил домен на год и оплатил хостинг на месяц. Подключился к хостингу по FTP через Total Commamder. Опубликовал проект через Visual Studio. Сделал бэкап локальной БД, перенс ее на хостинг и развернул там. Изменил релизную версию веб конфига так, чтобы при деплое не затиралась строка подключения и как следствие не рвалась связь с БД. Сложности: Оплатить. Не получалось с карты, не получалось через робокассу, много чего не получалось. В итоге получилось через пейпал с двойной конвертацией гривны/доллары/рубли. В последнем уроке возникла сложность с изменением конфига. E:\MyCSharpProj\ChessAPI\ChessAPI\Web.Release.config(19,121): An error occurred while parsing EntityName. Line 19, position 121. Ошибка во время публикации и все такое из-за того что студии не понравился амперсант в пароле Password=Sl&av039. Пришлось удалять БД и перезаливать и менять пароль так чтоб студии нравилось. |
|||||
71 | Клиент. Достучаться до облака |
|
|||
На этом уроке мы приступаем к завершающему этапу по созданию клиент-серверной игры "Онлайн шахматы". Отчёт отправил: 17535. Алексей Выполнено за 3 час. 25 мин. [Показать отчёт] Научился: Обращаться из клиента к серверу и получать ответ. Сложности: Видимо для работы с JSON есть в C# специальные классы как раньше было для работы с XML. Поэтому подключить этот класс и по ключу FEN получить его значение. |
|||||
72 | Клиент. Дедовские методы |
|
|||
На этом уроке мы выделим FEN из полученной json строки.
Отчёт отправил: 17535. Алексей Выполнено за 23 мин. [Показать отчёт] Научился: Партисть JSON, а конкретно вырезать из него FEN |
|||||
73 | Клиент. Ход в мешке |
|
|||
На этом уроке мы научимся отправлять на сервер наш ход.
Отчёт отправил: 17535. Алексей Выполнено за 4 час. 2 мин. [Показать отчёт] Научился: Отправлять ход на сервер. Играть в 2 клиентских окна круто. Сложности: В видео сделали строку сначала без слеша, запустили работает, потом поставили зачем-то слеш. public const string address = "http://xlab.website/api/chess/"; Я же как настоящий ленивый программист подумал если и так работает, то чей-то я буду слеш добавлять, делать лишнее телодвижение. А дальше когда добавили ID и ход оно на видео работало, а у меня почему-то нет. Ну не долго тупил, вспомнил про слеш, добавил и заработало. |
|||||
74 | Клиент. Серверные пешки |
|
|||
На этом уроке мы используем ранее созданный класс Client() в наш проект на Unity, чтобы можно было поиграть с GUI. Отчёт отправил: 17535. Алексей Выполнено за 17 час. 23 мин. [Показать отчёт] Научился: Считывать позицию с сервера в Unity Сложности: Запустить нужную версию Unity. Не знаю как вышло что после переустановки винды я поставил версию 2017, а не 2018. Запускаю ярлык 2018.2, запускается 2017 версия, прямо чудо какое-то. В итоге скачал Unity заново и уже новую версию 2018.2.1 |
|||||
75 | Клиент. Следы невиданных ходов |
|
|||
На этом уроке мы реализуем отправку хода через GUI.
Отчёт отправил: 17535. Алексей Выполнено за 17 мин. [Показать отчёт] Научился: Посылать ход на сервер из клиента на юнити. Сложности: В голове и в коде все упорядочено как на картинке. |
|||||
76 | Клиент. Фоновое обновление |
|
|||
На этом уроке мы реализуем функцию обновления текущего состояния на доске. Отчёт отправил: 17535. Алексей Выполнено за 1 день 4 час. 40 мин. [Показать отчёт] Научился: Обновлять позицию в фоновом режиме. Портировал под веб и андроид. На андроиде приложение показывает заставку юнити и черный экран. Под веб не работает то ли из-за вебклиента и нужно переписывать код под UnityWebRequest, толи из-за нашего рефреша в фоне, а конкретно из-за инвок. WebGL не любит потоки и не хочет с ними работать. В итоге приложение работает пока только под десктоп. Сложности: Найти баг которого не было. То ли сервер лаганул, то ли мой комп, но ход сделанный в консоли не отображался в клиенте на юнити. Поиск ошибки ни к чему не привел, а после рестарта обоих клиентов все само заработало. Билд под WebGL при запуске оповещает о: An error occurred running the Unity content on this page. See your browser Javascript console for more info. The error was: Uncaught SyntaxError: Unexpected token < Было желание попробовать переделать код, но в свете предстоящего рефакторинга, разумнее оставить как есть, а не добавлять еще новых проблем потом с разными кусками кода. |
|||||
77 |
![]() |
|
|||
Поздравляю вас с завершением нашего эпического курса по созданию клиент-серверной игры в шахматы по сети! Запишите живое видео, где будет видно, что в игру можно поиграть с двух разных устройств/компьютеров. Расскажите на видео о своём подвиге. Чем курс понравился, что было сложно, что было интересно, что можно будет добавить. Отчёт отправил: 17535. Алексей Выполнено за 16 час. 14 мин. [Показать отчёт] Научился: Делать шахматы! Сложности: Картинка к этому уроку призывает молчать, и в большинстве случаев это лучшая тактика, но в этот раз я буду говорить. Видеообзор: jIsk6eO4IRE |
|||||
78 | Рефакторинг. С чего начать? |
|
|||
На этом уроке мы начинаем рефакторинг кода клиентской части на Unity. Отчёт отправил: 17535. Алексей Выполнено за 34 мин. [Показать отчёт] Научился: PickObject и DropObject находятся в классе Board, исходя из логики работы да и названия этих методов, они тоже хотят в DragAndDrop(). Сложности: Отвлекает то что код немного разный, у нас в папке скриптов и в коде еще и класс клиент есть, но пака все работает. |
|||||
79 | Рефакторинг. Координатные трансформации |
|
|||
На этом уроке мы продолжаем рефакторинг и сейчас мы выделим статические элементы. Отчёт отправил: 17535. Алексей Выполнено за 1 час. 13 мин. [Показать отчёт] Научился: Рефакторить. Создал мощный класс Coords куда перенес все действия над координатами и их преобразования. Теперь действия с расстановкой фигур и их перемещением выглядят гораздо проще. Понятнее. Сложности: Все преобразования стали понятными и удобными. Кроме этого: ShowSquare(Coords.GetX(move.Substring(3,2)), Coords.GetY(move.Substring(3,2)), true); то есть оно тоже могло бы быть ничего если move.Substring(3,2) как то поменять, ну или оставить как было move[1] move[2] или move[3] move[4], было понятней с каким символом мы работаем. Но это мелочи, на общем фоне почти не заметные. |
|||||
80 | Рефакторинг. Чёрный ящик |
|
|||
Мы продолжаем рефакторинг нашего кода. На данном уроке мы займёмся словарями. Отчёт отправил: 17535. Алексей Выполнено за 26 мин. [Показать отчёт] Научился: Делать контейнер. А конкретно Box Сложности: Особого профита от бокса пока не заметил. Вот с координатами было самое оно, а тут пока похоже на другую форму записи, ну посмотрим что будет дальше. |
|||||
81 | Рефакторинг. Интерфейсная прослойка |
|
|||
Мы продолжаем рефакторинг нашего кода. На данном уроке мы создадим интерфейс ICreatable. Отчёт отправил: 17535. Алексей Выполнено за 19 час. 25 мин. [Показать отчёт] Научился: Создавать интерфейс ICreatable. Начинал урок вечером, потом утром пересмотрел еще раз как было рекомендовано. Сложности: А какая разница где мы будем вызывать в боксе или в боарде? |
|||||
82 | Рефакторинг. Ящик с фигурами |
1 тест |
|||
Мы продолжаем рефакторинг нашего кода. На данном уроке мы сделаем класс Box() абстрактным. Отчёт отправил: 17535. Алексей Выполнено за 30 мин. [Показать отчёт] Научился: Делать ковчег BoxFigures и запихнул туда каждой твари по паре. Класс отдельно для фигур хорошая идея. Сложности: Теперь на случай если что-то поломается папку со скриптами перед изменениями копирую. |
|||||
83 | Рефакторинг. Многоклеточная сущность |
|
|||
Мы продолжаем рефакторинг нашего кода. На данном уроке мы создадим класс BoxSquares(). Отчёт отправил: 17535. Алексей Выполнено за 22 час. 42 мин. [Показать отчёт] Научился: Рефакторить клеточки и превращения. В методе ShowPromotionFigures не придумал как форичем обойти все, только 2 форами, кода стало больше и не очень красиво выглядит, такой себе рефакторинг получился. И SetSprite захардкодил SetSprite(promots.GetGameObject(2, 8), "Q"); Наверное этот метод вообще стоит перенести в BoxFigures. Сложности: Какими горячими кнопками вы вызываете окошко для быстрого перехода между классами? |
|||||
84 | Рефакторинг. Вынос переноса |
|
|||
Мы продолжаем рефакторинг нашего кода. На данном уроке мы создадим класс Box().SetPosition(). Отчёт отправил: 17535. Алексей Выполнено за 27 мин. [Показать отчёт] Научился: Делать перенос SetPosition Сложности: Не очень понял зачем) |
|||||
85 | Рефакторинг. Спрайт, не дай себя заинтерфейсить |
|
|||
Мы продолжаем рефакторинг нашего кода. На данном уроке мы создадим класс Box().SetSpriteAt(). Отчёт отправил: 17535. Алексей Выполнено за 50 мин. [Показать отчёт] Научился: Добавил в интерфейс возможность установки спрайта. И в бокс метод SetSpriteAt. Теперь стало немножко чище в коде и немножко удобнее. Ну и если такая фигура уже стоит и оно ее не перерисовует, то программа работает чуть быстрее. Сложности: Возможно нужно было создать еще 1 интерфейс, а не добавлять в этот же? Хотя по смыслу они более менее близки. |
|||||
86 | Рефакторинг. Клетка в клетке |
|
|||
Мы продолжаем рефакторинг нашего кода. На данном уроке мы перенесём и разделим класс ShowSquare(). Отчёт отправил: 17535. Алексей Выполнено за 32 мин. [Показать отчёт] Научился: Показывать и помечать квадратики с помощью методов ShowSquare и MarkSquare. Кода стало меньше, он стал понятнее и красивее. Сложности: Неожиданно для себя при проверке поставил мат, теперь началась новая партия, много пока не проверить, но подсветка работает точно. |
|||||
87 | Рефакторинг. Шахматная независимость |
|
|||
Мы продолжаем рефакторинг нашего кода. На данном уроке мы перенесём некоторые функции в класс BoxSquares(). Отчёт отправил: 17535. Алексей Выполнено за 42 мин. [Показать отчёт] Научился: Устранять лишнюю зависимость, связанность. Перенес UnmarkSquares() и MarkSquaresFrom/To() из Board() в BoxSquares(). И передаю им параметром список возможных ходов chess.YieldValidMoves() Сложности: Опять провел черную пешку и поставил внезапный мат. и даже не успел рассмотреть что к чему, как сразу новая партия. |
|||||
88 | Рефакторинг. Хоровод из четырёх фигур |
|
|||
Мы продолжаем рефакторинг нашего кода. На данном уроке мы порефакторим функционал превращения пешки. Отчёт отправил: 17535. Алексей Выполнено за 1 час. 23 мин. [Показать отчёт] Научился: Делать константы. Так как у меня был сделан class BoxPromots : Box ранее, код немного отличается. Добавил вместо магических цифр константы. Сложности: не стал переделывать код так как у вас, получилось там где у вас методы ГЕТ у меня СЕТ |
|||||
89 | Рефакторинг. Волшебник изумрудного ящика |
|
|||
Мы продолжаем рефакторинг нашего кода. На данном уроке мы создадим класс BoxPromots(). Отчёт отправил: 17535. Алексей Выполнено за 2 час. 23 мин. [Показать отчёт] Научился: Сражаться с багами. В итоге я все-таки победил. Из-за невнимательности и копипаста потерял 2 часа. Закончил перенос всего что качается превращений в BoxPromots. Так же сделал код чище внеся такую строчку: const int xMax = 6; // xMin + promFigures.Length; теперь во многих местах читается лучше. Сложности: Функция рекурсивно вызывала себя и переполняла стек. public string GetBlackProFigure(int x) { return GetBlackProFigure(x).ToLower(); } |
|||||
90 | Рефакторинг. Потерянная пешка |
|
|||
На этом уроке мы вернёмся к нашей библиотеке для исправления старой ошибки: пешка может превратиться в чужую фигуру ил остаться пешкой. Отчёт отправил: 17535. Алексей Выполнено за 4 час. 24 мин. [Показать отчёт] Научился: Тестировать длл. Урок интересный, в процессе исправления бага вылез еще один, который тоже пофиксили, но как оказалось это не все) "FEN":"rQbk1bBr/pp2q1pp/8/8/7P/8/PP1K2P1/RnBQ1BrR w - - 0 13" Сложности: 1) В тяжелой стрессовой ситуации, когда король под ШАХом героический офицер может обойти ограничение (fm.SignX == 0 || fm.SignY == 0) && CanStraightMove(); и таки пойти по прямой Bc1b1. 2) Король же, как истинный джентельмен, уходя от ШАХа никогда не подставит под ШАХ своего оппонента Kd2c2. |
|||||
91 | Рефакторинг. Класс шахматной игры |
|
|||
ЭТОТ УРОК НУЖНО ПЕРЕЗАПИСАТЬ. ДЛЯ ЭТОГО МНЕ НУЖЕН ПРОЕКТ ДО ЕГО ВЫПОЛНЕНИЯ. ПОЖАЛУЙСТА ПЕРЕД ВЫПОЛНЕНИЕМ ЭТОГО УРОКА СОЗДАЙТЕ АРХИВ ПРОЕКТА И ПРИШЛИТЕ ЕГО МНЕ. Мы на финишной прямой нашего рефакторинга. На данном уроке мы вынесем логику игры в отдельный класс Game(). Отчёт отправил: 17535. Алексей Выполнено за 2 час. 37 мин. [Показать отчёт] Научился: Создавать управляющий класс Game, что-то типа контроллера, чтоб класс боард не был связан с шахматами. Класс клиента тоже из доски в игру перенес. Сложности: Запутался конечно, когда в примере одно, а у меня другое) Запутался что откуда и зачем вызывать. Без пол литры или карты не разобраться. |
|||||
92 | Рефакторинг. Двухэтажное превращение |
|
|||
Мы всё ближе и ближе к финишу нашего рефакторинга. На данном уроке мы вынесем оставшуюся логику игры в класс Game(). Отчёт отправил: 17535. Алексей Выполнено за 2 дня 22 мин. [Показать отчёт] Научился: Во время поиска ошибки исправил баг который тянется с 26го урока. Иногда слон мог ходить по прямой, то есть когда копировали ограничение хода ладьи не только равно нужно было поменять на неравно, но и ИЛИ в условии на И, чего я тогда не сделал. Очень опасные ошибки с копипастом. Стопорнулся на два дня, но они не прошли даром) Сложности: Не хотели пешки превращаться, как ты их не уговаривай. Несколько раз пересмотрел все уроки которые касаются превращения. Свой код удалил, хоть он мне и нравился, но чуда не произошло. А ведь в 90м уроке мы поменяли dllку. В юнити ее добавили, а на сервер нет. Евгений Витольдович, допишите в описание 90го урока и последующих что не плохо бы и на сервере ее поменять. Это бы сэкономило мне пару дней) |
|||||
93 | Рефакторинг. Финальное причёсывание |
|
|||
Мы поздравляем тебя с завершением рефакторинга. На данном уроке мы причешем наши скрипты. Отчёт отправил: 17535. Алексей Выполнено за 1 час. 30 мин. [Показать отчёт] Научился: Мы все живем в матрице и все предопределено. Свобода выбора фикция, это показывает консольный клиент. Какую бы фигуру в юнити мы не выбрали все равно получим Ферзя. Программа как бы намекает, да че ты тупишь, я знаю что ферзь лучше. Сложности: Надо будет пересмотреть получасовой урок про пешку и превращение в длл полностью а пока решением было в CheckOnPromotion() поменять в 1й строке if (promotion != Figure.none) return; равно на неравно. Потому что если промошен не пустой, то мы его затирали и Ферзем, а если пустой выходили. |
|||||
94 | Рефакторинг. Последний аккорд |
|
|||
На этом уроке мы заканчиваем наш эпический курс. Получилось здорово. Я доволен результатом. Надеюсь, вы тоже. Мы проделали огромную работу. Каждый стал чуточку умнее и опытнее. Отчёт отправил: 17535. Алексей Выполнено за 58 мин. [Показать отчёт] Научился: Оптимизировать. Теперь используя состояние шахматы работают быстрее из-за того что не перерисовуют экран когда не надо.<br> "Каждый стал чуточку умнее и опытнее." Не знаю на счет других, но по моим ощущениям я стал умнее на порядок. Прямо мегамозгом себя чувствую.<br> "Получилось здорово. Я доволен результатом." А я как доволен! Спасибо Евгений Витольдович!!! От души!<br> Курс занял ровно месяц, с 12го июля до 12 августа, можно было чуть быстрее, если баги оставлять на потом, но и это тоже была довольно интересная часть курса. Так сказать работа над ошибками. Теперь еще раз пробежаться по проблемным местам, разобраться с делегатами и можно пилить свою игру.<br> Я часто прохожу всякие курсы, мне нравится учиться. На данный момент это самый интересный курс который я проходил. Рекомендую! Сложности: 1. Самым трудным было превращение, боролся с ним 2 дня. Потом закинув ддл и на сервер поборол, но кого бы я не выбирал при превращении, всегда получался ферзь. Поборол изменением условия в длл для превращении при шаге, нужно будет еще попроверять. <br> 2. В свете 2х фиксов - ход слона и превращение нужно заново провести супертесты, у меня начинались несоответствия с 3й итерации, теперь должно быть гут.<br> 3. Билд под андроид показывал черный экран, нужно разобраться.<br> 4. Билд под WebGL говорил про ошибку токена и тут 2 варианта: убрать инвок из боарда и закинуть рефреш в апдейт и посмотреть было ли дело в потоках, которые не одобряет вебгл или все еще глубже и нужно менять вызовы WebRequest на UnityWebRequest. |
|||||
95 | VIP. Меню DimanDOSа |
|
|||
1. Создание и размещение кнопки вызова меню и панели с кнопками. 2. Программирование действий по нажатиям кнопок - создание функций и привязка их к событиям нажатия. Отчёт отправил: 17535. Алексей Выполнено за 4 час. 11 мин. [Показать отчёт] Научился: Делать меню. Димандос реально крут. Теперь у меня тоже есть меню, спасибо.<br> А еще можно ускорить все это дело если убрать проверку, ведь нам на самом деле не интересно какое значение переменной, нам просто нужно его заменить на противоположное. Так же style.active depricated(устарело) и напрямую обращаться к полю не комильфо(на видео строка подчеркнута зеленым цветом), может это связанно с безопасностью, может с оптимизацией кода, теперь они предлагают устанавливать флаг через метод style.SetActive(). В связи со всем вышеперечисленным я немножко переделал код и вышло так:<br> [SerializeField]<br> private GameObject style;<br> bool state = false;<br> public void Style()<br> {<br> state = !state;<br> style.SetActive(state);<br> }<br> Сложности: Когда-то делал игру, и тоже добавил открытые поля. Там у меня были кубы с разными текстурами, что-то вроде препятствий: куб с черной текстурой это скала, с синей вода. Стандартные кубы размером 1, как их лепит сам редактор без изменений. Когда я в очередной раз запустил игру вместо кубов у меня появились огромные параллелепипеды которые уходили далеко вверх и вниз под игровое поле, потом из-за того что они такие здоровые они начали падать, валить друг-друг друга, в общем была какая-то вакханалия. Это произошло из-за открытых public полей. Теперь я использую, в случае если к этим полям конечно не нужен доступ из вне, такую запись:<br> [SerializeField]<br> private GameObject menu;<br> вместо<br> public GameObject menu; |
|||||
Итого: 95 видеоуроков |
17 час. 04 мин. 18 тестов |
19 чел. | |||
Финалисты: Дмитрий, Yefim, Tekashnik, Иван Воронин, ser2018, Алексей, Дмитрий Б, alklokov, FireWolf, Andrew, Max, Новопашин Владимир, Красимир Зорбов, Антон, Евгений, Anatoli, Freud, Алена, MaxB . |