C# обучение видео

Формула программиста
основатель — Волосатов Евгений Витольдович
Вступай в Телеграм чат проекта
Вебинар «Мы начинаем PHP + Yii2» идёт прямо сейчас

Морской Флот

Серия из 50 коротких уроков по созданию
многопользовательской "Морской Флот".
Будет серверная часть на PHP с Базой данных MySQL.
также будут использованы анимированные спрайты
для оформления клиентской части программы.


Объём: 50 уроков.
Срок: 50 дней.


Хочу купить!

Купить в рассрочку за мегахеши

Цена: 3000 p.


Список уроков | фото | видео

# Название видеоурока Решило Рейтинг Доступ
1 Вступление 00:22:00 61 чел. ★ 4.9 Done
  Мы начинаем создание многопользовательской игры "Морской Бой".
В игру можно будет играть одновременно четырём участникам.
Будет реализована клиентская часть с графическим интерфейсом на C#.
Будет разработан протокол общения клиентских программ с сервером.
Будет спроектирована и создана серверная база данных на MySQL.
Будет написана серверная часть отработки протокола на PHP.
Будет создан клиент-класс отработки протокола на C#.
Будет реализована анимация всех событий в игре.
На этом уроке рассказано о структуре проекта.

Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 10 мин. [Показать отчёт]
Научился: Повторил работу с редактированием изображений. 
Сложности: Найти и подготовить картинки. 
Комментарии: Понемногу осваиваю работу в редакторе GIMP, полезный навык. 
2 Интерфейс - Первый кораблик 00:32:33 52 чел. ★ 4.9 Done
  На этом уроке мы начнём создание проекта -
создадим проект, настроим форму, прикрепим иконку.
На самой форме разместим главную картинку - pictureMain.
А ещё нарисуем 4 картинки и добавим их в ресурсы проекта.
Далее создадим графику, подготовим картинки
и научимся их выводить на основную картинку.
Под конец урока сделаем размещение корабликов по щелчку мышки.
Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 30 мин. [Показать отчёт]
Научился: Обработка событий рисования и клика мышкой в технологии QML. 
Сложности: Нарисовать картинки при клике мышкой. 
Комментарии: В качестве эксперимента, решил создавать клиентскую часть игры с использованием технологии QML. Интерфейс формы описывается на декларативном языке, а логика динамической прорисовки и обработки кликов мышки реализована на JavaScript. 
3 Интерфейс - А на море корабли 00:22:26 50 чел. ★ 4.9 Done
  На этом уроке мы нарисуем море с кораблями.
Пока у нас не будет матриц, размещение объектов будет случайным.
В конце урока напишем алгоритм позиционирования курсора мышки
над нашим морем и сделаем размещение "ударов" по морю.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 10 мин. [Показать отчёт]
Научился: Попрактиковался с математическими функциями Math.random, Math.floor в javascript. 
Сложности: Сложностей не было. 
Комментарии: Понравился способ выбора случайной картинки. 
4 Графика - Карта Морского флота 00:31:14 39 чел. ★ 5 Done
  На этом уроке мы создадим карту морского флота.
Это будет двумерный массив, в каждой клетке
которого записано одно из четырёх значений.
Мы напишем алгоритм размещения кораблей
и сделаем отображение карты на экране.
Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 40 мин. [Показать отчёт]
Научился: Создавать аналог enum в javascript. Повторил работу с двумерными массивами. 
Сложности: Создать аналог enum. 
Комментарии: Методика Евгения Витольдовича работает: минимум теории, сразу к практике. Теории именно столько, сколько нужно для решения задачи. В итоге, задача решена, однако в голове каша, нехватка некоего стержня или опоры для обобщения знаний. Я так полагаю, что в такие моменты как раз следует немного отвлечься от практики и почитать теорию. 
5 Графика - Выстрелы по Кораблям 00:14:31 38 чел. ★ 5 Done
  На этом уроке мы наконец-таки сможем немножко поиграть
с компьютером и потопить весь компьютерный флот! :)
Сначала мы уберём вывод кораблей на экран,
потом переделаем функцию обработки клика мышки.
Добавим проверку точности удара и вывода результата.

Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 50 мин. [Показать отчёт]
Научился: Выводить диалоговое окно с сообщением, немного попрактиковался работе в дизайнере форм. 
Сложности: Особых сложностей не было. 
Комментарии: Добавил вывод небольшой статистики: количество выстрелов, попаданий, оставшихся кораблей. Получилась работающая игровая программа, в которую можно поиграть. Идем дальше. 
6 Графика - Рефакторинг 00:26:11 37 чел. ★ 4.8 Done
  На этом уроке мы займёмся рефакторингом кода.
