# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
|
|||
Мы начинаем создание многопользовательской игры "Морской Бой". В игру можно будет играть одновременно четырём участникам. Будет реализована клиентская часть с графическим интерфейсом на C#. Будет разработан протокол общения клиентских программ с сервером. Будет спроектирована и создана серверная база данных на MySQL. Будет написана серверная часть отработки протокола на PHP. Будет создан клиент-класс отработки протокола на C#. Будет реализована анимация всех событий в игре. На этом уроке рассказано о структуре проекта. Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 10 мин. [Показать отчёт] Научился: Повторил работу с редактированием изображений. Сложности: Найти и подготовить картинки. Комментарии: Понемногу осваиваю работу в редакторе GIMP, полезный навык. |
|||||
2 | Интерфейс - Первый кораблик |
|
|||
На этом уроке мы начнём создание проекта - создадим проект, настроим форму, прикрепим иконку. На самой форме разместим главную картинку - pictureMain. А ещё нарисуем 4 картинки и добавим их в ресурсы проекта. Далее создадим графику, подготовим картинки и научимся их выводить на основную картинку. Под конец урока сделаем размещение корабликов по щелчку мышки. Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 30 мин. [Показать отчёт] Научился: Обработка событий рисования и клика мышкой в технологии QML. Сложности: Нарисовать картинки при клике мышкой. Комментарии: В качестве эксперимента, решил создавать клиентскую часть игры с использованием технологии QML. Интерфейс формы описывается на декларативном языке, а логика динамической прорисовки и обработки кликов мышки реализована на JavaScript. |
|||||
3 | Интерфейс - А на море корабли |
|
|||
На этом уроке мы нарисуем море с кораблями. Пока у нас не будет матриц, размещение объектов будет случайным. В конце урока напишем алгоритм позиционирования курсора мышки над нашим морем и сделаем размещение "ударов" по морю. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 10 мин. [Показать отчёт] Научился: Попрактиковался с математическими функциями Math.random, Math.floor в javascript. Сложности: Сложностей не было. Комментарии: Понравился способ выбора случайной картинки. |
|||||
4 | Графика - Карта Морского флота |
|
|||
На этом уроке мы создадим карту морского флота. Это будет двумерный массив, в каждой клетке которого записано одно из четырёх значений. Мы напишем алгоритм размещения кораблей и сделаем отображение карты на экране. Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 40 мин. [Показать отчёт] Научился: Создавать аналог enum в javascript. Повторил работу с двумерными массивами. Сложности: Создать аналог enum. Комментарии: Методика Евгения Витольдовича работает: минимум теории, сразу к практике. Теории именно столько, сколько нужно для решения задачи. В итоге, задача решена, однако в голове каша, нехватка некоего стержня или опоры для обобщения знаний. Я так полагаю, что в такие моменты как раз следует немного отвлечься от практики и почитать теорию. |
|||||
5 | Графика - Выстрелы по Кораблям |
|
|||
На этом уроке мы наконец-таки сможем немножко поиграть с компьютером и потопить весь компьютерный флот! :) Сначала мы уберём вывод кораблей на экран, потом переделаем функцию обработки клика мышки. Добавим проверку точности удара и вывода результата. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 50 мин. [Показать отчёт] Научился: Выводить диалоговое окно с сообщением, немного попрактиковался работе в дизайнере форм. Сложности: Особых сложностей не было. Комментарии: Добавил вывод небольшой статистики: количество выстрелов, попаданий, оставшихся кораблей. Получилась работающая игровая программа, в которую можно поиграть. Идем дальше. |
|||||
6 | Графика - Рефакторинг |
|
|||
На этом уроке мы займёмся рефакторингом кода. Создадим класс Graph, в который перенесём все операции, связанные с графикой. Код станет чище, понятней, хотя придётся повозиться с его оптимизацией. Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 20 мин. [Показать отчёт] Научился: Много чему: создавать сигналы, вызывать их, создавать свойства, обращаться к ним, постигал азы модульности в qml+javascript. Сложности: Добиться модульности: Графика и Модель игры в отдельных javascript файлах, их вызывает qml файл-контроллер, а его в свою очередь главный qml файл, хитросплетения-велосипеды однако. Еще был момент: весь код написал, все должно было заработать, но не работало. Почитал в книжке по Qt пример, нашел ошибку, исправил, заработало, ура! Комментарии: Полученным решением доволен, графика и модель игры в разных файлах, независимы друг от друга, тема урока по рефакторингу очень даже оказалась к месту, спасибо. |
|||||
7 | Анимация - Полёт снаряда |
|
|||
На этом уроке мы составим список всех анимаций, которые будут в нашей игре. Твоя задача - нарисовать все кадры полёта снаряда.
Отчёт отправил: 7276. Ильшат Выполнено за 50 мин. [Показать отчёт] Научился: Масштабировать, поворачивать изображение в GIMP. Сложности: Выбрать картинку. Комментарии: Сделал 20 кадров анимации, на первых кадрах выполняется увеличение ядра и его вращение. В последующих кадрах просто вращение. |
|||||
8 | Анимация - Отображение кадров |
|
|||
На этом уроке мы создадим первую анимацию в нашем проекте. Это будет летящий снаряд. Мы рассмотрим несколько способов его отображения, а также добавим его перемещение. Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 10 мин. [Показать отчёт] Научился: Создавать анимации перемещения, изменения свойств объектов в QML. Сложности: Анимацию перемещения сделал быстро, а вот с анимацией сменой картинок было не так очевидно, первые варианты были громоздкими, искал альтернативы. Комментарии: От себя добавил настройку конечной цели полета снаряда: место щелчка мышкой. Начало полета - всегда левый верхний угол карты. Получилось интересно. |
|||||
9 | Анимация - Полёт по таймеру |
|
|||
На этом уроке мы добавим таймер и реализуем полёт снаряда через функцию его события. Для этого в функцию таймера нужно будет разместить внутренности цикла, а также добавить проверки на начало и окончание полёта снаряда. Потом мы оформим полёт снаряда в ту клетку моря, по которой был щелчёк мышки. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 50 мин. [Показать отчёт] Научился: Использование Math.sqrt, динамический расчет времени анимации в зависимости от скорости снаряда и расстояния полета. Сложности: Сложностей не было. Комментарии: В моем случае нет таймера, анимация встроена в сам язык QML и мне достаточно задать начальное, конечное значение переменной и время анимации; удобный подход. Меня не устраивало то, что снаряд двигается с разными скоростями в зависимости от требуемого расстояния, то есть время анимации жестко задано и период срабатывания "таймера" управляет скоростью снаряда. Кроме того, предложенный в уроке способ подбора значений для сокращения чисел в формулах это конечно круто, магия и все дела, но в данном случае движение снаряда описывается обычными физическими законами - кинематикой. Как известно, координаты объекта в случае равномерного движения вычисляются по простой формуле, s = s0 + vt. Необходимо выразить t и установить в качестве времени анимации, остальные переменные известны. |
|||||
10 | Архитектура - Перезагрузка проекта |
|
|||
На этом уроке мы начнём всё заново. Но уже на другом, качественно новом уровне. Проработаем архитектуру будущей программы. Создадим новый проект и создадим класс Ocean. Пока программа будет простой, самое главное в этом уроке - понять архитектуру проекта, увидеть весь лес как бы сверху. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 30 мин. [Показать отчёт] Научился: Попрактиковался в создании диаграмм на draw.io Сложности: Продумать разные варианты архитектуры проекта, в результате остановился на варианте из урока. Комментарии: На мой взгляд, для этого урока, для планирования, следует выделить больше времени - до часа, с интенсивным обменом мнений между участниками вебинара для объяснения выбора той или иной архитектуры. Конечно, у Евгений Витольдовича есть своя идея, она основная и на ее основе строится будущий проект, чтобы по окончанию вебинара был конкретный результат планирования, а не хаос. На вчерашнем вебинаре по тетрису Евгений Витольдович как обычно сказал "У вас есть выбор, либо пишете самостоятельно, либо с нами и нашей поддержкой". И еще раз сделал упор на том, что доступ к урокам последовательный. Эти две идеи очень кстати подошли в моем случае для этого урока, так как я чрезмерно продумал архитектуру проекта, излишне обобщил, забегал вперед и готов был самостоятельно написать весь Морской флот. Но я подписывался на этот курс для обучения, получения новых решений в видеоуроках и пошаговом выполнении с небольшими конечными целями. Поэтому советую формулистам не увлекаться изменением архитектуры на первых уроках. К концу проекта, когда уже будет получена реализация, можно придумать свое решение. P.S. Отчет отправляю повторно, почему-то не могу загрузить новые скрины, сайт подставляет старые скриншоты. |
|||||
11 | Архитектура - Карта Пиратов |
|
|||
На этом уроке мы создадим карту Пиратов, определимся с условными обозначениями (enum), определим отдельные матрицы для размещения кораблей и отметки совершённых по ним ударов. Создадим метод для размещения кораблей и потестируем всё это в пошаговом режиме. Также добавим статистические переменные, настоящие пираты должны знать сколько было кораблей и сколько осталось. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 20 мин. [Показать отчёт] Научился: Повторил использование "предохранительного клапана" для цикла генерирующего случайное число. Создание матрицы на основе комбинаций значений нескольких типов Enum. Сложности: Сложностей не было. Комментарии: Понравилось создание матрицы Icons на основе Ships и Fires. |
|||||
12 | Архитектура - Наследие картинок |
|
|||
На этом уроке мы займёмся картинками. Создадим класс Box, унаследованный от PictureBox и настроим его для использования в нашем проекте. Далее, из него мы унаследуем классы для каждой из картинок. Самое сложное в этом уроке - уловить идею наследования и понять, почему и как эти картинки выводятся на экран. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 10 мин. [Показать отчёт] Научился: Повторил работу с ресурсами программы, выводом и позиционированием изображения на форме. Сложности: Сложностей не было. Комментарии: Интересная идея, для каждой картинки создать свой отдельный тип. |
|||||
13 | Архитектура - Фабрика картинок |
|
|||
На этом уроке мы настроим вывод карты на экран. Нам понадобится фабрика картинок - статический метод Box.Create и волшебная функция превращения EnumShips x EnumFires в EnumIcons. Отчёт отправил: 7276. Ильшат Выполнено за 35 мин. [Показать отчёт] Научился: Использовать фабрику картинок Box.Create(). Сложности: Сложностей не было. Комментарии: Понравилась работа "предохранительного клапана" и простота изменения режимов игры. |
|||||
14 | Архитектура - Мышкой по кораблям |
|
|||
На этом уроке мы научимся по щелчку мышки стрелять по кораблям. Для этого нам понадобится создать обработчик MouseClick, и подцепить его к каждой картинке. Используя делегаты мы будем свистать всех на верх - до класса Form1, из которого будем спускаться по иерархии опять вниз, для пометки выстрела и отображения его на карте. Отчёт отправил: 7276. Ильшат Выполнено за 50 мин. [Показать отчёт] Научился: Повторил обработку события клика мышки, работу с делегатами. Сложности: Проблем не было. Комментарии: Все хорошо и понятно объясняется. |
|||||
15 | База Морского Флота - INFO |
|
|||
На этом уроке мы начнём проектировать Базу данных серверного флота. Пока мы создадим эскиз только для одной таблицы - info, в которой будет поле status. Для него мы составим схему состояний, и условия перехода из одного состояния в другое. Отчёт отправил: 7276. Ильшат Выполнено за 30 мин. [Показать отчёт] Научился: Идея сохранения настроек игры в отдельной таблице базы данных. Сложности: Проблем не было. Комментарии: Короткий и понятный урок, идем дальше. |
|||||
16 | База Морского Флота - SHIP |
|
|||
На этом уроке мы создадим таблицу для хранения координат кораблей и их состояния. В таблице ship будет 5 полей. Отдельное внимание уделено вопросу перезарядки пушек. Отчёт отправил: 7276. Ильшат Выполнено за 25 мин. [Показать отчёт] Научился: Идея использования составного ключа из трех полей вместо id. Сложности: Сложностей не было. Комментарии: Понравился способ проверки готовности корабля к выстрелу, используя поле CoolTick. |
|||||
17 | База Морского Флота - GAME |
|
|||
На этом уроке мы создадим таблицу событий в нашей игре, в которой будут хранится транзакции всех выстрелов и их результатов. В таблице game будет 6 полей, при каждом выстреле в неё будет добавляться две записи. Отчёт отправил: 7276. Ильшат Выполнено за 50 мин. [Показать отчёт] Научился: Познакомился со способом хранения realtime-данных игры в таблице базы данных. Сложности: Нарисовать таблицу, использовал Libre Office Calc, Draw - аналоги Excel, PowerPoint. Комментарии: Интересный способ хранения данных в таблице Game. |
|||||
18 | База Морского Флота - phpMyAdmin |
|
|||
На этом уроке мы наконец-таки возьмёмся за практику. Запустим phpMyAdmin и создадим в нём все три таблицы. Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 30 мин. [Показать отчёт] Научился: Установка и настройка mysql, phpmyadmin. Сложности: Сложностей не было. Комментарии: На первом скриншоте содержимое таблицы info, на втором - структура трех таблиц info, ship, game. |
|||||
19 | База Морского флота - Экспресс SQL |
|
|||
На этом уроке мы сделаем краткий экспресс-обзор языка структурированных запросов. Кратко рассмотрим все основные команды SQL.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 20 мин. [Показать отчёт] Научился: Повторил работу с запросами SQL, узнал про SHOW CREATE TABLE. Сложности: Проблем не было, материал хорошо объясняется и показывается на практике. Комментарии: Хороший экспресс-курс в SQL, понравилась демонстрация запросов и было удобно сразу практиковаться на своей базе данных. |
|||||
20 | База Морского Флота - Запросы SQL |
|
|||
На этом уроке мы от души повеселимся с таблицами info и ship - посоставляем самые разные запросы к ним, которые в будущем нам пригодятся при проектировании Серверного протокола. Эти запросы будут выполняться в PHP на серверной части при обработке клиентских запросов. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 50 мин. [Показать отчёт] Научился: Практика в SQL-запросах, отличие DELETE от TRUNCATE. Сложности: Сложностей не было. Комментарии: Хороший урок, попрактиковался в SQL-запросах, спасибо. |
|||||
21 | Протокол - Список команд |
|
|||
На этом уроке мы начнём проектировать протокол общения клиентской программы с сервеной частью. Перечислим все клиентские команды и кратко пройдёмся по каждой. Составить xml-формат сервеных ответов нужно будет самостоятельно.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 15 мин. [Показать отчёт] Научился: Познакомился со схемой протокола обмена данных между клиентом и сервером. Сложности: Составить команды клиента и ответы сервера в формате xml. Комментарии: Интересное самостоятельное задание, составить варианты команд для протокола обмена. |
|||||
22 | Протокол - Команды INFO и SHIP |
|
|||
На этом уроке мы проработаем клиентский запрос "info" и "ship". Выпишем все варианты ответа сервера, и, самое главное, напишем SQL-запросы для проверки всех возможных случаев. Урок сложный, но после такой проработки создание серверного РНР скрипта будет сплошным удовольствием :) Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 15 мин. [Показать отчёт] Научился: Повторил создание SQL-запросов и их выполнение в phpMyAdmin. Сложности: Сложностей не было, повторял все действия на видео. Комментарии: Понравилось подробное и ясное описание протокола и то что часть обработки данных выполняется в SQL-запросах. |
|||||
23 | Протокол - Команда FIRE |
|
|||
На этом уроке мы проработаем клиентский запрос "fire". Выпишем все варианты ответа сервера, и, самое главное, напишем SQL-запросы для проверки всех возможных случаев. Во второй части урока мы три раза пройдёмся по алгоритму, выполняя все написанные SQL запросы. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 40 мин. [Показать отчёт] Научился: Повторил работу с составлением SQL-запросов. Сложности: Сложностей не было. Комментарии: Хороший урок, несколько раз подробно рассматривается протокол для команды fire, учитываются разные варианты исходных данных от клиента. |
|||||
24 | Протокол - Команда GAME |
|
|||
На этом уроке мы разберём последнюю команду протокола - game. Команда простая, но очень важная - именно она будет чаще всего выполняться, благодаря ей все клиенты будут знать, что происходит на море, что куда летит и с каким результатом. Отчёт отправил: 7276. Ильшат Выполнено за 25 мин. [Показать отчёт] Научился: Познакомился с описанием команды game, закрепил навыки из прошлых уроков. Сложности: Сложностей не было. Комментарии: Понравилась идея использовать в SQL-запросе ограничение по времени tick <= $now_tick |
|||||
25 | Серверный флот - FTP подключение |
|
|||
На этом уроке мы подключимся к FTP серверу, создадим там свою папку и создадим файл init.php. Отчёт отправил: 7276. Ильшат Выполнено за 35 мин. [Показать отчёт] Научился: Повторил использование тега <h1> Сложности: Сложностей не было. Комментарии: Выполнил задание без ftp-подключения: скопировал папку с файлом init.php в веб-директорию сервера Apache2. |
|||||
26 | Серверный флот - Как PHP дружит с MySQL |
|
|||
На этом уроке мы создадим на РНР подключение к базе данных MySQL. Организуем подключение, выберем базу данных, выполним запрос, и напечатеем результат. Отчёт отправил: 7276. Ильшат Выполнено за 20 мин. [Показать отчёт] Научился: Познакомился с новыми функциями работы с базами данных. Сложности: Сложностей не было, повторил действия на видео. Комментарии: Быстрый вводный урок в php, сразу работа с базами данных:) |
|||||
27 | Серверный флот - Рефакторинг РНР-кода |
|
|||
На этом уроке мы займёмся рефакторингом, если у кого-нибудь повернётся язык назвать этим словом то, чем мы здесь будем заниматься... Мы переделаем файл init.php в подключаемый - в нём будет только подключение к базе и две полезные функции. В конце урока мы создадим файл battle.php, в котором сделаем include и протестируем. Отчёт отправил: 7276. Ильшат Выполнено за 50 мин. [Показать отчёт] Научился: Познакомился с функциями mysqli_errno, mysqli_num_rows. Сложности: Сложностей не было. Комментарии: Хороший урок, быстрый курс по функциям php и способам решения возможных проблем и ошибок. |
|||||
28 | Серверный флот - Функция do_info |
|
|||
На этом уроке мы создадим структуру файла battle.php и напишем заглушки для всех функций протокола. Далее, реализуем команду info в функции do_info() Отчёт отправил: 7276. Ильшат Выполнено за 30 мин. [Показать отчёт] Научился: Использование textarea, функции isset и @. Сложности: Сложностей не было, для вывода ошибок и предупреждений изменил файл php.ini, установив error_reporting = E_ALL и display_errors = On Комментарии: Интересная идея использовать textarea. |
|||||
29 | Серверный флот - Капитан очевидность |
|
|||
На этом уроке мы исправим несколько мелких недочётов. Добавим в таблицу info поле oceans, соответственно изменим функцию do_info(). Добавим в файл init.php две новые функции select_scalar() и now_ticks (). Также нам придётся изменить тип полей для хранения тиков с int на bigint. Отчёт отправил: 7276. Ильшат Выполнено за 40 мин. [Показать отчёт] Научился: Использование константы MYSQLI_NUM в качестве аргумента для функции mysqli_fetch_array. Сложности: Сложностей не было. Комментарии: Хороший урок, с примерами использования MYSQLI_NUM и реализацией тиков в функции now_tick. |
|||||
30 | Серверный флот - Функция do_ship |
|
|||
На этом уроке мы напишем функцию do_ship(). Разберём ещё раз все возможные ошибки расстановки кораблей, сформируем код и текст ошибки, который вернём в xml. После успешного размещения всех кораблей мы поменяем статус игры на "play" и начнём уже играть. Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 10 мин. [Показать отчёт] Научился: Практика в php, запросы к БД. Сложности: Сложностей не было. Комментарии: Функция получилась длинной, применение внешнего цикла весьма странное, но работает. Нравятся комментарии Евгения Витольдовича о подводных камнях использования php. |
|||||
31 | Серверный флот - Функция do_fire |
|
|||
На этом уроке мы напишем функцию do_fire(). Разберём ещё раз все возможные ошибки при выполнении выстрела, сформируем код и текст ошибки, который вернём в xml. После успешного выстрела мы проверим количество оставшихся океанов. В конце функции добавим все транзакции в таблицу game. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 50 мин. [Показать отчёт] Научился: Использование функции count в php. Сложности: Исправление мелких ошибок в SQL-запросах: незакрытая скобка или пропущенная запятая. Комментарии: Понравилась работа протокола, подготовительная работа по созданию схемы не прошла даром:) |
|||||
32 | Серверный флот - Функция do_game |
|
|||
На этом уроке мы напишем функцию do_game(). Будем получать список всех выстрелов с результатами. Отчёт отправил: 7276. Ильшат Выполнено за 30 мин. [Показать отчёт] Научился: Повторение, закрепление навыков php, phpmyadmin Сложности: Сложностей не было. Комментарии: Радует работа протокола, теперь дело за клиентской частью. |
|||||
33 | ПОЛУФИНАЛЬНЫЙ УРОК. Большая игра |
|
|||
На этом уроке мы поиграем в Морской флот через адресную строку. Устроим соревнование из шести участников. Битва будет что надо! :) В начале урока мы допишем в протокольчик команду перезапуска игры и стартанём. В конце урока я покажу, как написан скрипт map.php для отображения статуса игры. В этом уроке нужно поиграть самому и ЗАПИСАТЬ видеообзор игры. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 15 мин. [Показать отчёт] Научился: Повторил создание видео обзора. Сложности: Сложным было говорить кратко, время видео отчета больше 10 минут, хотя я старался говорить быстро и вкратце описать работу протокола. При этом, не рассказал многие моменты связанные с перезарядкой и обработкой ошибок. Перезаписывал обзор два раза, не получается уложиться в меньшее время, оставил последний вариант:) Комментарии: В одном из отчетов я написал, что в данном проекте необходимо больше внимание уделить планированию. Но выполнив несколько следующих уроков по описанию протокола, по запросам SQL, я понял, что поторопился с выводами: с планированием здесь все отлично и результат виден при реализации в php-коде. Отдельное спасибо за экспресс-уроки SQL с демонстрацией результатов запросов. Видеообзор: https://youtu.be/wuz6vFQUdc4 |
|||||
34 | Клиентский флот - Подключение к серверу |
|
|||
На этом уроке мы создадим класс Server, который будет подключаться к нашему PHP скрипту. Будет отправлять запрос и получать ответ. Примечание Если ваша сеть использует для подключения к интернету особые настройки прокси-сервера, то необходимо добавить в программу считывание системных Proxy-настроек, см. пример. Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 15 мин. [Показать отчёт] Научился: Познакомился с классами поддержки сети в Qt, научился получать данные по url-запросу. Сложности: Получить xml-ответ от php-скрипта. Комментарии: Основа заложена, теперь можно выполнять запросы к серверу и получать простые данные:) |
|||||
35 | Клиентский флот - Парсинг XML |
|
|||
На этом уроке мы научимся парсить XML документ. Мы напишем метод RequestInfo(), который выудит все нужные значения из XML-документы и вернёт их в основную программу. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 30 мин. [Показать отчёт] Научился: Познакомился с классами XML, научился простому способу извлечения информации из XML. Сложности: Сложностей не было, использовал простой способ извлечения из видео урока, дополнительно почитал про парсинг XML в книге Qt и документации. Комментарии: Перед просмотром видео я полагал, что мы будем вручную парсить XML, оказалось что нет, взяли готовые классы:) Я тоже не изобретал велосипед, использовал возможности библиотеки. |
|||||
36 | Клиентский флот - Класс ServerInfo |
|
|||
На этом уроке мы займёмся рефакторингом - вынесем повторяющиеся действия в отдельные методы, уберём параметры метода RequestInfo(), запишем их во внутренние поля класса. Потом вынесем всё хозяйство для Info-запроса в отдельный класс ServerInfo. Оптимизируем ещё некоторые процедуры и уберём try-блоки в базовый класс. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 50 мин. [Показать отчёт] Научился: Повторение рефакторинга и работы со специализациями шаблонов. Сложности: Сложностей не было. Комментарии: Идея понравилась, использовать наследование для разных типов запросов. |
|||||
37 | Клиентский флот - Класс ServerShip |
|
|||
На этом уроке мы создадим класс ServerShip для размещения кораблей. В нём будет вспомогательный метод ExtractShipCoords(), который матрицу кораблей сконвертирует в строчку GET данных для передачи их в РНР скрипт. Также будут некоторые сложности для получения этой матрицы в коде основной программы, нам придётся добавить новый метод в класс Ocean, изменить права доступа к матрице ships в классе Map. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 50 мин. [Показать отчёт] Научился: Повторение работы с матрицами библиотеки boost. Сложности: Сложностей не было. Комментарии: Хороший урок, идем дальше. |
|||||
38 | Клиентский флот - Класс ServerFire |
|
|||
На этом уроке мы создадим класс ServerFire. Мы научим нашу программу отправлять на сервер приказы о выстрелах! Правда, мы пока ещё не будем знать о результатах выстрела. Зато мы доработаем РНР функцию, чтобы она в XML возвращала координаты выстрелившего корабля, чтобы организовать правильную анимацию. Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 10 мин. [Показать отчёт] Научился: Повторил пройденный материал, немного почистил код. Сложности: Небольшие технические сложности в реализации вызова "делегата". Комментарии: Основа игры готова, можно пострелять и поиграть. На скриншоте вел игру за 0 океан, читерски подсматривая информацию о размещении кораблей в базе данных:) |
|||||
39 | Клиентский флот - Класс ServerGame |
|
|||
На этом уроке мы проработаем клиентский запрос "game" для получения списка транзакций всех участников игры. Мы создадим класс ServerGame, создадим структуру Actions, доработаем методы из базового класса и реализуем заполнение массива считанными с XML данными. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 50 мин. [Показать отчёт] Научился: Научился извлекать список записей по тегу из xml Сложности: Сложностей не было. Комментарии: Понравилась работа команды game по параметру last_tick. |
|||||
40 | Одинокий капитан - Прицел |
|
|||
На этом уроке мы нарисуем новую пиктограмму для нашей игры - знак прицела. И пропишем его добавление в уже созданные классы. Это пиктограмма будет использоваться для отметки полей, по которым сделан выстрел, но пока ещё не известен результат. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 15 мин. [Показать отчёт] Научился: Повторил создание и обработку картинок в GIMP. Сложности: Нарисовать картинку с прицелом. Комментарии: Поймал warning в фабричной функции Box::create, о том, что рассмотрены не все варианты перечисления EnumIcons. Добавил строчку, где case fire для создания объекта FireBox. |
|||||
41 | Одинокий капитан - Выстрелы |
|
|||
На этом уроке мы обработаем массив actions со списком полученных от сервера транзакций. Сделаем отображение результатов, для этого придётся исправить мелкие ошибки прошлого урока в классе Box: Create(EnumIcons icon) Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 10 мин. [Показать отчёт] Научился: Закрепление полученных навыков. Сложности: Сложностей не было. Комментарии: Добились полуавтоматической работы программы: делаем выстрел, жмем кнопку game и получаем результат:) |
|||||
42 | Одинокий капитан - Победа! |
|
|||
На этом уроке мы добавим на форму таймер и флаг состояния игры. После этого мы поиграем в одинокого капитана - будем стрелять по всем океанам без ответного огня. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 15 мин. [Показать отчёт] Научился: Повторил работу с таймером. Сложности: Проблем не было. Комментарии: Понравилась настройка времени полета снаряда и перезарядки пушки - игра получилась более динамичная. |
|||||
43 | Финишная миля. Перезагрузка. |
|
|||
На этом уроке мы добавим функцию перезапуска в РНР файл.
Отчёт отправил: 7276. Ильшат Выполнено за 10 мин. [Показать отчёт] Научился: Повторение работы с php-кодом. Сложности: Проблем не было. Комментарии: Простая и полезная функция для рестарта игры. |
|||||
44 | Финишная миля. Мой океан. |
|
|||
На этом уроке мы добавим две важные функции в наш проект. 1. Определение номера свободного океана при запуске. 2. Случайное размещение кораблей на выбранном океане. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 15 мин. [Показать отчёт] Научился: Повторение пройденного материала. Сложности: Проблем не было. Комментарии: Осталось найти победителя, перезапускать игру и доработать интерфейс) |
|||||
45 | Финишная миля. Найти победителя |
|
|||
На этом уроке мы наконец-таки немножко поиграем :) Потом сделаем определение победителя. Из-за чего в конец запутаемся в коде класса Form1. Примем решение на следующем уроке переписать его. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 10 мин. [Показать отчёт] Научился: Повторение пройденного материала, код на php и обработка перехода между состояниями игры на стороне клиента. Сложности: Проблем не было. Комментарии: Добавил вывод сообщения о результатах игры. Понравился смех Евгения Витольдовича на 17:36, когда программа при старте выдает сообщение с ошибкой:) |
|||||
46 | Свежий взгляд. Схема проекта. |
|
|||
На этом уроке мы опять начнём всё сызнова. Рассмотрим шесть основных состояний нашей программы. Создадим новый проект и настроим его. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 10 мин. [Показать отчёт] Научился: Повторил процесс создания и настройки формы приложения. Сложности: Проблем не было. Комментарии: Хороший урок, теперь больше ясности в переходах между состояниями игры. |
|||||
47 | Свежий взгляд. Управление из таймера. |
|
|||
На этом уроке мы заложим фундамент нашей программы - шесть методов do*() и вызов их из таймера. Отчёт отправил: 7276. Ильшат Выполнено за 20 мин. [Показать отчёт] Научился: Повторил работу с таймером. Сложности: Сложностей не было. Комментарии: Короткий и понятный урок, идем дальше. |
|||||
48 | Свежий взгляд. Ожидание запуска. |
|
|||
На этом уроке мы напишем метод showMessage() для отображения сообщений игры. Далее, мы добавим в наш проект уже написанные классы Server* и Map. Также разместим кнопку Start для запуска игры. Отчёт отправил: 7276. Ильшат Выполнено за 30 мин. [Показать отчёт] Научился: Вспомнил более удобный способ установки картинки, для этого изменил тип объекта pictureMain. Сложности: Проблем не было. Комментарии: Как вариант, вместо ручного выделения и копирования содержимого файлов map.cs и server.cs, можно просто скопировать сами файлы в папку нового проекта и подключить. |
|||||
49 | Свежий взгляд. Размещение кораблей. |
|
|||
На этом уроке мы напишем метод doShip() для размещения кораблей. Для этого нам потребуется добавить уже написанные классы Box и Ocean. Также придётся немного поменять функцию создания и размещения кораблей. Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 15 мин. [Показать отчёт] Научился: Повторение обработки запроса serverShip. Сложности: Сложностей не было. Комментарии: Все ок. |
|||||
50 | Свежий взгляд. Завершение проекта. |
|
|||
На этом уроке МЫ ЗАКОНЧИМ создание программы. Напишем обработку состояний play и stop. Отчёт отправил: 7276. Ильшат Выполнено за 50 мин. [Показать отчёт] Научился: Код знакомый, ранее написанный, повторение пройденного материала. Сложности: Сложностей не было. Комментарии: Все ок) |
|||||
51 | ФИНАЛЬНЫЙ УРОК. |
|
|||
На этом уроке мы поиграем по сети с участниками вебинара. Твоя задача - записать видеообзор созданного проекта. Какой курс ты будешь проходить следующим? Отчёт отправил: 7276. Ильшат Выполнено за 30 мин. [Показать отчёт] Научился: Повторил создание видео обзоров. Сложности: Проблем не было. Комментарии: Отличный курс, рекомендую всем, кто хочет познакомиться с работой клиент-серверных приложений. Следующий курс - Морской бой. Видеообзор: https://youtu.be/Y3x3tYy5O3U |
|||||
Итого: 51 видеоурок |
19 час. 44 мин. |
9 чел. | |||
Финалисты: Андрей Поляков, Елена, Юрий, Олюшка, Иван, Tekashnik, Дмитрий, Ильшат, Николай Денисов . |