# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
|
|||
Мы начинаем создание многопользовательской игры "Морской Бой". В игру можно будет играть одновременно четырём участникам. Будет реализована клиентская часть с графическим интерфейсом на C#. Будет разработан протокол общения клиентских программ с сервером. Будет спроектирована и создана серверная база данных на MySQL. Будет написана серверная часть отработки протокола на PHP. Будет создан клиент-класс отработки протокола на C#. Будет реализована анимация всех событий в игре. На этом уроке рассказано о структуре проекта. Отчёт отправил: 791. Валерий Жданов Выполнено за 10 мин. [Показать отчёт] Научился: Планировать игру, делать простейшие картинки с прозрачным фоном Сложности: Сложностей не было Комментарии: Стартовал новый интересный курс. Согласно плана игра должна стать очень интересной, а создание ее - динамичным, информативным и повышающим опыт занятием. Делал всё во время вебинара, но сейчас пересоздал всё. Немного задержался при закачке irfanview, но это уже оргвопрос. За занятие спасибо. |
|||||
2 | Интерфейс - Первый кораблик |
|
|||
На этом уроке мы начнём создание проекта - создадим проект, настроим форму, прикрепим иконку. На самой форме разместим главную картинку - pictureMain. А ещё нарисуем 4 картинки и добавим их в ресурсы проекта. Далее создадим графику, подготовим картинки и научимся их выводить на основную картинку. Под конец урока сделаем размещение корабликов по щелчку мышки. Отчёт отправил: 791. Валерий Жданов Выполнено за 15 мин. [Показать отчёт] Научился: Работать с ресурсами проекта, ловить координаты мыши при выводе рисунка Сложности: Грамотно создать graphics-объект Комментарии: Решил сделать игру "пиратской" направленности по мотивам любимой с детства книги "Одиссея капитана Блада" (потому такое название ). Вывод кораблей получился, правда, когда стал выводить png из ресурсов, оказалось, что не получился прозрачный фон, но это несложно поправить. В целом всё получилось, буду штурмовать бастионы курса и искать сокровища пирата Шарпа дальше. |
|||||
3 | Интерфейс - А на море корабли |
|
|||
На этом уроке мы нарисуем море с кораблями. Пока у нас не будет матриц, размещение объектов будет случайным. В конце урока напишем алгоритм позиционирования курсора мышки над нашим морем и сделаем размещение "ударов" по морю. Отчёт отправил: 791. Валерий Жданов Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Работе с координатами на pictureBox, практическому применению элемента теории вероятности Сложности: Пожалуй последний момент - формула ввода рисунка в клетку, чтобы за края не выходил. Сделал я ее конечно быстро, однако продумать и осознать, как это работает - понадобилось время Комментарии: Ну что же, готов еще один отчет этого курса, на этот раз пиратская карта получилась. На этапе тестирования выяснилось, что некоторые спрайты, несмотря на следование мной методике сохранения, получились непрозрачными. Пришлось перерисовать, но это даже на пользу моей идее вышло: кораблик - небольшой фрегат, красная клякса - это взрыв, а сбитый корабль - это Черный Рождер, пиратский флажок. Для отчета увеличил число клеток до 12, и получилась вполне сносная карта морского сражения. Согласен с участником вчерашнего вебинара - рисунок конечно мелковат, но думаю, что сначала реализуем алгоритм игры, потом буду играться с размером спрайтов,а возможно реализую изменение этого размера из настроек программы |
|||||
4 | Графика - Карта Морского флота |
|
|||
На этом уроке мы создадим карту морского флота. Это будет двумерный массив, в каждой клетке которого записано одно из четырёх значений. Мы напишем алгоритм размещения кораблей и сделаем отображение карты на экране. Отчёт отправил: 791. Валерий Жданов Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Логике работы методов Сложности: Метод PlaceShip(). Комментарии: Интересный урок. Новых навыков в программировании я не получил, всё умел делать и до этого. Но здорово прокачал логику создания карты и вставки кораблей. Достаточно сложно и интересно было разобраться, что за чем надо, и где как запустить, чтобы получилась автоматически сгенерированная карта с кораблями! А с random вообще ходили по лезвию ножа. В общем всё было классно и сложно, занятие понравилось. В общем, эскадра фрегатов снова в море. |
|||||
5 | Графика - Выстрелы по Кораблям |
|
|||
На этом уроке мы наконец-таки сможем немножко поиграть с компьютером и потопить весь компьютерный флот! :) Сначала мы уберём вывод кораблей на экран, потом переделаем функцию обработки клика мышки. Добавим проверку точности удара и вывода результата. Отчёт отправил: 791. Валерий Жданов Выполнено за 40 мин. [Показать отчёт] Научился: Прокачал навыки работы с матрицей и с оператором switch Сложности: Сложностей не было Комментарии: Ну что! Свистать всех наверх! Побеждаем любые неприятельские флотилии, все сокровища морей - наши! А если серьезно, очень простая, но очень интересная реализация боя с компьютерным флотом. Получилось всё и со статистикой (правый нижний угол). И кстати, первый раз сохраняю сокровища, т.е. коды, полученные на уроке, при помощи системы управления версиями Git (подсистема SmartGit), но в сетевые репозитории пока ничего не выкладывал. |
|||||
6 | Графика - Рефакторинг |
|
|||
На этом уроке мы займёмся рефакторингом кода. Создадим класс Graph, в который перенесём все операции, связанные с графикой. Код станет чище, понятней, хотя придётся повозиться с его оптимизацией. Отчёт отправил: 791. Валерий Жданов Выполнено за 1 час. 06 мин. [Показать отчёт] Научился: Прокачал навыки по рефакторингу кода, переносу функций в отдельный класс, повторил логику отнесения функций к тому или иному классу. Сложности: Сложностей не возникло, рефакторингом мы занимаемся достаточно часто, спасибо Евгению, но некоторые возможности ООП открылись с неожиданной стороны Комментарии: Спасибо за урок, благодаря ему переработка собственного кода из рутинного занятия превратилась в интересный процесс с красивыми логическими пассажами и программными оптимизациями. Код стал красивым, удобочитаемым. Интересно сделан тандем DrawCell() - DrawCellNoRefresh(). В общем спасибо, получил массу удовольствия и прокачал массив знаний! |
|||||
7 | Анимация - Полёт снаряда |
|
|||
На этом уроке мы составим список всех анимаций, которые будут в нашей игре. Твоя задача - нарисовать все кадры полёта снаряда.
Отчёт отправил: 791. Валерий Жданов Выполнено за 31 мин. [Показать отчёт] Научился: Работать в фотошопе в windows 10 с прозрачными картинками, создавать эскизы для простейших мультиков Сложности: придумывать, как будет выглядеть горящее летящее ядро на следующем кадре Комментарии: Пошел по простому пути - сделал что-то подобное тому, что показано в видео, но картинок сделал немного меньше. |
|||||
8 | Анимация - Отображение кадров |
|
|||
На этом уроке мы создадим первую анимацию в нашем проекте. Это будет летящий снаряд. Мы рассмотрим несколько способов его отображения, а также добавим его перемещение. Отчёт отправил: 791. Валерий Жданов Выполнено за 40 мин. [Показать отчёт] Научился: Делать игровой спрайт с динамически изменяющимся изображением. Сложности: Реально сложным оказалось снять скриншот летящего снаряда, стандартными средствами windows не получилось (или мне не удалость синхронно нажимать CTRL-PrScreen). Воспользовался oCam, там есть возможность делать снимки экрана в png-файлы. Их и прикладываю. Комментарии: Очень интересный захватывающий урок, который смотрел и делал всё на одном дыхании. Научился не только работать со спрайтом, но и отлаживать программу и ее модули! |
|||||
9 | Анимация - Полёт по таймеру |
|
|||
На этом уроке мы добавим таймер и реализуем полёт снаряда через функцию его события. Для этого в функцию таймера нужно будет разместить внутренности цикла, а также добавить проверки на начало и окончание полёта снаряда. Потом мы оформим полёт снаряда в ту клетку моря, по которой был щелчёк мышки. Отчёт отправил: 791. Валерий Жданов Выполнено за 3 час. 30 мин. [Показать отчёт] Научился: Прокачал навыки работы с таймером, формирование координат вылета снаряда, повторил расчет формулы ячейки Сложности: Сложностей слава Богу не было, немного запутался в формулах "обратного расчета", но разобрался Комментарии: Вот и подошел я к финальному аккорду "капитана Блада", в отчете кроме скриншота экрана есть видео именно по этой части программы. Я программку немного дополнил от себя: сделал возможность выбора - чем стрелять, добавил режим "Таверна" для пиратского отдыха (подробнее на видео). Ссылку на архив программы я тоже выкладываю, но хочу предупредить - из-за большого объема исходной информации сжатие произведено архиватором 7z, и чтобы распаковать, нужно установить себе этот архиватор. До новых встреч! Видеообзор: https://youtu.be/sKWgb7ZOF5E |
|||||
10 | Архитектура - Перезагрузка проекта |
|
|||
На этом уроке мы начнём всё заново. Но уже на другом, качественно новом уровне. Проработаем архитектуру будущей программы. Создадим новый проект и создадим класс Ocean. Пока программа будет простой, самое главное в этом уроке - понять архитектуру проекта, увидеть весь лес как бы сверху. Отчёт отправил: 791. Валерий Жданов Выполнено за 4 час. 12 мин. [Показать отчёт] Научился: Составлять план проекта "от общего к частному" Сложности: Сложностей не было Комментарии: Очень удачная идея - сделать новый проект, перейти на новые рельсы с уже готовыми старыми наработками. К сожалению, тоже с uml не очень, поэтому схему выкладываю "по старинке" - на листе бумаги, нарисованную в карандаше. Как скриншот исходника - проект, где создаем "океаны", а в моем случае - фланги, видимые с наблюдательного пункта. |
|||||
11 | Архитектура - Карта Пиратов |
|
|||
На этом уроке мы создадим карту Пиратов, определимся с условными обозначениями (enum), определим отдельные матрицы для размещения кораблей и отметки совершённых по ним ударов. Создадим метод для размещения кораблей и потестируем всё это в пошаговом режиме. Также добавим статистические переменные, настоящие пираты должны знать сколько было кораблей и сколько осталось. Отчёт отправил: 791. Валерий Жданов Выполнено за 2 час. 20 мин. [Показать отчёт] Научился: Получил новые навыки и прокачал старые при работе с enum и перегруженными методами. Сложности: Пожалуй сделать табличку EnumIcons, еще раз просматривал видео, чтобы до конца разобраться в логике Комментарии: Очень интересно, смотрел на одном дыхании, делал на одном выдохе. Скрин прикладываю - там где вывод первого "кораблика" в ships |
|||||
12 | Архитектура - Наследие картинок |
|
|||
На этом уроке мы займёмся картинками. Создадим класс Box, унаследованный от PictureBox и настроим его для использования в нашем проекте. Далее, из него мы унаследуем классы для каждой из картинок. Самое сложное в этом уроке - уловить идею наследования и понять, почему и как эти картинки выводятся на экран. Отчёт отправил: 791. Валерий Жданов Выполнено за 1 час. 55 мин. [Показать отчёт] Научился: Открыл для себя с иной стороны наследуемые классы, изучил работу с ControlCollection Сложности: Location в Box. Достаточно сложные формулы Комментарии: И теперь я озвучу новую идею, которая пришла на смену "пиратской"! Итак, далеко, далеко, в далекой галактике... ну в общем Звёздные войны. Но здесь акцент сделан не на джедаев, а на сражения космического флота. Атака небольшого отряда кораблей регулируется Координационным центром Альянса повстанцев (или Звездой Смерти, если игрок играет на стороне Империи, выбор возможен), вместо океана - участок вселенной, размером mapSize * mapSize, океаны противника - левый, центральный и правый фланги нашей флотилии. В скрине - вывод стартового окна и окна игры. Урок очень понравился, много нового почерпнул, спасибо большое Евгению, спасибо участникам вебинара) |
|||||
13 | Архитектура - Фабрика картинок |
|
|||
На этом уроке мы настроим вывод карты на экран. Нам понадобится фабрика картинок - статический метод Box.Create и волшебная функция превращения EnumShips x EnumFires в EnumIcons. Отчёт отправил: 791. Валерий Жданов Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Прокачал навыки предыдущих уроков. Сложности: Наверное, найти ошибку, сделанную в предыдущем уроке, и не исправленную. Вышла боком при "экспериментаторстве". Исправил))) Эксперимент - полезная вещь. Комментарии: Я доволен. Получилось почти как у Люка Скайуокера на дисплее пульта управления истребителем. Будем реализовывать стрельбу. |
|||||
14 | Архитектура - Мышкой по кораблям |
|
|||
На этом уроке мы научимся по щелчку мышки стрелять по кораблям. Для этого нам понадобится создать обработчик MouseClick, и подцепить его к каждой картинке. Используя делегаты мы будем свистать всех на верх - до класса Form1, из которого будем спускаться по иерархии опять вниз, для пометки выстрела и отображения его на карте. Отчёт отправил: 791. Валерий Жданов Выполнено за 42 мин. [Показать отчёт] Научился: 1. Инициировать щелчок мыши в классе 2. Прокачал знания по делегатам 3. Научился организовывать делегат в форме, и обращаться к нему из класса 4. Узнал функцию parentCollection.Remove() Сложности: Сложностей не возникло Комментарии: Этот урок был для меня сплошь из новизны. С делегатами я до этого работал, но чтобы назад из класса в форму...очень элегантно получилось. Не перестаю удивляться возможностям си-шарпа. На скрине у меня промахи - зеленые крестики, а попадения - вспышки-взрывы в звездном небе. Параллельно придумываю, как реализовать это анимационно. Ну что же, со стороны Альянса стрельбу реализовали, теперь пора перейти к созданию Звезды Сме... ой, простите, к созданию Сервера управления "огневой потехой". |
|||||
15 | База Морского Флота - INFO |
|
|||
На этом уроке мы начнём проектировать Базу данных серверного флота. Пока мы создадим эскиз только для одной таблицы - info, в которой будет поле status. Для него мы составим схему состояний, и условия перехода из одного состояния в другое. Отчёт отправил: 791. Валерий Жданов Выполнено за 20 мин. [Показать отчёт] Научился: Составлять план изменения статусов, а также планировать, что в базе необходимо, а что - излишние данные Сложности: Этап "мозгового штурма" - не сразу понял логику создаваемой таблицы. Поначалу напланировал много лишнего Комментарии: Вводный плановый урок необходим. Без него проект может пойти "не туда". Хоть и отчитываюсь сейчас, но видео буду пересматривать обязательно. |
|||||
16 | База Морского Флота - SHIP |
|
|||
На этом уроке мы создадим таблицу для хранения координат кораблей и их состояния. В таблице ship будет 5 полей. Отдельное внимание уделено вопросу перезарядки пушек. Отчёт отправил: 791. Валерий Жданов Выполнено за 42 мин. [Показать отчёт] Научился: Прокачал навыки планирования базы, вспомнил несколько разновидностей типа int (tinyint, long) Сложности: Сложностей не возникло. Комментарии: Интересное продолжение планирования базы, продолжил по "горячим следам" плана первой таблицы, но данная получилась динамической и с "комплексным" ключом. В скрине схематично изобразил двух "имперцев" (это не конфеты), но взрыв немного кривоватый. |
|||||
17 | База Морского Флота - GAME |
|
|||
На этом уроке мы создадим таблицу событий в нашей игре, в которой будут хранится транзакции всех выстрелов и их результатов. В таблице game будет 6 полей, при каждом выстреле в неё будет добавляться две записи. Отчёт отправил: 791. Валерий Жданов Выполнено за 24 мин. [Показать отчёт] Научился: Создавать лог программы, вести учет действий Сложности: Понять структуру GAME, а также не улыбнуться, когда учитель произнес мной придуманное действие mimo. Комментарии: Блочную схему, честно сказать не смог придумать, но тут действий как таковых нет, идет "летопись " событий. По просьбе Музы развернул картинку, как надо |
|||||
18 | База Морского Флота - phpMyAdmin |
|
|||
На этом уроке мы наконец-таки возьмёмся за практику. Запустим phpMyAdmin и создадим в нём все три таблицы. Отчёт отправил: 791. Валерий Жданов Выполнено за 30 мин. [Показать отчёт] Научился: Создавать таблицы в phpmyadmin Сложности: сложностей не было, я всё знал, но повторение - мать учения, прокачка никогда не помешает Комментарии: Вдруг увиделись мне базы Моих прог гораздо лучше. Весь сервак собой заняли, - SQL - ну что с них взять Абсолютно без exe-шек, - Просто как счастливый случай. И я их на май-админе научился создавать))) Спасибо за урок!!! |
|||||
19 | База Морского флота - Экспресс SQL |
|
|||
На этом уроке мы сделаем краткий экспресс-обзор языка структурированных запросов. Кратко рассмотрим все основные команды SQL.
Отчёт отправил: 791. Валерий Жданов Выполнено за 3 час. 02 мин. [Показать отчёт] Научился: Изучил ньюансы работы с каждым из операторов SQL Сложности: Сложностей не было Комментарии: Запросы SQL понравились практически все. Как смог, разместил их на отчетном "скрине" - коллаже. Не стреляйте в "художника", он рисовал, как умел. |
|||||
20 | База Морского Флота - Запросы SQL |
|
|||
На этом уроке мы от души повеселимся с таблицами info и ship - посоставляем самые разные запросы к ним, которые в будущем нам пригодятся при проектировании Серверного протокола. Эти запросы будут выполняться в PHP на серверной части при обработке клиентских запросов. Отчёт отправил: 791. Валерий Жданов Выполнено за 1 час. 40 мин. [Показать отчёт] Научился: Прокачал навыки работы с SQL, рассмотрел много новых ситуаций Сложности: Пожалуй, подсчет кораблей, не соответствующих условиям расстановки Комментарии: Сделал все запросы, урок очень необходим, теперь мы можем в php-скриптах пользоваться заготовками sql запросов. |
|||||
21 | Протокол - Список команд |
|
|||
На этом уроке мы начнём проектировать протокол общения клиентской программы с сервеной частью. Перечислим все клиентские команды и кратко пройдёмся по каждой. Составить xml-формат сервеных ответов нужно будет самостоятельно.
Отчёт отправил: 791. Валерий Жданов Выполнено за 1 час. 05 мин. [Показать отчёт] Научился: Планировать стратегию сервера при любых запросах Сложности: самостоятельная работа по поводу получаемых результатов Комментарии: Что могу сказать... немного встал в ступор по поводу того, что получать командой do=game, поэтому в отчете не указал... будем разбираться в дальнейшем |
|||||
22 | Протокол - Команды INFO и SHIP |
|
|||
На этом уроке мы проработаем клиентский запрос "info" и "ship". Выпишем все варианты ответа сервера, и, самое главное, напишем SQL-запросы для проверки всех возможных случаев. Урок сложный, но после такой проработки создание серверного РНР скрипта будет сплошным удовольствием :) Отчёт отправил: 791. Валерий Жданов Выполнено за 3 час. 23 мин. [Показать отчёт] Научился: Прокачал навыки разработки схематического алгоритма, научился тестировать полученный протокол. Сложности: Уяснить всю последовательность действий, удержать в голове всю линию алгоритма протокола Комментарии: Интересный урок, увидел - запомнил не сразу, сделал несколько раз - освоился... Теперь понял, как в профессиональных программах (в ПО тех же банкоматов или "умных домов") обрабатываются ошибки, и делаются логи и ответы пользователю. И я думаю, что данный протокол является универсальным - по данному готовому протоколу можно делать серверный скрипт на любых языках программирования: php, asp net, pyton и прочие-прочие-прочие... Еще раз спасибо Евгению за интересный урок, и всем слушателям вебинара за общение. |
|||||
23 | Протокол - Команда FIRE |
|
|||
На этом уроке мы проработаем клиентский запрос "fire". Выпишем все варианты ответа сервера, и, самое главное, напишем SQL-запросы для проверки всех возможных случаев. Во второй части урока мы три раза пройдёмся по алгоритму, выполняя все написанные SQL запросы. Отчёт отправил: 791. Валерий Жданов Выполнено за 2 час. 30 мин. [Показать отчёт] Научился: Прокачал все навыки составления протоколов Сложности: Ну... в чем сложности были с прошлым протоколом, в этот раз всё прошло легче, да и сам протокол поменьше... но тоже заковыристый Комментарии: Очень динамичный протокол, понял теперь, как стреляют в онлайн-играх. И понял, почему в "Звездных войнах" (на тему которых я реализую свой проект) имперские войска были так злы на повстанцев. Пока нацелишь Звезду Смерти, пока корабли расставишь, чтобы крыльями друг друга не задели, пока наведешь, пока все протоколы проверишь... чтобы стреляли без ошибок, пока каждый выстрел запротоколится... В общем урок очень понравился,спасибо! |
|||||
24 | Протокол - Команда GAME |
|
|||
На этом уроке мы разберём последнюю команду протокола - game. Команда простая, но очень важная - именно она будет чаще всего выполняться, благодаря ей все клиенты будут знать, что происходит на море, что куда летит и с каким результатом. Отчёт отправил: 791. Валерий Жданов Выполнено за 53 мин. [Показать отчёт] Научился: Составлять многомерный xml-ответ, и еще раз прокачал навыки создания протокола Сложности: Всё без проблем, после прошлых двух уроков работать с протоколом оказалась очень просто, логику выполнил еще до просмотра видео, по мере посмотра только сделал небольшие правки. Комментарии: Вот как делаются логи. Очень полезный урок. Как всё сядет на PHP... посмотрю в дальнейшем. А $now_tick я предлагаю определять до SQL-запроса (см скрин 2), потому что он участвует в одном из запросов. (У Евгения в видео было после SQL) |
|||||
25 | Серверный флот - FTP подключение |
|
|||
На этом уроке мы подключимся к FTP серверу, создадим там свою папку и создадим файл init.php. Отчёт отправил: 791. Валерий Жданов Выполнено за 10 мин. [Показать отчёт] Научился: Навыки с ftp - моя постоянная обязанность на работе, и с php знаком так что новизны не было. Но в качестве подготовки к следующему этапу - урок незаменимый Сложности: Сложностей тоже не было. Комментарии: Я уже проделывал это на вебинаре, и моя папочка на ftp-ресурсе videoschool.info уже была создана. Но для прокачки навыков ( и для проверки, что всё функционирует нормально, настройки сервера не поменялись) создал папочку wal11 и перепроделал этот урок снова. За урок спасибо Евгению! |
|||||
26 | Серверный флот - Как PHP дружит с MySQL |
|
|||
На этом уроке мы создадим на РНР подключение к базе данных MySQL. Организуем подключение, выберем базу данных, выполним запрос, и напечатеем результат. Отчёт отправил: 791. Валерий Жданов Выполнено за 20 мин. [Показать отчёт] Научился: Прокачал навыки работы с mysql_connect(), узнал и сделал задел на будущее, что есть команды msqli_*, будут использоваться в php 7 Сложности: Сложностей не было Комментарии: Прокачал навыки работы с php, вспомнил молодость, спасибо). В качестве редактора php решил использовать среду netbeans, она мне нравится. Там есть и режим отладки кода (как в VS c точками останова), только я пока не понял, как он работает. Как разберусь, расскажу здесь) |
|||||
27 | Серверный флот - Рефакторинг РНР-кода |
|
|||
На этом уроке мы займёмся рефакторингом, если у кого-нибудь повернётся язык назвать этим словом то, чем мы здесь будем заниматься... Мы переделаем файл init.php в подключаемый - в нём будет только подключение к базе и две полезные функции. В конце урока мы создадим файл battle.php, в котором сделаем include и протестируем. Отчёт отправил: 791. Валерий Жданов Выполнено за 1 час. 12 мин. [Показать отчёт] Научился: Рефакторингу в php, работе над ошибками в функциях php Сложности: Сложностей не было, всё ясно и понятно. Комментарии: Урок хороший, замечаний нет, всё достаточно хорошо без проблем получилось. В отчете о результате не забуду о тематике оформления моего проекта, а поскольку здесь реализованы первичные заготовки под будущий протокол - результат вывода будет на фоне недостроенной Звезды Смерти. |
|||||
28 | Серверный флот - Функция do_info |
|
|||
На этом уроке мы создадим структуру файла battle.php и напишем заглушки для всех функций протокола. Далее, реализуем команду info в функции do_info() Отчёт отправил: 791. Валерий Жданов Выполнено за 1 час. 05 мин. [Показать отчёт] Научился: Прокачал навыки работы со switch...case уже в php, создал xml-ответ Сложности: Сложностей не было Комментарии: Не судите строго, люди! Велико было искушение оставить extract($row) в коде, я его и оставил. В перерыве между уроками уберу. Остальное всё получилось без запинок,первая функция протокола на орбиту перенесена! |
|||||
29 | Серверный флот - Капитан очевидность |
|
|||
На этом уроке мы исправим несколько мелких недочётов. Добавим в таблицу info поле oceans, соответственно изменим функцию do_info(). Добавим в файл init.php две новые функции select_scalar() и now_ticks (). Также нам придётся изменить тип полей для хранения тиков с int на bigint. Отчёт отправил: 791. Валерий Жданов Выполнено за 1 час. 30 мин. [Показать отчёт] Научился: Проводить технические работы со скриптами на сервере Сложности: Пожалуй, отчитаться. На скриншоты надо разместить достаточно много, но всё получилось Комментарии: Всё сделано, работоспособность init.php и battle.php вроде бы не потеряна. Правда, размерность поля даже при изменении int на bigint остается 11, а когда я очищаю, по умолчанию ставит 20. Надеюсь, это не повлияет на дальнейшую работу серверных скриптов. |
|||||
30 | Серверный флот - Функция do_ship |
|
|||
На этом уроке мы напишем функцию do_ship(). Разберём ещё раз все возможные ошибки расстановки кораблей, сформируем код и текст ошибки, который вернём в xml. После успешного размещения всех кораблей мы поменяем статус игры на "play" и начнём уже играть. Отчёт отправил: 791. Валерий Жданов Выполнено за 2 час. 05 мин. [Показать отчёт] Научился: Проработал навыки SQL и PHP Сложности: Сложностей не было Комментарии: Длинный урок, сделал в 4 захода. Но всё получилось, Звезда Смерти (или командный пункт Альянса повстанцев) теперь могут размещать свои корабли там, где необходимо нанести удары по силам противника. Ждем теперь видео, посвященного серверной "огневой потехе". |
|||||
31 | Серверный флот - Функция do_fire |
|
|||
На этом уроке мы напишем функцию do_fire(). Разберём ещё раз все возможные ошибки при выполнении выстрела, сформируем код и текст ошибки, который вернём в xml. После успешного выстрела мы проверим количество оставшихся океанов. В конце функции добавим все транзакции в таблицу game. Отчёт отправил: 791. Валерий Жданов Выполнено за 3 час. 15 мин. [Показать отчёт] Научился: Работе с кодом php Сложности: исправить свои ошибки, немного напутал с переменными Комментарии: Стрельба получилась немного сложнее, чем расстановка кораблей, но я рад, что Звезда Смерти может координировать, когда корабль стреляет из фотонной пушки, а когда накапливает заряд и увертывается от выстрелов противника. Очень нравится, что столько контролирующих функций сделано в серверной части проекта. |
|||||
32 | Серверный флот - Функция do_game |
|
|||
На этом уроке мы напишем функцию do_game(). Будем получать список всех выстрелов с результатами. Отчёт отправил: 791. Валерий Жданов Выполнено за 30 мин. [Показать отчёт] Научился: Работать с PHP и SQL (провел для себя самостоятельную работу) Сложности: Наверное с tick-ами разобраться Комментарии: Всё работает, правда получилось не сразу, достаточно проблемно искать ошибки, когда код написан без ошибок, но выполняется не так, как мне надо. Но всё получилось, серверную часть сдаю! Победу над сегодняшним этапом этого проекта я посвящаю своему коту Барсику, который может отступить, спрятаться, но никогда не сдается и всегда ищет решение даже для неразрешимых (и неразрещаемых мной) вещей ))) |
|||||
33 | ПОЛУФИНАЛЬНЫЙ УРОК. Большая игра |
|
|||
На этом уроке мы поиграем в Морской флот через адресную строку. Устроим соревнование из шести участников. Битва будет что надо! :) В начале урока мы допишем в протокольчик команду перезапуска игры и стартанём. В конце урока я покажу, как написан скрипт map.php для отображения статуса игры. В этом уроке нужно поиграть самому и ЗАПИСАТЬ видеообзор игры. Отчёт отправил: 791. Валерий Жданов Выполнено за 2 час. 30 мин. [Показать отчёт] Научился: работе с игровой стратегией, а также прокачал навыки записи видео обзора Сложности: Немного трудным был сам переход от программированию к игре, а также есть проблемы с работой протокола на asp net - решаю, как всё получится - предъявлю Комментарии: Спасибо за интересный курс, классный не только игровым сюжетом, но и тем, что я на основе его понял, как делаются клиент-серверные приложения. Реализовываю на нем немного другой сферы клиент-серверное приложение, получится или нет - загадывать не хочу, но то, что я с легкостью сделал для него базу, запросы и протокол работы серверной части - это свершившийся факт. Спасибо капитану флота Евгению и вам, друзья, за поддержку. P.s. Видео обзор будет загружен и опубликован ориентировочно 16.12.2015г. в 23-00 по московскому (и пензенскому) времени Видеообзор: https://youtu.be/QG6M2ruSaF8 |
|||||
34 | Клиентский флот - Подключение к серверу |
|
|||
На этом уроке мы создадим класс Server, который будет подключаться к нашему PHP скрипту. Будет отправлять запрос и получать ответ. Примечание Если ваша сеть использует для подключения к интернету особые настройки прокси-сервера, то необходимо добавить в программу считывание системных Proxy-настроек, см. пример. Отчёт отправил: 791. Валерий Жданов Выполнено за 24 мин. [Показать отчёт] Научился: Изучил работу WebRequest, WebClient и их составляющих Сложности: Сложностей не было Комментарии: Вот и первый сигнал от Звезды Смерти, перехваченный кораблем друзей-повстанцев. Победа будет за нами! P.s. а поточный метод я не удалил из кода... рука не поднялась... |
|||||
35 | Клиентский флот - Парсинг XML |
|
|||
На этом уроке мы научимся парсить XML документ. Мы напишем метод RequestInfo(), который выудит все нужные значения из XML-документы и вернёт их в основную программу. Отчёт отправил: 791. Валерий Жданов Выполнено за 1 час. 55 мин. [Показать отчёт] Научился: Парсинг XML Сложности: Найти ошибку в php коде, которая не давала мне обработать xml-код. Комментарии: Огромное спасибо! Как я ждал урок по парсингу XML - кода, и сбылось. Всё получилось, правда не сразу. А для отображения ошибок я в catch нашей функции RequestInfo() сделал вывод в status ошибки ex.message, благодаря чему приходит сообщение от магистра Йоды, какую ошибку допустили при считывании xml или обработке запроса (см скрин 2) а на скрине один - то, что выходит при правильном результате |
|||||
36 | Клиентский флот - Класс ServerInfo |
|
|||
На этом уроке мы займёмся рефакторингом - вынесем повторяющиеся действия в отдельные методы, уберём параметры метода RequestInfo(), запишем их во внутренние поля класса. Потом вынесем всё хозяйство для Info-запроса в отдельный класс ServerInfo. Оптимизируем ещё некоторые процедуры и уберём try-блоки в базовый класс. Отчёт отправил: 791. Валерий Жданов Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Прокачал навыки по рефакторингу, повторил public, protected. Сложности: Сложностей не было, всё делал пошагово Комментарии: Спасибо за урок, очень интересно, правда я через RequestInfo выводил сообщение об ошибке от Йоды, и при рефакторинге и переносе try ... catch это немного усложнилось, но я по мотивам прошлых уроков сделал публичную строковую переменную error, через нее Йода нам и говорит об ошибке. И кстати, при тесте программы ошибка отработала (при входе на videoschool.info/ship/ ... выдается ошибка 500 - видимо повис сервер), и Магистр Джедаев предупредил нас об этом. Значит, рефакторинг прошел правильно! Поистине неисчерпаемы возможности Силы... и Си-шарпа. |
|||||
37 | Клиентский флот - Класс ServerShip |
|
|||
На этом уроке мы создадим класс ServerShip для размещения кораблей. В нём будет вспомогательный метод ExtractShipCoords(), который матрицу кораблей сконвертирует в строчку GET данных для передачи их в РНР скрипт. Также будут некоторые сложности для получения этой матрицы в коде основной программы, нам придётся добавить новый метод в класс Ocean, изменить права доступа к матрице ships в классе Map. Отчёт отправил: 791. Валерий Жданов Выполнено за 1 час. 42 мин. [Показать отчёт] Научился: Создал новый скрипт, прокачал навыки с xml и чтением пришедших с сервера данных Сложности: Запустить серверную часть на локальном сервере, поскольку с орбиты VideoSchool.info мою "Звезду" какой-то... Люк Скайуокер уже сбил, а с локальными копиями еще разобраться надо было, где какой релиз Комментарии: так же пришлось отработать ошибки, приходящие с сервера, чтобы квадрат (океан) отображался нормально, нужный статус был и т.д. но в общем и целом всё запустилось, всё заработало, и Звезда снова на орбите, а флагман расставляет корабли и получает информацию о кораблях противника. В тесте согласился поучаствовать лучший во вселенной пилот - Чубакка) |
|||||
38 | Клиентский флот - Класс ServerFire |
|
|||
На этом уроке мы создадим класс ServerFire. Мы научим нашу программу отправлять на сервер приказы о выстрелах! Правда, мы пока ещё не будем знать о результатах выстрела. Зато мы доработаем РНР функцию, чтобы она в XML возвращала координаты выстрелившего корабля, чтобы организовать правильную анимацию. Отчёт отправил: 791. Валерий Жданов Выполнено за 2 час. 00 мин. [Показать отчёт] Научился: Прокачал навыки по Request, поработал над ошибками Сложности: Особых сложностей не было, просто уже много написали, все труднее держать весь проект под контролем Комментарии: Повстанцы и имперцы учатся стрелять и координировать выстрелы. Работа над проектом продолжается P.s. а запросы я делал в phpmyadmin... ну люблю я там их делать) |
|||||
39 | Клиентский флот - Класс ServerGame |
|
|||
На этом уроке мы проработаем клиентский запрос "game" для получения списка транзакций всех участников игры. Мы создадим класс ServerGame, создадим структуру Actions, доработаем методы из базового класса и реализуем заполнение массива считанными с XML данными. |
|||||
40 | Одинокий капитан - Прицел |
|
|||
На этом уроке мы нарисуем новую пиктограмму для нашей игры - знак прицела. И пропишем его добавление в уже созданные классы. Это пиктограмма будет использоваться для отметки полей, по которым сделан выстрел, но пока ещё не известен результат. |
|||||
41 | Одинокий капитан - Выстрелы |
|
|||
На этом уроке мы обработаем массив actions со списком полученных от сервера транзакций. Сделаем отображение результатов, для этого придётся исправить мелкие ошибки прошлого урока в классе Box: Create(EnumIcons icon) |
|||||
42 | Одинокий капитан - Победа! |
|
|||
На этом уроке мы добавим на форму таймер и флаг состояния игры. После этого мы поиграем в одинокого капитана - будем стрелять по всем океанам без ответного огня. |
|||||
43 | Финишная миля. Перезагрузка. |
|
|||
На этом уроке мы добавим функцию перезапуска в РНР файл. | |||||
44 | Финишная миля. Мой океан. |
|
|||
На этом уроке мы добавим две важные функции в наш проект. 1. Определение номера свободного океана при запуске. 2. Случайное размещение кораблей на выбранном океане. |
|||||
45 | Финишная миля. Найти победителя |
|
|||
На этом уроке мы наконец-таки немножко поиграем :) Потом сделаем определение победителя. Из-за чего в конец запутаемся в коде класса Form1. Примем решение на следующем уроке переписать его. |
|||||
46 | Свежий взгляд. Схема проекта. |
|
|||
На этом уроке мы опять начнём всё сызнова. Рассмотрим шесть основных состояний нашей программы. Создадим новый проект и настроим его. |
|||||
47 | Свежий взгляд. Управление из таймера. |
|
|||
На этом уроке мы заложим фундамент нашей программы - шесть методов do*() и вызов их из таймера. |
|||||
48 | Свежий взгляд. Ожидание запуска. |
|
|||
На этом уроке мы напишем метод showMessage() для отображения сообщений игры. Далее, мы добавим в наш проект уже написанные классы Server* и Map. Также разместим кнопку Start для запуска игры. |
|||||
49 | Свежий взгляд. Размещение кораблей. |
|
|||
На этом уроке мы напишем метод doShip() для размещения кораблей. Для этого нам потребуется добавить уже написанные классы Box и Ocean. Также придётся немного поменять функцию создания и размещения кораблей. |
|||||
50 | Свежий взгляд. Завершение проекта. |
|
|||
На этом уроке МЫ ЗАКОНЧИМ создание программы. Напишем обработку состояний play и stop. |
|||||
51 | ФИНАЛЬНЫЙ УРОК. |
|
|||
На этом уроке мы поиграем по сети с участниками вебинара. Твоя задача - записать видеообзор созданного проекта. Какой курс ты будешь проходить следующим? |
|||||
Итого: 51 видеоурок |
19 час. 44 мин. |
9 чел. | |||
Финалисты: Андрей Поляков, Елена, Юрий, Олюшка, Иван, Tekashnik, Дмитрий, Ильшат, Николай Денисов . |