Создадим класс Graph, в который перенесём все
операции, связанные с графикой.
Код станет чище, понятней, хотя придётся
повозиться с его оптимизацией.
Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 20 мин. [Показать отчёт]
Научился: Много чему: создавать сигналы, вызывать их, создавать свойства, обращаться к ним, постигал азы модульности в qml+javascript. 
Сложности: Добиться модульности: Графика и Модель игры в отдельных javascript файлах, их вызывает qml файл-контроллер, а его в свою очередь главный qml файл, хитросплетения-велосипеды однако. Еще был момент: весь код написал, все должно было заработать, но не работало. Почитал в книжке по Qt пример, нашел ошибку, исправил, заработало, ура! 
Комментарии: Полученным решением доволен, графика и модель игры в разных файлах, независимы друг от друга, тема урока по рефакторингу очень даже оказалась к месту, спасибо. 
7 Анимация - Полёт снаряда 00:08:33 33 чел. ★ 4.8 Done
  На этом уроке мы составим список всех анимаций, которые будут в нашей игре. Твоя задача - нарисовать все кадры полёта снаряда.
Отчёт отправил: 7276. Ильшат Выполнено за 50 мин. [Показать отчёт]
Научился: Масштабировать, поворачивать изображение в GIMP. 
Сложности: Выбрать картинку. 
Комментарии: Сделал 20 кадров анимации, на первых кадрах выполняется увеличение ядра и его вращение. В последующих кадрах просто вращение. 
8 Анимация - Отображение кадров 00:31:33 33 чел. ★ 4.9 Done
  На этом уроке мы создадим первую анимацию в нашем проекте.
Это будет летящий снаряд. Мы рассмотрим несколько способов его отображения, а также добавим его перемещение.
Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 10 мин. [Показать отчёт]
Научился: Создавать анимации перемещения, изменения свойств объектов в QML. 
Сложности: Анимацию перемещения сделал быстро, а вот с анимацией сменой картинок было не так очевидно, первые варианты были громоздкими, искал альтернативы. 
Комментарии: От себя добавил настройку конечной цели полета снаряда: место щелчка мышкой. Начало полета - всегда левый верхний угол карты. Получилось интересно. 
9 Анимация - Полёт по таймеру 00:28:19 32 чел. ★ 4.9 Done
  На этом уроке мы добавим таймер и реализуем полёт снаряда через функцию его события.
Для этого в функцию таймера нужно будет разместить внутренности цикла,
а также добавить проверки на начало и окончание полёта снаряда.
Потом мы оформим полёт снаряда в ту клетку моря, по которой был щелчёк мышки.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 50 мин. [Показать отчёт]
Научился: Использование Math.sqrt, динамический расчет времени анимации в зависимости от скорости снаряда и расстояния полета. 
Сложности: Сложностей не было. 
Комментарии: В моем случае нет таймера, анимация встроена в сам язык QML и мне достаточно задать начальное, конечное значение переменной и время анимации; удобный подход. Меня не устраивало то, что снаряд двигается с разными скоростями в зависимости от требуемого расстояния, то есть время анимации жестко задано и период срабатывания "таймера" управляет скоростью снаряда. Кроме того, предложенный в уроке способ подбора значений для сокращения чисел в формулах это конечно круто, магия и все дела, но в данном случае движение снаряда описывается обычными физическими законами - кинематикой. Как известно, координаты объекта в случае равномерного движения вычисляются по простой формуле, s = s0 + vt. Необходимо выразить t и установить в качестве времени анимации, остальные переменные известны. 
10 Архитектура - Перезагрузка проекта 00:24:35 32 чел. ★ 5 Done
  На этом уроке мы начнём всё заново.
Но уже на другом, качественно новом уровне.
Проработаем архитектуру будущей программы.
Создадим новый проект и создадим класс Ocean.
Пока программа будет простой, самое главное
в этом уроке - понять архитектуру проекта,
увидеть весь лес как бы сверху.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 30 мин. [Показать отчёт]
Научился: Попрактиковался в создании диаграмм на draw.io 
Сложности: Продумать разные варианты архитектуры проекта, в результате остановился на варианте из урока. 
Комментарии: На мой взгляд, для этого урока, для планирования, следует выделить больше времени - до часа, с интенсивным обменом мнений между участниками вебинара для объяснения выбора той или иной архитектуры. Конечно, у Евгений Витольдовича есть своя идея, она основная и на ее основе строится будущий проект, чтобы по окончанию вебинара был конкретный результат планирования, а не хаос. На вчерашнем вебинаре по тетрису Евгений Витольдович как обычно сказал "У вас есть выбор, либо пишете самостоятельно, либо с нами и нашей поддержкой". И еще раз сделал упор на том, что доступ к урокам последовательный. Эти две идеи очень кстати подошли в моем случае для этого урока, так как я чрезмерно продумал архитектуру проекта, излишне обобщил, забегал вперед и готов был самостоятельно написать весь Морской флот. Но я подписывался на этот курс для обучения, получения новых решений в видеоуроках и пошаговом выполнении с небольшими конечными целями. Поэтому советую формулистам не увлекаться изменением архитектуры на первых уроках. К концу проекта, когда уже будет получена реализация, можно придумать свое решение. P.S. Отчет отправляю повторно, почему-то не могу загрузить новые скрины, сайт подставляет старые скриншоты. 
11 Архитектура - Карта Пиратов 00:34:23 32 чел. ★ 5 Done
  На этом уроке мы создадим карту Пиратов,
