# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 | Спрайт. Первая форма |
|
|||
На этом уроке мы создадим форму, немножко её оформим, выберем для неё иконку. Далее напишем функцию, которая рисует на экране две линии. Спрайт - это графический объект, состоящий из линий и кругов. На этом уроке мы создадим графический редактор для спрайтов. Этот редактор мы будем использовать для создания «героев» игр. В каждой игре у нас будет несколько спрайтов, которые будут создаваться, двигаться, исчезать по правилам той или иной игры. Отчёт отправил: 5027. Руслан Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Нового ничего. Сложности: Придумать иконку) Комментарии: ... |
|||||
2 | Спрайт. Структура для линии |
|
|||
На этом уроке мы создадим структуру для хранения линий, массив палитры цветов и массив линий. И перепишем программу, чтобы она это всё выводило на экран. Отчёт отправил: 5027. Руслан Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: вспоминал старое Сложности: прозевал указать паблик в конструкторе структуры)) Просидел минут 10 пытаясь понять почему не видит конструктор с параметрами. Комментарии: Все в одном файле награмаждено. |
|||||
3 | Спрайт. Класс для графики |
|
|||
На этом уроке мы создадим класс Graph, куда перенесём всё хозяйство для рисования: структуру, графику, картинку, массив палитры. После этого создадим методы Draw() для рисования линий. Отчёт отправил: 5027. Руслан Выполнено за 20 мин. [Показать отчёт] Научился: Повторение - мать ученья) Сложности: не было Комментарии: не нравится мне массив цвета... надо как то по другому. Почему линия это структура а не класс, в чем преимущество в будущем? Насколько я знаю структуры используют либо для экономии памяти, либо для необходимости присваивания как значения. |
|||||
4 | Спрайт. Класс для Спрайта |
|
|||
На этом уроке мы создадим класс Sprite, в котором будут храниться все линии каждого спрайта. В этом классе будут методы для добавления линий, а также, самое главное, для сохранения и загрузки Спрайта из XML файла. Отчёт отправил: 5027. Руслан Выполнено за 30 мин. [Показать отчёт] Научился: было интересно Сложности: да все нормально Комментарии: нет |
|||||
5 | Спрайт. Рисуем линии мышкой |
|
|||
На этом уроке мы начнём создавать редактор, наконец-таки. Использую мышку можно будет рисовать линии, которые будут добавляться в наш спрайт. Отчёт отправил: 5027. Руслан Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Поэкспериментировал с событиями мышки. Сложности: Потеряться в логике Комментарии: нет |
|||||
6 | Спрайт. Панель инструментов |
|
|||
На этом уроке мы создадим панель инструментов с кнопками для переключения цвета, очистки экрана, отмены последнего действия. Отчёт отправил: 5027. Руслан Выполнено за 2 час. 00 мин. [Показать отчёт] Научился: Рисовать Сложности: Рисовать иконки)) Комментарии: Удовольствие от процесса получил) |
|||||
7 | Спрайт. Сериализация объекта |
|
|||
На этом уроке мы научимся сохранять и загружать объекты, используя технологию сериализации и десериализации. Отчёт отправил: 5027. Руслан Выполнено за 4 час. 00 мин. [Показать отчёт] Научился: Много читать о xml сериализации )) Сложности: разобраться почему сначала не сериализовался и потом и не десериализовался тип Color Комментарии: впечатление: гемор и еще раз гемор. Почему нужно нужно придумывать костыли, чтоб в xml перевести некоторые структуры? |
|||||
8 | Аполлон. Главные герои |
|
|||
На этом уроке мы озвучим правила игры Аполлон. Выясним, какие у нас будут главные герои. Твоё самостоятельное задание - нарисовать на бумаге внешний вид игры со всеми главными героями. Как ты это себе представляешь. Отчёт отправил: 5027. Руслан Выполнено за 10 мин. [Показать отчёт] Научился: искать в интернете картинки с названием "аполлон игра" Сложности: нарисовать, ибо рисовать не умею Комментарии: ку-ку) |
|||||
9 | Аполлон. Законы физики |
|
|||
Корабль Аполлон прилуняется на Луну. На этом уроке мы рассмотрим упрощённую физическую модель этого процесса и выпишем все параметры и все формулы, которые будут управлять этим процессом. Отчёт отправил: 5027. Руслан Выполнено за 30 мин. [Показать отчёт] Научился: Как обычно, в начале картинки и формулы, потом код) Сложности: Вспоминать школьную физику) Комментарии: Пум-пурум |
|||||
10 | Аполлон. Плавное прилунение |
|
|||
На этом уроке мы допишем игру Аполлон. Свяжем класс логики с интерфейсом. Сделаем управление двигателем с помощью мышки. Добавим таймер, функцию отображения корабля. А также сообщение о конце игры и перезапуск игры. Отчёт отправил: 5027. Руслан Выполнено за 4 час. 00 мин. [Показать отчёт] Научился: нюансам логики игры Сложности: отстроить играбельность Комментарии: Я не умею так быстро соображать, как Евгений Витольдович, почти с ходу писать почти работающий код) Чувствуется опыт по игрушкам, как они внутри должны выглядеть. |
|||||
11 | Спрайт. Рисуем Аполлона |
|
|||
На этом уроке мы переделаем программу, чтобы удобно было рисовать ломанные линии. Добавим фоновый рисунок для его обведения. И в конце концов нарисуем Землю, вид из Космоса. Задание: Научить программу рисовать ломанные и нарисовать Землю, поверхность Луны, Ракету, Работающие двигатели, маленькую звёздочку. Отчёт отправил: 5027. Руслан Выполнено за 30 мин. [Показать отчёт] Научился: пользоваться свои собственным почти графическим почти редактором )) Сложности: как всегда рисовать Комментарии: Я сделал бинарную сериализацию. Смысла в xml в данном случае нет, а гемора много. Опять не хотело сериализовать из-за фабрики. У меня список типа Figure, а внутри лежат наследованные Line, Rectangle и Ellipse. И он просто не видит какого типа объект надо сериализовать. Зато бинарная сериализация прошла с первого раза. Вообще xml сериализацию делают, когда нужно трансформировать данные в другой тип или передать объект в другую программу на другой платформе, ну или когда надо передать данные не всех полей объекта по сети, чтоб не забивать трафик целым объектом. Для данной ситуации бинарная сериализация подходит больше: нужны все поля, передаем на той же платформе, да и работает это быстрее в разы. |
|||||
12 | Аполлон. Graph и Sprite на Луне |
|
|||
На этом уроке мы внедрим созданные спрайты в написанную игрушку. Для этого мы добавим проект два класса из прошлых уроков - класс Graph и Sprite. Затем напишем метод загрузки всех спрайтов, и выведем один из них на экран. Задание наладить работу программы с предыдущими классами и уметь загружать подготовленные спрайты. Отчёт отправил: 5027. Руслан Выполнено за не указано [Показать отчёт] Научился: Создавать dll Сложности: Вносить изменения, приходилось постоянно между тремя проектами крутиться, чтоб все работало. Комментарии: Решил я выпендриться и был наказан затратой кучи времени) Так как я спрайты сериализовал в бинарные фйлы, то возникла новая неожиданность. Нельзя сериализовать класс, описанный в одной программе, а десериализовать в класс, описанный в другой программе, даже если эти классы совпадают по реализации. Т.е. сериализуемый класс должен быть вынесен в отдельную сборку, попросту говоря в dll, и уже его подключать в программу где сериализуешь и его же подключать где десериализуешь. Пришлось делать то, о чем я уже говорил раньше. Класс, с описанием фигуры и реализацией его прорисовки (класс Graff), я вынес в dll. Теперь я могу эту dll всовывать в любую прогу где надо выводить наши спрайты, без всякого копипаста кода. Ну а так как я настраивал dll, решал, что именно там должно быть, менялось описание самого класса, то постоянно приходилось копировать dll то в прогу Sprite, то в Apollon. Потому что небольшое испарвление в классе dll и десериализовать предыдущую картинку уже не хотело. Вобщем я спрайты на Аполлон рисовал 4 раза)) Ну зато теперь совсем просто! В любую игру, где мы будем работать с нашими рисованными спрайтами, можно просто указать ссылку на нашу dll и вся реализация нам доступна: десериализация спрайта из файла, методы его отрисовки. |
|||||
13 | Аполлон. Финальное прилунение |
|
|||
На этом уроке мы изменим метод Draw таким образом, чтобы он принимал координаты размещения спрайта и его масштаб. Далее, напишем методы для отображения всех спрайтов. Подгоним значения, чтобы всё отображалось красиво. И запустим наконец-таки нашу красочную игру с посадкой корабля Аполлон на Луну. Ура! Отчёт отправил: 5027. Руслан Выполнено за не указано [Показать отчёт] Научился: Вообще программа Sprite и Apollon меня многому научили. Во первых четко продумывать структуру программы, во-вторых пришлось работать с кучей разных контроллов, их свойствами и методами, с которыми я раньше дело не имел. Втретих я получил один из способов как могут быть реализованы игры с точки зрения кода. Сложности: Настроить правильное отображение спрайтов, их масштабирование, положение на экране, настроить, чтоб как то чувствовалось, что это игра, а не просто картинки на экране) Комментарии: Вобщем я игрушку в большей части сделал по своему. В части это из-за того, что моя спрайт программа реализованна была по другому: у меня в список фигур спрайта входят не только линии, но и прямоугольники, и эллипсы, так же у меня можно корректировть толщину линии, ну и цветовая гамма вся, что предоставляет Windows, и сериализирую я в бинарный файл, в не в xml. Ну и плюс я добавил в программу функционал добавление-отключение фоновой картинки, рисование сетки для облечения точного рисования и возможность сдвигать картинку в углы окна, чтоб потом в программах легче было позиционировать их на экране. Вобщем из-за того, что изначально я решил из интереса усугубить с программой спрайтов, мне приходилось все, что связано с отображением в дргуих программах подгонять под это. Мои изменения: 1. Из спрайтов я сделал сортированный список типа SortedList<string, Sprite> sprites; (на скрине кода предыдущего урока видно как я это делаю). Это даёт нам возможность обращаться к спрайту по его ключу (а не индексу, как в массиве), в моем случае я сделал стринговое имя. Всетаки удобнее sprites["ship"], чем ничего не говорящее sprites[0]. Ну и перерисовывать сразу весь список удобнее через foreach, массив такой возможности не даст. 2. Как по мне то класс формы должен заниматься только отрисовкой на форме. Он ничего не должен знать о корабле, о его свойствах и даже о правилах игры. Поэтому все, что касается отрисовки спрайтов, я вынес в класс Sprites. Класс Ship, это только корабль как объект, у него есть скорость, топливо, двигатель, высота как местоположение в пространстве, метод перемещения, который определяет это самое месторасположение. Их я инкапсулировал в класс Game, который собственно и определяет правила игры. Теперь форма у меня знает только о Game и ничего не знает о корабле и как рисуются спрайты. Вобщем класс Game, это прослойка-контроллер между формой и объектами игры. 3. Статус Play я разбил на два EngineOn и EngineOf. Мне так показалось удобнее обрабатывать события. Вообще, конечно, там все далеко от совершенства, есть у меня еще мысли как усовершенствовать. Первое, добавить функционал в Sprite сразу делать пакет спрайтов одним файлом. Когда выделяешь насколько спрайтов в файловом диалоговом окне, десериализует поочереди файлы, создает SortedList где ключ каждого спрайта это имя файла. А потом сериализует весь этот список в один файл. Что нам это дает? Ну вопервых на вход игры иметь один файл сразу со всеми спрайтами, во-вторых, обращаться к ним по имени. Ну и второе, что мне хочется добавить, это сделать два пикчебокса. Один для статичных спрайтов, другой для анимированных. Потому, что происходит очень много лишней перерисовки. И вот тогда наши пакеты спрайтов будут вообще замечательны. На вход игры мы будем получать два пакета: один для статичного пикчебокса, второй из спрайтов которые надо двигать. И тут foreach можно спокойно использовать, т.к. не надо выбирать из списка, какой спрайт для анимации, а какой для статичного фона. И тогда двигая корабль не придется перерисовывать Луну и звезды. |
|||||
14 | Полуфинальный урок |
|
|||
Задание: Записать видео обзор игры Аполлон. Отчёт отправил: 5027. Руслан Выполнено за 4 час. 00 мин. [Показать отчёт] Научился: Делать видеообзор, никогда не делал этого раньше) Сложности: Сделать, чтоб вокруг все вели себя тихо, пока запись шла) Комментарии: Фууууххх.... Дублей 15 было точно, некоторые по 15 минут. Видеообзор: http://www.youtube.com/watch?v=Vfof_eaCjOs |
|||||
15 | Домино. Правила игры |
|
|||
Мы начинаем создание Домино-Пасьянса. Костяшки домино перемешиваются и выстраиваются на столе в пирамидку, вверху одна костяшка, внизу семь штук. Верхние и нижние открываются. Отчёт отправил: 5027. Руслан Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Думать о архитектуре игры Сложности: Да в принципе ничего, все доходчиво показано) Комментарии: Фотки доминошек не выкладываю, не заморачивался их искать в магазине ради одной фотографии) |
|||||
16 | Домино. Перемешиваем плашки |
|
|||
На этом уроке мы напишем метод Start (), который перемешает вся плашки домино. Далее, продумаем список всех необходимых методов для класса Domino и реализуем самые тривиальные из них. Отчёт отправил: 5027. Руслан Выполнено за 4 час. 00 мин. [Показать отчёт] Научился: Вспомнил мат функции, пришлось читать за ошибки преобразования из double в int для выделения дробной части числа. Вспоминал формулы алгебры по арифметическим прогрессиям. Сложности: Реализация своей логики по перемешиванию плашек домино, чтоб за один проход и с одинаковым шансом рандома для всех плашек. Пришлось брать ручку и листочек, вспоминать и выводить формулы 6-7 класса алгебры, чтоб по порядковому номеру плашки знать в каком ряду и столбце она находится. Упираешься надолго в непонятку в коде, которая потом оказывается мелочью, которую просто надо знать изначально. Вобщем неприлично долго провозился с реализацией вроде простого с первого взгляда метода перемешивания. Комментарии: Люблю заморочки)) Хорошо себя чувствую, когда из конца в конец получается что хочешь) |
|||||
17 | Домино. Динамическая пирамида |
|
|||
На этом уроке мы нарисуем пирамидку из доминошек. Для отображения каждой плашки используется Label. Label'ы мы будем создавать динамически, как в сказке. Отчёт отправил: 5027. Руслан Выполнено за 1 час. 30 мин. [Показать отчёт] Научился: Позиционировать лейблы) Пытался делать это не подсматривая в урок, но признаюсь пару раз подсмотрел, время к сдаче урока поджимает, а еще половины толком не сделал. Сложности: Разобраться с нужным позиционированием лейблов. Комментарии: Спешу сделать вовремя |
|||||
18 | Домино. Делегаты отображения |
|
|||
На этому уроке мы свяжем два класса - FormDomino и Domino через механизм делегатов. Наш делегат будет отвечать за отображение плашки. Отчёт отправил: 5027. Руслан Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: работать с делегатами Сложности: да вроде бы ничего Комментарии: Я вызов ShowPlate() перенес из SetState(). Как то не камильфо мне, что метод изменения статуса занимается перерисовкой. Всунул я его в HidePlate() внутрь цикла. Там после изменения статуса мы сразу и перерисовываем плашки. |
|||||
19 | Домино. Выбираем и убираем |
|
|||
На этом уроке мы допишем метод отображения плашки. Затем напишем важный метод OpenFreePlates(), чтобы после убирания старых плашек новые открывались. Закончим урок обработкой клика по каждой плашке - будем отмечать выделенные и убирать их, если сумма равна 12. Отчёт отправил: 5027. Руслан Выполнено за не указано [Показать отчёт] Научился: Как обычно опробывал свою логику Сложности: Копипастить, ибо хочется по своему сделать)) Комментарии: Да все замечательно |
|||||
20 | Домино. Ура! Победа! |
|
|||
На этом уроке мы допишем пасьянс из Домино. Напишем методы IsWinner() и IsLooser(). Добавим метки для оповещения о результате игры и попытаемся наконец-таки разложить этот пасьянс. Не забудьте добавить эту программу в своё портфолио! Внимание! В конце видео можно посмотреть на весь код целиком. Отчёт отправил: 5027. Руслан Выполнено за 2 час. 00 мин. [Показать отчёт] Научился: скорее не "научился", а "подучился" ) Ну или "прокачался" )) Сложности: Разобраться в некоторых моментах логики Комментарии: Как обычно во время написания, возникают всякие ненормальные идеи мимо которых трудно пройти). Возникла идея хранить плашки в обычном массиве plate[], инкапсулировать его в класс какой-нибудь Plates и реализовать к нему свой именованный энумератор, чтоб обращаться можно было Plates[2,1], а он возвращал плашку plat[4]. Т.е. двумерного массива вроде как и нет, а плашки из ряда можно доставать так, как будто они у нас на поле лежат разложенные. Ни лишних тебе элементов в массиве, да еще и форичем можно пройтись. В общем провозился пару часов, никогда раньше энумераторы не реализовывал, но остался доволен. Потом перепишу игрушку без двумерных массивов. Я, думаю, что если рассматривать плашки как одномерный массив, проще логика будет и для открытых плашек отдельный список, чтоб меньше перебора и лишних проверок было. |
|||||
21 | Спрайт. Рисуем плашки |
|
|||
На этом уроке мы будем рисовать плашки домино. Каждая состоит из двух частей, отдельно нарисуем восемь левых частей и столько же правых. Почему восемь? От пустышки до шестёрки, и оборотная сторона. Отчёт отправил: 5027. Руслан Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Рисовать в Поинте, если это так можно назвать. Сложности: Рисовать Комментарии: Всякие ухищрения в коде легче сделать, чем рисовать.... |
|||||
22 | Домино. Отображение плашки |
|
|||
На этом уроке мы откроем проект Домино, добавим в него два класса - Graph и Sprite, и создадим метод для рисования плашки домино. Нам придётся, как и в Аполлоне, доработать методы Draw(). В конце урока мы загрузим файлы спрайтов в ресурсы и научим статический метод Load() загружать их их массива байт, из строки символов. Это добавление делать по желанию. Отчёт отправил: 5027. Руслан Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Разобрался как с ресурсами работать Сложности: Разбираться с ресурсами Комментарии: Ресурсы тоже гемор)) Зачем все так было усложнять..? |
|||||
23 | Домино. Двойной спрайт |
|
|||
На этом уроке мы создадим класс SpriteDomino, в котором будем хранить обе части плашки домино в виде спрайта. В этом классе будет конструктор и методы Open() / Hide(), которые будут пересоздавать спрайты по мере необходимости. Дальше нужно будет в классе Graph написать метод Draw() для рисования нашей доминошки и убедиться, что это всё работает. Отчёт отправил: 5027. Руслан Выполнено за 5 час. 00 мин. [Показать отчёт] Научился: Делал неделю назад, уже не помню что и как. Сложности: Ну конкретно по этой работе, спозиционировать. Комментарии: Начал писать с нуля, со своей логикой, но по плану задач ЕВ ) |
|||||
24 | Домино. Анимация спрайта |
|
|||
На этом уроке мы создадим анимацию спрайтов. Для этого нам понадобится таймер, несколько переменных, и возможность стирания нарисованных спрайтов. Отчёт отправил: 5027. Руслан Выполнено за 5 час. 00 мин. [Показать отчёт] Научился: Двигать Сложности: В этих анимациях все понятно, ничего сложного. Комментарии: Момент анимации тяжело заскринить) |
|||||
25 | Домино. Подъём переворотом |
|
|||
На этом уроке мы реализуем ещё два вида анимации. 1. Выбор плашки, она будет "дрожать" на месте 2. Переворот плашки, она будет сжиматься и разжиматься. Отчёт отправил: 5027. Руслан Выполнено за 5 час. 00 мин. [Показать отчёт] Научился: Анимациям Сложности: Делал анимацию на дроп, что они в разные стороны летят от центра экрана и уменьшаются в размерах - "исчезают", долго провозился. А т.к. я весь экран не перерисовываю, затираю область плашки, то и всякие нюансы по затираню соседних плашек происходят, отстраивал долго. Комментарии: Все гуд |
|||||
26 | Домино. Базовый класс Анимаций |
|
|||
На этом уроке мы наведём порядок в нашем проекте. Квинтессенцию анимации оформим отдельным классом - Animate. Уберём всё лишнее из класса Graph и основного модуля. И сделаем, чтобы всё заработало - пока статичное отображение спрайта через экземпляр класса Animate. Отчёт отправил: 5027. Руслан Выполнено за 5 час. 00 мин. [Показать отчёт] Научился: Делать разные виды анимаций Сложности: Чтоб это действительно было анимация )) Комментарии: У меня чуть по другому, скрины анимаций я уже выкладывал. У меня PlateSprites всетаки наследуется от Sprites. В Sprites лежат методы отрисовки спрайтов, а PlateSprites расширяет это до отрисовки доминошек, там же реализовал анимацию. |
|||||
27 | Домино. Три наследника Аниматора |
|
|||
На этом уроке мы реализуем все способы анимации через созадние классов наследников от Animate. У нас будет три класса: AnimateMove, AnimateMark и AnimateTurn. Отчёт отправил: 5027. Руслан Выполнено за 5 час. 00 мин. [Показать отчёт] Научился: Тому же что и на предыдущем уроке) Сложности: То же самое что и на предыдущем уроке) Комментарии: Всем Ку! |
|||||
28 | Домино. Пирамида из анимашек |
|
|||
На этом уроке мы добавим ещё парочку виртуальных функций в базовый класс Animate, чтобы их можно было вызывать без явного указания типа. Но самое главное - мы создадим матрицу "анимашек", инициализируем её экземплярами базового класса и выведем это всё на экран в виде пирамиды. Отчёт отправил: 5027. Руслан Выполнено за 5 час. 00 мин. [Показать отчёт] Научился: Позиционировать спрайты доминошек Сложности: Чтоб все красиво было и они перевернулись как надо. У меня ж анимация висит как поле у плашки. Но помнится, что все вроде быстро заработало, проблемы были в самой анимации, с которой я долго возился. Комментарии: Ну я уже высылал скрин пирамидки, поэтому повторюсь с картинкой. На скрине с кодом видно как я подписываю плашки на обработку события. |
|||||
29 | Домино. Rolling Stones |
|
|||
На этом уроке мы сделаем анимацию раскладывания всех плашек домино на столе. Для этого напишем метод RollDomino(), а ещё нам потребуется отлавливать момент, когда все доминошки уже выложены на стол. Для этого мы добавим поле string mode, чтобы в таймере отловить этот момент. Отчёт отправил: 5027. Руслан Выполнено за 5 час. 00 мин. [Показать отчёт] Научился: Разным методам анимации, перепробовал кучу всяких вариантов Сложности: В моем случае не вся анимация хорошо выглядит, я все реализовывал так чтоб по минимуму перерисовывать графику, из-за этого постоянные затирки других спрайтов или остаются атрибуты от недотертых спрайтов. Со всем этим разобраться ушло много и времени, и мозгов. Комментарии: Бурум-бурум. Ну не знаю, что тут писать в КАЖДОМ уроке!)))) |
|||||
30 | Домино. Наведение порядка |
|
|||
На этом уроке мы наведём порядок на форме, избавимся от наследия Label [,], уберём ненужные методы. Потом, на 10-ой минуте мы приступим к открытию плашек на первом и последнем ряду пирамиды. Отчёт отправил: 5027. Руслан Выполнено за 5 час. 05 мин. [Показать отчёт] Научился: Без понятия, но чему-то научился, опыт он и в африке опыт. Сложности: Сделать независимыми модулями. Комментарии: Как я уже говорил, делегат ShowPlate я сделал полем каждой плашки и теперь на каждую плашку я могу повесить цепочку методов, хоть анимации, хоть еще чего-то. |
|||||
31 | Домино. Финальный аккорд |
|
|||
На этом уроке мы научим программу выбирать плашки по щелчку мышки, убирать с экрана верные пары, и сыграем несколько раз до полного успеха :) Отчёт отправил: 5027. Руслан Выполнено за не указано [Показать отчёт] Научился: Писал все и сразу с нуля со своей логикой, но старался по шагам ЕВ. Иногда эти шаги не совпадали, поэтому сказать конкретно за этот урок тяжело. Программа написана неделю назад, местами вылизывал, подпиливал, чтоб не стыдно в отчет выложить. Сложности: Довести её до логического конца)) Хотелось бросить её и не заморачиваться, работает и ладно. В плане архитектуры хотелось, чтоб логика была разбита на независимые слои, где каждый верхний слой инкапсулирует нижний. Комментарии: Как и обещал, выкладываю свою реализацию на всеобщее рассмотрение. Критика, обсуждения, дополнения, предложения приветствуются. http://www.fayloobmennik.net/5030084 Конечно не идеал, чёт время уже не хочется на нее тратить. Есть моменты реализация которых мне не нравятся, есть моменты с костылями. Коментариев оставил достаточно, но если у кого какие вопросы возникнут, что и как по коду - отвечу. Основные моменты изменений: Плашки - это обычный массив plate[] (этим избежал ненужных эллементов двумерного массива), инкапсулировал его в Plates, где рализовал итератор для него и два именованих энумератора. Это дало возможность перебирать все плашки с помощью foreach и обращаться к плашке так, будто она лежит на поле plates[row,column]. Описал событие которое возникает при смене статуса плашки. Когда плашка меняет статус, генерируется событие, на которое можно подвесить любую цепочку методов для обработки. У меня один метод, который разбирает, как эту плашку анимировать. В плашке есть поле делегат, на который я подписываю метод с анимацией. Каждая плашка может анимироваться как хочет, хоть цепочку из анимаций. При этом сохраняется полная абстракция. Обрабатывая анимацию, мы вообще не в курсе, как именно она анимируется. |
|||||
32 | ФИНАЛЬНЫЙ урок |
|
|||
Задание: Записать видео обзор игры Пасьянс из домино. Отчёт отправил: 5027. Руслан Выполнено за 4 час. 00 мин. [Показать отчёт] Научился: Делать видеообзор Сложности: Не запнуться на долгую паузу) Комментарии: Сейчас пересмотрел, что я выложил вчера на ютуб и думаю: "Ууууу......" )))) Видеообзор: http://www.youtube.com/watch?v=Vfof_eaCjOs |
|||||
33 | VIP урок. Телефон по TCP/IP протоколу |
|
|||
На этом видеоуроке мы создадим три класса, которые удобно использовать для передачи данных между двумя компьютерами. Отчёт отправил: 5027. Руслан Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: Создавать TCP соединения Сложности: Ну, наверное, понять что за чем следует и почему. Комментарии: У меня был опыт только с UDP, как работать с TCP только читал, поэтому было интересно как это реализовывается на пркатике |
|||||
Итого: 33 видеоурока |
12 час. 26 мин. |
28 чел. | |||
Финалисты: Олюшка, Руслан, Екатерина, Иван, Андрей Поляков, Дмитрий, Елена, Ильшат, Фомичева Наталья, Александр, Владимир, Никита, Сергей Сергеевич, Артём, Мариша , Михаил Ермишин, Максим Лапшинов, Максим, Электрон, Tekashnik, Новопашин Владимир, Dimon, chokayes, Николай Денисов, Денис, Yefim, Кирилл, Anatoli . |