Курсы по программированию

Формула программиста
основатель — Волосатов Евгений Витольдович

Игры со Спрайтами / Аполлон. Финальное прилунение

  • На этом уроке мы изменим метод Draw таким образом,
    чтобы он принимал координаты размещения спрайта и его масштаб.
    Далее, напишем методы для отображения всех спрайтов.
    Подгоним значения, чтобы всё отображалось красиво.
    И запустим наконец-таки нашу красочную игру
    с посадкой корабля Аполлон на Луну. Ура!
  • Дата отправки отчёта: 2 июня 2015 г.
  • Задание выполнено: за не указано
  • Чему научился: Вообще программа 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 можно спокойно использовать, т.к. не надо выбирать из списка, какой спрайт для анимации, а какой для статичного фона. И тогда двигая корабль не придется перерисовывать Луну и звезды.
  • Оценка видео-уроку:
Отчёт от 5027 за Игры со Спрайтами / Аполлон. Финальное прилунение


Отчёт от 5027 за Игры со Спрайтами / Аполлон. Финальное прилунение




Оцени работу

 
Сохранить страницу:

24. Оля
Оля
ответить
→  Руслан  # Игры со Спрайтами / Аполлон. Финальное прилунение. / 2015-06-02 14:02

Руслан, ты Молодец, самая лучшая работа!!! :)


1. Евгений Витольдович
Евгений Витольдович
ответить
→  Руслан  # Игры со Спрайтами / Аполлон. Финальное прилунение. / 2015-06-02 08:24

Руслан!!!
Я в восторге от проделанной тобой работы!
Очень многое ты изучил, очень многому научился самостоятельно.
Мне очень интересно и радостно было читать твой подробный отчёт. Круто!
Ты добился своей цели - получил ценный опыт, а я добился своей -
спровоцировал тебя на самостоятельную работу, предоставив стартовый материал.
Мне очень понравились твои идеи, молодец, что смог их довести до логического завершения.
Насчёт класса-прослойки Game - тоже верное решение, теперь каждый класс отвечает за своё.
Ship - за параметры корабля, Game - за правилами игры. То есть у тебя уже есть чувство
прекрасной абстракции :) Отличный результат, ещё раз скажу: я в восторге!
То-то на вебинаре тебе всегда всё понятно было :) когда другие молчали... :)
Из предложений - ты сам всё хорошо расписал - разделить спрайты на статические и динамические.
Либо две картинки для этого использовать, либо создать метод для стирания спрайта.


5027. Руслан
Руслан
ответить
# Игры со Спрайтами / Аполлон. Финальное прилунение. / 2015-06-02 02:26

Кому интересно как устроено внутри
http://www.fayloobmennik.net/4938476
Жду критику и предложения)


  • Отчёт оценивали:
    5577Иван+1   7178Олег+1  

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




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

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

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

Ты в любой момент сможешь отписаться от рассылки.
Научился: Научился работать с графическими объектами и перемещать их.
Трудности: Сложно было сдержаться, потому что не выводились все спрайты, кроме луны. Ох и промучался я, пришлось проект сносить и начиная со спрайтов всё перестраивать...
Спрайты учат меня быть сдержанным и спокойным :)
Научился: Масштабирование спрайтов при загрузке в проект.
Спасибо!