определимся с условными обозначениями (enum),
определим отдельные матрицы для размещения
кораблей и отметки совершённых по ним ударов.
Создадим метод для размещения кораблей
и потестируем всё это в пошаговом режиме.
Также добавим статистические переменные,
настоящие пираты должны знать сколько
было кораблей и сколько осталось.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 20 мин. [Показать отчёт]
Научился: Повторил использование "предохранительного клапана" для цикла генерирующего случайное число. Создание матрицы на основе комбинаций значений нескольких типов Enum. 
Сложности: Сложностей не было. 
Комментарии: Понравилось создание матрицы Icons на основе Ships и Fires. 
12 Архитектура - Наследие картинок 00:31:55 32 чел. ★ 4.9 Done
  На этом уроке мы займёмся картинками.
Создадим класс Box, унаследованный от PictureBox
и настроим его для использования в нашем проекте.
Далее, из него мы унаследуем классы для каждой из картинок.
Самое сложное в этом уроке - уловить идею наследования
и понять, почему и как эти картинки выводятся на экран.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 10 мин. [Показать отчёт]
Научился: Повторил работу с ресурсами программы, выводом и позиционированием изображения на форме. 
Сложности: Сложностей не было. 
Комментарии: Интересная идея, для каждой картинки создать свой отдельный тип. 
13 Архитектура - Фабрика картинок 00:16:15 32 чел. ★ 5 Done
  На этом уроке мы настроим вывод карты на экран.
Нам понадобится фабрика картинок - статический
метод Box.Create и волшебная функция превращения
EnumShips x EnumFires в EnumIcons.
Отчёт отправил: 7276. Ильшат Выполнено за 35 мин. [Показать отчёт]
Научился: Использовать фабрику картинок Box.Create(). 
Сложности: Сложностей не было. 
Комментарии: Понравилась работа "предохранительного клапана" и простота изменения режимов игры. 
14 Архитектура - Мышкой по кораблям 00:21:27 32 чел. ★ 4.9 Done
  На этом уроке мы научимся по щелчку мышки стрелять по кораблям.
Для этого нам понадобится создать обработчик MouseClick,
и подцепить его к каждой картинке. Используя делегаты
мы будем свистать всех на верх - до класса Form1,
из которого будем спускаться по иерархии опять вниз,
для пометки выстрела и отображения его на карте.
Отчёт отправил: 7276. Ильшат Выполнено за 50 мин. [Показать отчёт]
Научился: Повторил обработку события клика мышки, работу с делегатами. 
Сложности: Проблем не было. 
Комментарии: Все хорошо и понятно объясняется. 
15 База Морского Флота - INFO 00:11:16 38 чел. ★ 4.8 Done
  На этом уроке мы начнём проектировать Базу данных серверного флота.
Пока мы создадим эскиз только для одной таблицы - info,
в которой будет поле status. Для него мы составим схему состояний,
и условия перехода из одного состояния в другое.

Отчёт отправил: 7276. Ильшат Выполнено за 30 мин. [Показать отчёт]
Научился: Идея сохранения настроек игры в отдельной таблице базы данных. 
Сложности: Проблем не было. 
Комментарии: Короткий и понятный урок, идем дальше. 
16 База Морского Флота - SHIP 00:10:47 38 чел. ★ 4.8 Done
  На этом уроке мы создадим таблицу для хранения координат
кораблей и их состояния. В таблице ship будет 5 полей.
Отдельное внимание уделено вопросу перезарядки пушек.
Отчёт отправил: 7276. Ильшат Выполнено за 25 мин. [Показать отчёт]
Научился: Идея использования составного ключа из трех полей вместо id. 
Сложности: Сложностей не было. 
Комментарии: Понравился способ проверки готовности корабля к выстрелу, используя поле CoolTick. 
17 База Морского Флота - GAME 00:12:00 36 чел. ★ 4.9 Done
  На этом уроке мы создадим таблицу событий в нашей игре,
