Дата | Видеоурок | Результат | |
---|---|---|---|
Нанософт Твоё портфолио | + 1 | ||
Не приходилось запускать дочерние сторонние программы. Поэкспериментировал. Да вобщем то ничего. Было интересно. Надо как то время выделить и довести её до ума. |
|||
Игры со Спрайтами VIP урок. Телефон по TCP/IP протоколу | + 1 | ||
Создавать TCP соединения Ну, наверное, понять что за чем следует и почему. У меня был опыт только с UDP, как работать с TCP только читал, поэтому было интересно как это реализовывается на пркатике |
|||
Игры со Спрайтами ФИНАЛЬНЫЙ урок | + 1 | ||
Делать видеообзор Не запнуться на долгую паузу) Сейчас пересмотрел, что я выложил вчера на ютуб и думаю: "Ууууу......" )))) |
|||
Игры со Спрайтами Полуфинальный урок | + 1 | ||
Делать видеообзор, никогда не делал этого раньше) Сделать, чтоб вокруг все вели себя тихо, пока запись шла) Фууууххх.... Дублей 15 было точно, некоторые по 15 минут. |
|||
Игры со Спрайтами Домино. Финальный аккорд | + 2 | ||
Писал все и сразу с нуля со своей логикой, но старался по шагам ЕВ. Иногда эти шаги не совпадали, поэтому сказать конкретно за этот урок тяжело. Программа написана неделю назад, местами вылизывал, подпиливал, чтоб не стыдно в отчет выложить. Довести её до логического конца)) Хотелось бросить её и не заморачиваться, работает и ладно. В плане архитектуры хотелось, чтоб логика была разбита на независимые слои, где каждый верхний слой инкапсулирует нижний. Как и обещал, выкладываю свою реализацию на всеобщее рассмотрение. Критика, обсуждения, дополнения, предложения приветствуются. http://www.fayloobmennik.net/5030084 Конечно не идеал, чёт время уже не хочется на нее тратить. Есть моменты реализация которых мне не нравятся, есть моменты с костылями. Коментариев оставил достаточно, но если у кого какие вопросы возникнут, что и как по коду - отвечу. Основные моменты изменений: Плашки - это обычный массив plate[] (этим избежал ненужных эллементов двумерного массива), инкапсулировал его в Plates, где рализовал итератор для него и два именованих энумератора. Это дало возможность перебирать все плашки с помощью foreach и обращаться к плашке так, будто она лежит на поле plates[row,column]. Описал событие которое возникает при смене статуса плашки. Когда плашка меняет статус, генерируется событие, на которое можно подвесить любую цепочку методов для обработки. У меня один метод, который разбирает, как эту плашку анимировать. В плашке есть поле делегат, на который я подписываю метод с анимацией. Каждая плашка может анимироваться как хочет, хоть цепочку из анимаций. При этом сохраняется полная абстракция. Обрабатывая анимацию, мы вообще не в курсе, как именно она анимируется. |
|||
Игры со Спрайтами Домино. Наведение порядка | + 1 | ||
Без понятия, но чему-то научился, опыт он и в африке опыт. Сделать независимыми модулями. Как я уже говорил, делегат ShowPlate я сделал полем каждой плашки и теперь на каждую плашку я могу повесить цепочку методов, хоть анимации, хоть еще чего-то. |
|||
Игры со Спрайтами Домино. Rolling Stones | + 1 | ||
Разным методам анимации, перепробовал кучу всяких вариантов В моем случае не вся анимация хорошо выглядит, я все реализовывал так чтоб по минимуму перерисовывать графику, из-за этого постоянные затирки других спрайтов или остаются атрибуты от недотертых спрайтов. Со всем этим разобраться ушло много и времени, и мозгов. Бурум-бурум. Ну не знаю, что тут писать в КАЖДОМ уроке!)))) |
|||
Игры со Спрайтами Домино. Пирамида из анимашек | + 1 | ||
Позиционировать спрайты доминошек Чтоб все красиво было и они перевернулись как надо. У меня ж анимация висит как поле у плашки. Но помнится, что все вроде быстро заработало, проблемы были в самой анимации, с которой я долго возился. Ну я уже высылал скрин пирамидки, поэтому повторюсь с картинкой. На скрине с кодом видно как я подписываю плашки на обработку события. |
|||
Игры со Спрайтами Домино. Три наследника Аниматора | + 1 | ||
Тому же что и на предыдущем уроке) То же самое что и на предыдущем уроке) Всем Ку! |
|||
Игры со Спрайтами Домино. Базовый класс Анимаций | + 1 | ||
Делать разные виды анимаций Чтоб это действительно было анимация )) У меня чуть по другому, скрины анимаций я уже выкладывал. У меня PlateSprites всетаки наследуется от Sprites. В Sprites лежат методы отрисовки спрайтов, а PlateSprites расширяет это до отрисовки доминошек, там же реализовал анимацию. |
|||
Игры со Спрайтами Домино. Подъём переворотом | + 2 | ||
Анимациям Делал анимацию на дроп, что они в разные стороны летят от центра экрана и уменьшаются в размерах - "исчезают", долго провозился. А т.к. я весь экран не перерисовываю, затираю область плашки, то и всякие нюансы по затираню соседних плашек происходят, отстраивал долго. Все гуд |
|||
Игры со Спрайтами Домино. Анимация спрайта | + 1 | ||
Двигать В этих анимациях все понятно, ничего сложного. Момент анимации тяжело заскринить) |
|||
Игры со Спрайтами Домино. Двойной спрайт | + 10 | ||
Делал неделю назад, уже не помню что и как. Ну конкретно по этой работе, спозиционировать. Начал писать с нуля, со своей логикой, но по плану задач ЕВ ) |
|||
Игры со Спрайтами Домино. Отображение плашки | + 1 | ||
Разобрался как с ресурсами работать Разбираться с ресурсами Ресурсы тоже гемор)) Зачем все так было усложнять..? |
|||
Игры со Спрайтами Спрайт. Рисуем плашки | + 1 | ||
Рисовать в Поинте, если это так можно назвать. Рисовать Всякие ухищрения в коде легче сделать, чем рисовать.... |
|||
Игры со Спрайтами Домино. Ура! Победа! | + 2 | ||
скорее не "научился", а "подучился" ) Ну или "прокачался" )) Разобраться в некоторых моментах логики Как обычно во время написания, возникают всякие ненормальные идеи мимо которых трудно пройти). Возникла идея хранить плашки в обычном массиве plate[], инкапсулировать его в класс какой-нибудь Plates и реализовать к нему свой именованный энумератор, чтоб обращаться можно было Plates[2,1], а он возвращал плашку plat[4]. Т.е. двумерного массива вроде как и нет, а плашки из ряда можно доставать так, как будто они у нас на поле лежат разложенные. Ни лишних тебе элементов в массиве, да еще и форичем можно пройтись. В общем провозился пару часов, никогда раньше энумераторы не реализовывал, но остался доволен. Потом перепишу игрушку без двумерных массивов. Я, думаю, что если рассматривать плашки как одномерный массив, проще логика будет и для открытых плашек отдельный список, чтоб меньше перебора и лишних проверок было. |
|||
Игры со Спрайтами Аполлон. Финальное прилунение | + 2 | ||
Вообще программа 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 можно спокойно использовать, т.к. не надо выбирать из списка, какой спрайт для анимации, а какой для статичного фона. И тогда двигая корабль не придется перерисовывать Луну и звезды. |
|||
Игры со Спрайтами Аполлон. Graph и Sprite на Луне | + 1 | ||
Создавать dll Вносить изменения, приходилось постоянно между тремя проектами крутиться, чтоб все работало. Решил я выпендриться и был наказан затратой кучи времени) Так как я спрайты сериализовал в бинарные фйлы, то возникла новая неожиданность. Нельзя сериализовать класс, описанный в одной программе, а десериализовать в класс, описанный в другой программе, даже если эти классы совпадают по реализации. Т.е. сериализуемый класс должен быть вынесен в отдельную сборку, попросту говоря в dll, и уже его подключать в программу где сериализуешь и его же подключать где десериализуешь. Пришлось делать то, о чем я уже говорил раньше. Класс, с описанием фигуры и реализацией его прорисовки (класс Graff), я вынес в dll. Теперь я могу эту dll всовывать в любую прогу где надо выводить наши спрайты, без всякого копипаста кода. Ну а так как я настраивал dll, решал, что именно там должно быть, менялось описание самого класса, то постоянно приходилось копировать dll то в прогу Sprite, то в Apollon. Потому что небольшое испарвление в классе dll и десериализовать предыдущую картинку уже не хотело. Вобщем я спрайты на Аполлон рисовал 4 раза)) Ну зато теперь совсем просто! В любую игру, где мы будем работать с нашими рисованными спрайтами, можно просто указать ссылку на нашу dll и вся реализация нам доступна: десериализация спрайта из файла, методы его отрисовки. |
|||
Игры со Спрайтами Аполлон. Плавное прилунение | + 1 | ||
нюансам логики игры отстроить играбельность Я не умею так быстро соображать, как Евгений Витольдович, почти с ходу писать почти работающий код) Чувствуется опыт по игрушкам, как они внутри должны выглядеть. |
|||
Игры со Спрайтами Аполлон. Законы физики | + 1 | ||
Как обычно, в начале картинки и формулы, потом код) Вспоминать школьную физику) Пум-пурум |
|||
Игры со Спрайтами Домино. Выбираем и убираем | + 1 | ||
Как обычно опробывал свою логику Копипастить, ибо хочется по своему сделать)) Да все замечательно |
|||
Игры со Спрайтами Домино. Делегаты отображения | + 1 | ||
работать с делегатами да вроде бы ничего Я вызов ShowPlate() перенес из SetState(). Как то не камильфо мне, что метод изменения статуса занимается перерисовкой. Всунул я его в HidePlate() внутрь цикла. Там после изменения статуса мы сразу и перерисовываем плашки. |
|||
Игры со Спрайтами Домино. Динамическая пирамида | + 1 | ||
Позиционировать лейблы) Пытался делать это не подсматривая в урок, но признаюсь пару раз подсмотрел, время к сдаче урока поджимает, а еще половины толком не сделал. Разобраться с нужным позиционированием лейблов. Спешу сделать вовремя |
|||
Игры со Спрайтами Домино. Перемешиваем плашки | + 2 | ||
Вспомнил мат функции, пришлось читать за ошибки преобразования из double в int для выделения дробной части числа. Вспоминал формулы алгебры по арифметическим прогрессиям. Реализация своей логики по перемешиванию плашек домино, чтоб за один проход и с одинаковым шансом рандома для всех плашек. Пришлось брать ручку и листочек, вспоминать и выводить формулы 6-7 класса алгебры, чтоб по порядковому номеру плашки знать в каком ряду и столбце она находится. Упираешься надолго в непонятку в коде, которая потом оказывается мелочью, которую просто надо знать изначально. Вобщем неприлично долго провозился с реализацией вроде простого с первого взгляда метода перемешивания. Люблю заморочки)) Хорошо себя чувствую, когда из конца в конец получается что хочешь) |
|||
Игры со Спрайтами Домино. Правила игры | + 1 | ||
Думать о архитектуре игры Да в принципе ничего, все доходчиво показано) Фотки доминошек не выкладываю, не заморачивался их искать в магазине ради одной фотографии) |
|||
Игры со Спрайтами Спрайт. Рисуем Аполлона | + 1 | ||
пользоваться свои собственным почти графическим почти редактором )) как всегда рисовать Я сделал бинарную сериализацию. Смысла в xml в данном случае нет, а гемора много. Опять не хотело сериализовать из-за фабрики. У меня список типа Figure, а внутри лежат наследованные Line, Rectangle и Ellipse. И он просто не видит какого типа объект надо сериализовать. Зато бинарная сериализация прошла с первого раза. Вообще xml сериализацию делают, когда нужно трансформировать данные в другой тип или передать объект в другую программу на другой платформе, ну или когда надо передать данные не всех полей объекта по сети, чтоб не забивать трафик целым объектом. Для данной ситуации бинарная сериализация подходит больше: нужны все поля, передаем на той же платформе, да и работает это быстрее в разы. |
|||
Игры со Спрайтами Аполлон. Главные герои | + 1 | ||
искать в интернете картинки с названием "аполлон игра" нарисовать, ибо рисовать не умею ку-ку) |
|||
Игры со Спрайтами Спрайт. Сериализация объекта | + 2 | ||
Много читать о xml сериализации )) разобраться почему сначала не сериализовался и потом и не десериализовался тип Color впечатление: гемор и еще раз гемор. Почему нужно нужно придумывать костыли, чтоб в xml перевести некоторые структуры? |
|||
Игры со Спрайтами Спрайт. Панель инструментов | + 1 | ||
Рисовать Рисовать иконки)) Удовольствие от процесса получил) |
|||
Игры со Спрайтами Спрайт. Рисуем линии мышкой | + 1 | ||
Поэкспериментировал с событиями мышки. Потеряться в логике нет |
|||
Игры со Спрайтами Спрайт. Класс для Спрайта | + 2 | ||
было интересно да все нормально нет |
|||
Игры со Спрайтами Спрайт. Класс для графики | + 1 | ||
Повторение - мать ученья) не было не нравится мне массив цвета... надо как то по другому. Почему линия это структура а не класс, в чем преимущество в будущем? Насколько я знаю структуры используют либо для экономии памяти, либо для необходимости присваивания как значения. |
|||
Игры со Спрайтами Спрайт. Структура для линии | + 1 | ||
вспоминал старое прозевал указать паблик в конструкторе структуры)) Просидел минут 10 пытаясь понять почему не видит конструктор с параметрами. Все в одном файле награмаждено. |
|||
Игры со Спрайтами Спрайт. Первая форма | + 1 | ||
Нового ничего. Придумать иконку) ... |
|||
Нано-игры Арканоид - Уровень и ракетка | |||
|
|||
Демо игры C# чего начать программировать | |||
|