в которой будут хранится транзакции всех выстрелов
и их результатов. В таблице game будет 6 полей,
при каждом выстреле в неё будет добавляться две записи.
Отчёт отправил: 7276. Ильшат Выполнено за 50 мин. [Показать отчёт]
Научился: Познакомился со способом хранения realtime-данных игры в таблице базы данных. 
Сложности: Нарисовать таблицу, использовал Libre Office Calc, Draw - аналоги Excel, PowerPoint. 
Комментарии: Интересный способ хранения данных в таблице Game. 
18 База Морского Флота - phpMyAdmin 00:12:49 36 чел. ★ 4.9 Done
  На этом уроке мы наконец-таки возьмёмся за практику.
Запустим phpMyAdmin и создадим в нём все три таблицы.

Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 30 мин. [Показать отчёт]
Научился: Установка и настройка mysql, phpmyadmin. 
Сложности: Сложностей не было. 
Комментарии: На первом скриншоте содержимое таблицы info, на втором - структура трех таблиц info, ship, game. 
19 База Морского флота - Экспресс SQL 00:40:56 34 чел. ★ 4.9 Done
  На этом уроке мы сделаем краткий экспресс-обзор языка структурированных запросов. Кратко рассмотрим все основные команды SQL.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 20 мин. [Показать отчёт]
Научился: Повторил работу с запросами SQL, узнал про SHOW CREATE TABLE. 
Сложности: Проблем не было, материал хорошо объясняется и показывается на практике. 
Комментарии: Хороший экспресс-курс в SQL, понравилась демонстрация запросов и было удобно сразу практиковаться на своей базе данных. 
20 База Морского Флота - Запросы SQL 00:41:23 33 чел. ★ 4.9 Done
  На этом уроке мы от души повеселимся с таблицами info и ship -
посоставляем самые разные запросы к ним, которые в будущем
нам пригодятся при проектировании Серверного протокола.
Эти запросы будут выполняться в PHP на серверной
части при обработке клиентских запросов.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 50 мин. [Показать отчёт]
Научился: Практика в SQL-запросах, отличие DELETE от TRUNCATE. 
Сложности: Сложностей не было. 
Комментарии: Хороший урок, попрактиковался в SQL-запросах, спасибо. 
21 Протокол - Список команд 00:12:40 27 чел. ★ 4.7 Done
  На этом уроке мы начнём проектировать протокол общения клиентской программы с сервеной частью. Перечислим все клиентские команды и кратко пройдёмся по каждой. Составить xml-формат сервеных ответов нужно будет самостоятельно.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 15 мин. [Показать отчёт]
Научился: Познакомился со схемой протокола обмена данных между клиентом и сервером. 
Сложности: Составить команды клиента и ответы сервера в формате xml. 
Комментарии: Интересное самостоятельное задание, составить варианты команд для протокола обмена. 
22 Протокол - Команды INFO и SHIP 00:53:55 26 чел. ★ 5 Done
  На этом уроке мы проработаем клиентский запрос "info" и "ship".
Выпишем все варианты ответа сервера, и, самое главное,
напишем SQL-запросы для проверки всех возможных случаев.
Урок сложный, но после такой проработки создание
серверного РНР скрипта будет сплошным удовольствием :)
Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 15 мин. [Показать отчёт]
Научился: Повторил создание SQL-запросов и их выполнение в phpMyAdmin. 
Сложности: Сложностей не было, повторял все действия на видео. 
Комментарии: Понравилось подробное и ясное описание протокола и то что часть обработки данных выполняется в SQL-запросах. 
23 Протокол - Команда FIRE 00:56:38 25 чел. ★ 5 Done
  На этом уроке мы проработаем клиентский запрос "fire".
Выпишем все варианты ответа сервера, и, самое главное,
напишем SQL-запросы для проверки всех возможных случаев.
Во второй части урока мы три раза пройдёмся по алгоритму,
выполняя все написанные SQL запросы.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 40 мин. [Показать отчёт]
Научился: Повторил работу с составлением SQL-запросов. 
Сложности: Сложностей не было. 
Комментарии: Хороший урок, несколько раз подробно рассматривается протокол для команды fire, учитываются разные варианты исходных данных от клиента. 
24 Протокол - Команда GAME 00:11:13 25 чел. ★ 5 Done
  На этом уроке мы разберём последнюю команду протокола - game.
Команда простая, но очень важная - именно она будет чаще всего
выполняться, благодаря ей все клиенты будут знать,
что происходит на море, что куда летит и с каким результатом.
Отчёт отправил: 7276. Ильшат Выполнено за 25 мин. [Показать отчёт]
Научился: Познакомился с описанием команды game, закрепил навыки из прошлых уроков. 
Сложности: Сложностей не было. 
Комментарии: Понравилась идея использовать в SQL-запросе ограничение по времени tick <= $now_tick 
25 Серверный флот - FTP подключение 00:06:50 25 чел. ★ 5 Done
  На этом уроке мы подключимся к FTP серверу,
создадим там свою папку и создадим файл init.php.
Отчёт отправил: 7276. Ильшат Выполнено за 35 мин. [Показать отчёт]
Научился: Повторил использование тега

 
Сложности: Сложностей не было. 
Комментарии: Выполнил задание без ftp-подключения: скопировал папку с файлом init.php в веб-директорию сервера Apache2. 

26 Серверный флот - Как PHP дружит с MySQL 00:07:35 24 чел. ★ 5 Done
  На этом уроке мы создадим на РНР подключение к базе данных MySQL.
Организуем подключение, выберем базу данных,
выполним запрос, и напечатеем результат.
Отчёт отправил: 7276. Ильшат Выполнено за 20 мин. [Показать отчёт]
Научился: Познакомился с новыми функциями работы с базами данных. 
Сложности: Сложностей не было, повторил действия на видео. 
Комментарии: Быстрый вводный урок в php, сразу работа с базами данных:) 
27 Серверный флот - Рефакторинг РНР-кода 00:20:37 24 чел. ★ 5 Done
  На этом уроке мы займёмся рефакторингом, если у кого-нибудь
повернётся язык назвать этим словом то, чем мы здесь будем заниматься...
Мы переделаем файл init.php в подключаемый -
в нём будет только подключение к базе и две полезные функции.
В конце урока мы создадим файл battle.php,
в котором сделаем include и протестируем.
Отчёт отправил: 7276. Ильшат Выполнено за 50 мин. [Показать отчёт]
Научился: Познакомился с функциями mysqli_errno, mysqli_num_rows. 
Сложности: Сложностей не было. 
Комментарии: Хороший урок, быстрый курс по функциям php и способам решения возможных проблем и ошибок. 
28 Серверный флот - Функция do_info 00:11:33 24 чел. ★ 5 Done
  На этом уроке мы создадим структуру файла battle.php
и напишем заглушки для всех функций протокола.
Далее, реализуем команду info в функции do_info()
Отчёт отправил: 7276. Ильшат Выполнено за 30 мин. [Показать отчёт]
Научился: Использование textarea, функции isset и @. 
Сложности: Сложностей не было, для вывода ошибок и предупреждений изменил файл php.ini, установив error_reporting = E_ALL и display_errors = On 
Комментарии: Интересная идея использовать textarea. 
29 Серверный флот - Капитан очевидность 00:19:04 24 чел. ★ 5 Done
  На этом уроке мы исправим несколько мелких недочётов.
Добавим в таблицу 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 00:50:43 24 чел. ★ 5 Done
  На этом уроке мы напишем функцию do_ship().
Разберём ещё раз все возможные ошибки расстановки кораблей,
сформируем код и текст ошибки, который вернём в xml.
После успешного размещения всех кораблей
мы поменяем статус игры на "play" и начнём уже играть.
Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 10 мин. [Показать отчёт]
Научился: Практика в php, запросы к БД. 
Сложности: Сложностей не было. 
Комментарии: Функция получилась длинной, применение внешнего цикла весьма странное, но работает. Нравятся комментарии Евгения Витольдовича о подводных камнях использования php. 
31 Серверный флот - Функция do_fire 00:46:57 24 чел. ★ 4.9 Done
  На этом уроке мы напишем функцию do_fire().
Разберём ещё раз все возможные ошибки при выполнении выстрела,
сформируем код и текст ошибки, который вернём в xml.
После успешного выстрела мы проверим количество оставшихся океанов.
В конце функции добавим все транзакции в таблицу game.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 50 мин. [Показать отчёт]
Научился: Использование функции count в php. 
Сложности: Исправление мелких ошибок в SQL-запросах: незакрытая скобка или пропущенная запятая. 
Комментарии: Понравилась работа протокола, подготовительная работа по созданию схемы не прошла даром:) 
32 Серверный флот - Функция do_game 00:14:08 23 чел. ★ 5 Done
  На этом уроке мы напишем функцию do_game().
Будем получать список всех выстрелов с результатами.
Отчёт отправил: 7276. Ильшат Выполнено за 30 мин. [Показать отчёт]
Научился: Повторение, закрепление навыков php, phpmyadmin 
Сложности: Сложностей не было. 
Комментарии: Радует работа протокола, теперь дело за клиентской частью. 
33 ПОЛУФИНАЛЬНЫЙ УРОК. Большая игра 00:19:58 22 чел. ★ 5 Done
  На этом уроке мы поиграем в Морской флот через адресную строку.
Устроим соревнование из шести участников. Битва будет что надо! :)

В начале урока мы допишем в протокольчик команду перезапуска игры и стартанём.
В конце урока я покажу, как написан скрипт map.php для отображения статуса игры.

В этом уроке нужно поиграть самому и ЗАПИСАТЬ видеообзор игры.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 15 мин. [Показать отчёт]
Научился: Повторил создание видео обзора. 
Сложности: Сложным было говорить кратко, время видео отчета больше 10 минут, хотя я старался говорить быстро и вкратце описать работу протокола. При этом, не рассказал многие моменты связанные с перезарядкой и обработкой ошибок. Перезаписывал обзор два раза, не получается уложиться в меньшее время, оставил последний вариант:)  
Комментарии: В одном из отчетов я написал, что в данном проекте необходимо больше внимание уделить планированию. Но выполнив несколько следующих уроков по описанию протокола, по запросам SQL, я понял, что поторопился с выводами: с планированием здесь все отлично и результат виден при реализации в php-коде. Отдельное спасибо за экспресс-уроки SQL с демонстрацией результатов запросов.  
Видеообзор: https://youtu.be/wuz6vFQUdc4
34 Клиентский флот - Подключение к серверу 00:16:05 24 чел. ★ 5 Done
  На этом уроке мы создадим класс Server,
который будет подключаться к нашему PHP скрипту.
Будет отправлять запрос и получать ответ.

Примечание
Если ваша сеть использует для подключения к интернету
особые настройки прокси-сервера, то необходимо добавить
в программу считывание системных Proxy-настроек, см. пример.
Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 15 мин. [Показать отчёт]
Научился: Познакомился с классами поддержки сети в Qt, научился получать данные по url-запросу. 
Сложности: Получить xml-ответ от php-скрипта. 
Комментарии: Основа заложена, теперь можно выполнять запросы к серверу и получать простые данные:) 
35 Клиентский флот - Парсинг XML 00:21:34 21 чел. ★ 5 Done
  На этом уроке мы научимся парсить XML документ.
Мы напишем метод RequestInfo(), который выудит
все нужные значения из XML-документы и вернёт
их в основную программу.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 30 мин. [Показать отчёт]
Научился: Познакомился с классами XML, научился простому способу извлечения информации из XML. 
Сложности: Сложностей не было, использовал простой способ извлечения из видео урока, дополнительно почитал про парсинг XML в книге Qt и документации. 
Комментарии: Перед просмотром видео я полагал, что мы будем вручную парсить XML, оказалось что нет, взяли готовые классы:) Я тоже не изобретал велосипед, использовал возможности библиотеки. 
36 Клиентский флот - Класс ServerInfo 00:25:00 21 чел. ★ 5 Done
  На этом уроке мы займёмся рефакторингом -
вынесем повторяющиеся действия в отдельные методы,
уберём параметры метода RequestInfo(),
запишем их во внутренние поля класса.
Потом вынесем всё хозяйство для Info-запроса
в отдельный класс ServerInfo.
Оптимизируем ещё некоторые процедуры
и уберём try-блоки в базовый класс.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 50 мин. [Показать отчёт]
Научился: Повторение рефакторинга и работы со специализациями шаблонов. 
Сложности: Сложностей не было. 
Комментарии: Идея понравилась, использовать наследование для разных типов запросов. 
37 Клиентский флот - Класс ServerShip 00:34:41 21 чел. ★ 5 Done
  На этом уроке мы создадим класс ServerShip
для размещения кораблей. В нём будет
вспомогательный метод ExtractShipCoords(),
который матрицу кораблей сконвертирует
в строчку GET данных для передачи их
в РНР скрипт. Также будут некоторые сложности
для получения этой матрицы в коде основной
программы, нам придётся добавить новый
метод в класс Ocean, изменить права
доступа к матрице ships в классе Map.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 50 мин. [Показать отчёт]
Научился: Повторение работы с матрицами библиотеки boost. 
Сложности: Сложностей не было. 
Комментарии: Хороший урок, идем дальше. 
38 Клиентский флот - Класс ServerFire 00:31:08 20 чел. ★ 5 Done
  На этом уроке мы создадим класс ServerFire.
Мы научим нашу программу отправлять на сервер
приказы о выстрелах! Правда, мы пока ещё не
будем знать о результатах выстрела.
Зато мы доработаем РНР функцию, чтобы она
в XML возвращала координаты выстрелившего
корабля, чтобы организовать правильную
анимацию.

Отчёт отправил: 7276. Ильшат Выполнено за 2 час. 10 мин. [Показать отчёт]
Научился: Повторил пройденный материал, немного почистил код. 
Сложности: Небольшие технические сложности в реализации вызова "делегата". 
Комментарии: Основа игры готова, можно пострелять и поиграть. На скриншоте вел игру за 0 океан, читерски подсматривая информацию о размещении кораблей в базе данных:) 
39 Клиентский флот - Класс ServerGame 00:37:13 19 чел. ★ 5 Done
  На этом уроке мы проработаем клиентский запрос "game"
для получения списка транзакций всех участников игры.
Мы создадим класс ServerGame, создадим структуру Actions,
доработаем методы из базового класса и реализуем
заполнение массива считанными с XML данными.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 50 мин. [Показать отчёт]
Научился: Научился извлекать список записей по тегу из xml 
Сложности: Сложностей не было. 
Комментарии: Понравилась работа команды game по параметру last_tick. 
40 Одинокий капитан - Прицел 00:16:57 19 чел. ★ 5 Done
  На этом уроке мы нарисуем новую пиктограмму
для нашей игры - знак прицела. И пропишем
его добавление в уже созданные классы.
Это пиктограмма будет использоваться для
отметки полей, по которым сделан выстрел,
но пока ещё не известен результат.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 15 мин. [Показать отчёт]
Научился: Повторил создание и обработку картинок в GIMP. 
Сложности: Нарисовать картинку с прицелом. 
Комментарии: Поймал warning в фабричной функции Box::create, о том, что рассмотрены не все варианты перечисления EnumIcons. Добавил строчку, где case fire для создания объекта FireBox. 
41 Одинокий капитан - Выстрелы 00:15:24 19 чел. ★ 5 Done
  На этом уроке мы обработаем массив actions
со списком полученных от сервера транзакций.
Сделаем отображение результатов, для этого
придётся исправить мелкие ошибки прошлого
урока в классе Box: Create(EnumIcons icon)
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 10 мин. [Показать отчёт]
Научился: Закрепление полученных навыков. 
Сложности: Сложностей не было. 
Комментарии: Добились полуавтоматической работы программы: делаем выстрел, жмем кнопку game и получаем результат:) 
42 Одинокий капитан - Победа! 00:25:02 19 чел. ★ 5 Done
  На этом уроке мы добавим на форму таймер
и флаг состояния игры. После этого мы поиграем
в одинокого капитана - будем стрелять
по всем океанам без ответного огня.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 15 мин. [Показать отчёт]
Научился: Повторил работу с таймером. 
Сложности: Проблем не было. 
Комментарии: Понравилась настройка времени полета снаряда и перезарядки пушки - игра получилась более динамичная. 
43 Финишная миля. Перезагрузка. 00:04:15 18 чел. ★ 4.8 Done
  На этом уроке мы добавим функцию перезапуска в РНР файл.
Отчёт отправил: 7276. Ильшат Выполнено за 10 мин. [Показать отчёт]
Научился: Повторение работы с php-кодом. 
Сложности: Проблем не было. 
Комментарии: Простая и полезная функция для рестарта игры. 
44 Финишная миля. Мой океан. 00:42:18 17 чел. ★ 4.9 Done
  На этом уроке мы добавим две важные функции в наш проект.
1. Определение номера свободного океана при запуске.
2. Случайное размещение кораблей на выбранном океане.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 15 мин. [Показать отчёт]
Научился: Повторение пройденного материала. 
Сложности: Проблем не было. 
Комментарии: Осталось найти победителя, перезапускать игру и доработать интерфейс) 
45 Финишная миля. Найти победителя 00:20:28 16 чел. ★ 4.9 Done
  На этом уроке мы наконец-таки немножко поиграем :)
Потом сделаем определение победителя.
Из-за чего в конец запутаемся в коде класса Form1.
Примем решение на следующем уроке переписать его.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 10 мин. [Показать отчёт]
Научился: Повторение пройденного материала, код на php и обработка перехода между состояниями игры на стороне клиента. 
Сложности: Проблем не было. 
Комментарии: Добавил вывод сообщения о результатах игры. Понравился смех Евгения Витольдовича на 17:36, когда программа при старте выдает сообщение с ошибкой:) 
46 Свежий взгляд. Схема проекта. 00:14:46 15 чел. ★ 4.9 Done
  На этом уроке мы опять начнём всё сызнова.
Рассмотрим шесть основных состояний нашей программы.
Создадим новый проект и настроим его.

Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 10 мин. [Показать отчёт]
Научился: Повторил процесс создания и настройки формы приложения. 
Сложности: Проблем не было. 
Комментарии: Хороший урок, теперь больше ясности в переходах между состояниями игры. 
47 Свежий взгляд. Управление из таймера. 00:11:34 15 чел. ★ 5 Done
  На этом уроке мы заложим фундамент
нашей программы - шесть методов do*()
и вызов их из таймера.

Отчёт отправил: 7276. Ильшат Выполнено за 20 мин. [Показать отчёт]
Научился: Повторил работу с таймером. 
Сложности: Сложностей не было. 
Комментарии: Короткий и понятный урок, идем дальше. 
48 Свежий взгляд. Ожидание запуска. 00:17:02 15 чел. ★ 5 Done
  На этом уроке мы напишем метод showMessage()
для отображения сообщений игры.
Далее, мы добавим в наш проект
уже написанные классы Server* и Map.
Также разместим кнопку Start для запуска игры.
Отчёт отправил: 7276. Ильшат Выполнено за 30 мин. [Показать отчёт]
Научился: Вспомнил более удобный способ установки картинки, для этого изменил тип объекта pictureMain. 
Сложности: Проблем не было. 
Комментарии: Как вариант, вместо ручного выделения и копирования содержимого файлов map.cs и server.cs, можно просто скопировать сами файлы в папку нового проекта и подключить. 
49 Свежий взгляд. Размещение кораблей. 00:18:37 15 чел. ★ 5 Done
  На этом уроке мы напишем метод doShip() для размещения кораблей.
Для этого нам потребуется добавить уже написанные классы Box и Ocean.
Также придётся немного поменять функцию создания и размещения кораблей.
Отчёт отправил: 7276. Ильшат Выполнено за 1 час. 15 мин. [Показать отчёт]
Научился: Повторение обработки запроса serverShip. 
Сложности: Сложностей не было. 
Комментарии: Все ок. 
50 Свежий взгляд. Завершение проекта. 00:21:42 15 чел. ★ 5 Done
  На этом уроке МЫ ЗАКОНЧИМ создание программы.
Напишем обработку состояний play и stop.
Отчёт отправил: 7276. Ильшат Выполнено за 50 мин. [Показать отчёт]
Научился: Код знакомый, ранее написанный, повторение пройденного материала. 
Сложности: Сложностей не было. 
Комментарии: Все ок) 
51 ФИНАЛЬНЫЙ УРОК. 00:03:29 8 чел. ★ 5 Done
  На этом уроке мы поиграем по сети с участниками вебинара.
Твоя задача - записать видеообзор созданного проекта.

Какой курс ты будешь проходить следующим?
Отчёт отправил: 7276. Ильшат Выполнено за 30 мин. [Показать отчёт]
Научился: Повторил создание видео обзоров. 
Сложности: Проблем не было. 
Комментарии: Отличный курс, рекомендую всем, кто хочет познакомиться с работой клиент-серверных приложений. Следующий курс - Морской бой. 
Видеообзор: https://youtu.be/Y3x3tYy5O3U
52 VIP урок. Змейка 01:08:56 2 чел. ★ 5 Done
  Создаём популярную игру «Змейка».
На примере простых объектов демонстрация основ ООП.
Отчёт отправил: 7276. Ильшат Выполнено за 3 час. 50 мин. [Показать отчёт]
Научился: Повторил обработку нажатия клавиш keyPressEvent, работу с таймером QTimer, матрицами boost::ublas, очередью std::queue. 
Сложности: Остановиться в абстракции кода. 
Комментарии: В качестве структуры данных для хранения тела змеи использовал очередь. 
  Итого:   52 видеоурока общей продолжительностью 20 час. 53 мин. 2 чел. ★ 4.95  
  Финалисты:   Ильшат,   Tekashnik .

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




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

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

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

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


Научился: тестировать свою программу, записывать видеообзор
Трудности: не вериться что это уже все, я уже с роднилась с этим классным куром!
УРА!!! УРА и еще раз УРА!!! Я сделала самую суперскую игру!!! Какая же я Умничка!!! Спасибо Женя за этот шикарный курс, пусть кто-то скажет что он и затянут и может быть кому-нибудь не понравятся то что мы переделывали, начинали несколько раз все с нуля, однако мне это все безумно понравилось и только благодаря этому мне все понятно как создается проект, как пишется программа, для меня это очень важно и ценно!!! Я получила отличный опыт и практику, море новых знаний и сейчас уже намного увереннее себя чувствую в программировании, мое количество уже переросло в качество и это меня делает очень счастливой, это стоит того!!! ❤️


Научился: Ура! Вот и морской флот закончен, сыграно немало партий и одержано немало побед! Архив с программой: https://yadi.sk/d/Yo2uHrUZkbywo
нет