Обучение языку c#

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

Игры со Спрайтами

Создание программы для рисования спрайтов.
Использование спрайтов для двух игр -
+ Аполлон - полёт на Луну
+ Домино - пасьянс из плашек домино.

Объём: 33 урока.
Создаём: Конструктор спрайтов + 2 игры
Срок: 30 дней

Хочу купить!

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

Цена: 1600 p.


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

# Название видеоурока Решило Рейтинг Доступ
1 Спрайт. Первая форма 00:13:27 91 чел. ★ 4.9 Done
  На этом уроке мы создадим форму,
немножко её оформим, выберем для неё иконку.
Далее напишем функцию, которая рисует на экране две линии.

Спрайт - это графический объект, состоящий из линий и кругов.
На этом уроке мы создадим графический редактор для спрайтов.
Этот редактор мы будем использовать для создания «героев» игр.
В каждой игре у нас будет несколько спрайтов, которые будут
создаваться, двигаться, исчезать по правилам той или иной игры.

Отчёт отправил: 1803. Саша Выполнено за 15 мин. [Показать отчёт]
Научился: повторил снеговиков 
Сложности: ждать тех участников, кто не подключился))) 
Комментарии: пока все понятно 
2 Спрайт. Структура для линии 00:11:07 84 чел. ★ 4.9 Done
  На этом уроке мы создадим структуру для хранения линий,
массив палитры цветов и массив линий.
И перепишем программу, чтобы она это всё выводило на экран.
Отчёт отправил: 1803. Саша Выполнено за 20 мин. [Показать отчёт]
Научился: повторил как работать со структурами 
Сложности: ничего 
Комментарии: в следующий раз буду делать скрины прямо во время вебинара, чтобы потом не переделывать сначала всю программу. 
3 Спрайт. Класс для графики 00:09:32 76 чел. ★ 4.9 Done
  На этом уроке мы создадим класс Graph,
куда перенесём всё хозяйство для рисования:
структуру, графику, картинку, массив палитры.
После этого создадим методы Draw() для рисования линий.
Отчёт отправил: 1803. Саша Выполнено за 15 мин. [Показать отчёт]
Научился: оптимизации кода 
Сложности: ничего 
Комментарии: нет вопросов 
4 Спрайт. Класс для Спрайта 00:14:10 57 чел. ★ 4.9 Done
  На этом уроке мы создадим класс Sprite,
в котором будут храниться все линии каждого спрайта.
В этом классе будут методы для добавления линий,
а также, самое главное, для сохранения
и загрузки Спрайта из XML файла.
Отчёт отправил: 1803. Саша Выполнено за 10 мин. [Показать отчёт]
Научился: повторил как работать со списками.  
Сложности: вообще говоря, самым сложным является проектирование программы а не реализация. здесь уже все за нас спроектировано, поэтому и не сложно и уже не так интересно.. 
Комментарии: хотелось бы самостоятельное задание на проектирование программы. возможно на основе шаблонов.  
5 Спрайт. Рисуем линии мышкой 00:22:31 56 чел. ★ 4.9 Done
  На этом уроке мы начнём создавать редактор, наконец-таки.
Использую мышку можно будет рисовать линии,
которые будут добавляться в наш спрайт.
Отчёт отправил: 1803. Саша Выполнено за 20 мин. [Показать отчёт]
Научился: повторил события мышки 
Сложности: ничего 
Комментарии: пока все понятно 
6 Спрайт. Панель инструментов 00:19:00 56 чел. ★ 5 Done
  На этом уроке мы создадим панель инструментов с кнопками
для переключения цвета, очистки экрана, отмены последнего действия.
Отчёт отправил: 1803. Саша Выполнено за 15 мин. [Показать отчёт]
Научился: в основном созданию интерфейса программы 
Сложности: ничего 
Комментарии: все пока понятно 
7 Спрайт. Сериализация объекта 00:18:23 54 чел. ★ 4.9 Done
  На этом уроке мы научимся сохранять и загружать объекты,
используя технологию сериализации и десериализации.
Отчёт отправил: 1803. Саша Выполнено за 20 мин. [Показать отчёт]
Научился: этот урок был наиболее интересным: я узнал как сохранять и загружать файлы в формате .xml. Это очень удобно. 
Сложности: найти ошибку в функции Load. ошибка заключалась в том, что вместо StreamReader я написал StringReader (в принципе в видеоуроке мы это разобрали, но я внимания не обратил) 
Комментарии: все отлично! 
8 Аполлон. Главные герои 00:07:08 81 чел. ★ 4.7 Done
  На этом уроке мы озвучим правила игры Аполлон.
Выясним, какие у нас будут главные герои.
Твоё самостоятельное задание -
нарисовать на бумаге внешний вид игры
со всеми главными героями.
Как ты это себе представляешь.
Отчёт отправил: 1803. Саша Выполнено за 15 мин. [Показать отчёт]
Научился: делать наброски интерфейса 
Сложности: найти чем бы сфотографировать 
Комментарии: Прощу прощения за плохое качество изображения. 
9 Аполлон. Законы физики 00:26:47 78 чел. ★ 4.9 Done
  Корабль Аполлон прилуняется на Луну.
На этом уроке мы рассмотрим упрощённую
физическую модель этого процесса и
выпишем все параметры и все формулы,
которые будут управлять этим процессом.
Отчёт отправил: 1803. Саша Выполнено за 25 мин. [Показать отчёт]
Научился: создавать физическую модель игры 
Сложности: пока ничего 
Комментарии: пока все понятно 
10 Аполлон. Плавное прилунение 00:55:16 67 чел. ★ 5 Done
  На этом уроке мы допишем игру Аполлон.
Свяжем класс логики с интерфейсом.
Сделаем управление двигателем с помощью мышки.
Добавим таймер, функцию отображения корабля.
А также сообщение о конце игры и перезапуск игры.
Отчёт отправил: 1803. Саша Выполнено за 1 час. 05 мин. [Показать отчёт]
Научился: разрабатывать логику игры, рассчитывать координаты элементов winForms, ну и конечно "прилунять" корабль 
Сложности: вот именно само прилунение корабля 
Комментарии: Несмотря на простую физику игры, все равно возникают сложности. Например - в какой момент вызвать нужный метод или через какое время начинать тормозить корабль. 
11 Спрайт. Рисуем Аполлона 00:14:10 48 чел. ★ 4.9 Done
  На этом уроке мы переделаем программу,
чтобы удобно было рисовать ломанные линии.
Добавим фоновый рисунок для его обведения.
И в конце концов нарисуем Землю, вид из Космоса.

Задание: Научить программу рисовать ломанные и
нарисовать Землю, поверхность Луны, Ракету,
Работающие двигатели, маленькую звёздочку.
Отчёт отправил: 1803. Саша Выполнено за 1 час. 15 мин. [Показать отчёт]
Научился: работать с событиями мышки. рисовать в созданном с нуля редакторе. 
Сложности: 1. Нарисовать Землю. 2. Еще до просмотра урока долго не мог понять, почему фоновый рисунок не отображается. Оказывается прозрачность надо было указать в классе Graph. 
Комментарии: все супер! 
12 Аполлон. Graph и Sprite на Луне 00:19:58 45 чел. ★ 5 Done
  На этом уроке мы внедрим созданные спрайты в написанную игрушку.
Для этого мы добавим проект два класса из прошлых уроков -
класс Graph и Sprite. Затем напишем метод загрузки всех спрайтов,
и выведем один из них на экран.

Задание
наладить работу программы с предыдущими классами
и уметь загружать подготовленные спрайты.
Отчёт отправил: 1803. Саша Выполнено за 1 час. 15 мин. [Показать отчёт]
Научился: Загружать ранее созданные xml-файлы, вызывать необходимые методы. 
Сложности: Полчаса потратил на отображение Луны. Как выяснилось, забыл в классе Graph поменять номер цвета с черного на желтый, поэтому на черном фоне Луну было не видно. Также были проблемы с позиционированием загружаемых объектов. но это на следующем уроке будет разбираться. 
Комментарии: Пока все понятно, но ошибки возникают на ровном месте. 
13 Аполлон. Финальное прилунение 00:29:58 44 чел. ★ 5 Done
  На этом уроке мы изменим метод Draw таким образом,
чтобы он принимал координаты размещения спрайта и его масштаб.
Далее, напишем методы для отображения всех спрайтов.
Подгоним значения, чтобы всё отображалось красиво.
И запустим наконец-таки нашу красочную игру
с посадкой корабля Аполлон на Луну. Ура!
Отчёт отправил: 1803. Саша Выполнено за 1 час. 10 мин. [Показать отчёт]
Научился: рассчитывать координаты объектов, редактировать созданные методы. 
Сложности: подогнать координаты. 
Комментарии: Создал новый метод Draw, принимающий параметр Color color, чтобы менять цвет объектов в программе.  
14 Полуфинальный урок 00:23:23 32 чел. ★ 4.8 $
  Задание:
Записать видео обзор игры Аполлон.
15 Домино. Правила игры 00:20:55 48 чел. ★ 4.9 Done
  Мы начинаем создание Домино-Пасьянса.
Костяшки домино перемешиваются и выстраиваются
на столе в пирамидку, вверху одна костяшка,
внизу семь штук. Вернхние и нижние открываются.

Отчёт отправил: 1803. Саша Выполнено за 30 мин. [Показать отчёт]
Научился: Повторил как работать со структурами и перечислениями, ознакомился с формализацией логики игры. 
Сложности: Найти домино и сфотографировать. 
Комментарии: Так и не понял, что не так в моем фото. Своего домино у меня нет, это бабушкино. Понятно что вид потертый, но тоже ж домино.  
16 Домино. Перемешиваем плашки 00:22:49 45 чел. ★ 4.9 Done
  На этом уроке мы напишем метод Start (),
который перемешает вся плашки домино.
Далее, продумаем список всех необходимых
методов для класса Domino и реализуем
самые тривиальные из них.
Отчёт отправил: 1803. Саша Выполнено за 35 мин. [Показать отчёт]
Научился: Учусь проектировать логику игры. Узнал про алгоритм игры домино. 
Сложности: Когда все разобрали, все кажется простым. Самому бы пришлось повозиться.  
Комментарии: Это наиболее сложный этап игры. Саму программу написал еще во время вебинара, но тогда мало что понял. Сейчас уже все понятно. 
17 Домино. Динамическая пирамида 00:21:39 45 чел. ★ 4.9 Done
  На этом уроке мы нарисуем пирамидку из доминошек.
Для отображения каждой плашки используется Label.
Label'ы мы будем создавать динамически, как в сказке.
Отчёт отправил: 1803. Саша Выполнено за 45 мин. [Показать отчёт]
Научился: Создавать контролы программно, с помощью координат и циклов.  
Сложности: Понять расположение label-ов.  
Комментарии: На данном этапе все понятно. 
18 Домино. Делегаты отображения 00:20:38 43 чел. ★ 5 Done
  На этому уроке мы свяжем два класса -
FormDomino и Domino через механизм делегатов.
Наш делегат будет отвечать за отображение плашки.
Отчёт отправил: 1803. Саша Выполнено за 35 мин. [Показать отчёт]
Научился: Повторил делегаты, узнал, что переменным типа "делегат" можно присваивать несколько функций с одинаковыми параметрами. 
Сложности: На вебинаре сразу не понял dp += ShowPlateConsole. Потом проанализировал и понял.  
Комментарии: Все супер. 
19 Домино. Выбираем и убираем 00:27:16 43 чел. ★ 5 Done
  На этом уроке мы допишем метод отображения плашки.
Затем напишем важный метод OpenFreePlates(),
чтобы после убирания старых плашек новые открывались.
Закончим урок обработкой клика по каждой плашке -
будем отмечать выделенные и убирать их, если сумма равна 12.
Отчёт отправил: 1803. Саша Выполнено за 45 мин. [Показать отчёт]
Научился: Создавать методы отображения, добавления/удаления отметки плашек домино, изучил подробнее логику игры. 
Сложности: Ничего 
Комментарии: добавил условие на удаление отметки: если сумма цифр не равна указанной сумме, то помечаем плашки как open. 
20 Домино. Ура! Победа! 00:19:12 43 чел. ★ 5 Done
  На этом уроке мы допишем пасьянс из Домино.
Напишем методы IsWinner() и IsLooser().
Добавим метки для оповещения о результате игры
и попытаемся наконец-таки разложить этот пасьянс.
Не забудьте добавить эту программу в своё портфолио!

Внимание! В конце видео можно посмотреть на весь код целиком.
Отчёт отправил: 1803. Саша Выполнено за 40 мин. [Показать отчёт]
Научился: Играть в домино))) на самом деле изучил на примере домино как создаются одни из самых важных функций в любой игре - Победа и Проигрыш.  
Сложности: Выиграть.  
Комментарии: Тестировал работу двух функций на совсем простом домино - с макс. числом 8, 6 и 3. Это чтоб побыстрее сдать отчет. А так еще хочу попробовать поиграть на больших массивах (вроде как присылал в первом отчете). 
21 Спрайт. Рисуем плашки 00:25:50 39 чел. ★ 4.9 Done
  На этом уроке мы будем рисовать плашки домино.
Каждая состоит из двух частей, отдельно
нарисуем восемь левых частей и столько же правых.
Почему восемь? От пустышки до шестёрки, и оборотная сторона.
Отчёт отправил: 1803. Саша Выполнено за 25 мин. [Показать отчёт]
Научился: Особенно ничему. Продолжаем рисовать в редакторе спрайтов. 
Сложности: Рисовать точки прямыми линиями. 
Комментарии: Интересная идея - рисовать по контуру изображения. В детстве я часто из книжек переводил иллюстрации на прозрачную бумагу, а потом через копировальную - на обычную бумагу. Получались забавные подделки иллюстраций.  
22 Домино. Отображение плашки 00:26:38 38 чел. ★ 5 Done
  На этом уроке мы откроем проект Домино,
добавим в него два класса - Graph и Sprite,
и создадим метод для рисования плашки домино.
Нам придётся, как и в Аполлоне, доработать методы Draw().
В конце урока мы загрузим файлы спрайтов в ресурсы
и научим статический метод Load() загружать их
их массива байт, из строки символов.
Это добавление делать по желанию.
Отчёт отправил: 1803. Саша Выполнено за 50 мин. [Показать отчёт]
Научился: Научился работать с массивами байтов, конвертировать string в byte[], применять десериализацию. 
Сложности: Сначала стал сам выполнять, создал перечисление картинок Picture, функцию PictureToString. Потом не понял, в каком формате должны быть картинки (выяснилось позже, что в byte[]) зашел в тупик и посмотрел видеоурок.  
Комментарии: Все супер! 
23 Домино. Двойной спрайт 00:29:27 37 чел. ★ 5 Done
  На этом уроке мы создадим класс SpriteDomino, в котором
будем хранить обе части плашки домино в виде спрайта.
В этом классе будет конструктор и методы Open() / Hide(),
которые будут пересоздавать спрайты по мере необходимости.
Дальше нужно будет в классе Graph написать метод Draw()
для рисования нашей доминошки и убедиться, что это всё работает.
Отчёт отправил: 1803. Саша Выполнено за 1 час. 25 мин. [Показать отчёт]
Научился: Работать со спрайтами (продолжаю учиться) 
Сложности: Изменить существующие методы с учетом использования спрайтов.  
Комментарии: Решил вывести спрайты вместо цифр на лэйблах. Создал методы ShowPicture (делегат), CreatePicture, InitPictures. Как видно на скриншоте, спрайты выводятся, но игра пока не работает. Буду переделывать метод ShowPlate. 
24 Домино. Анимация спрайта 00:17:36 37 чел. ★ 5 Done
  На этом уроке мы создадим анимацию спрайтов.
Для этого нам понадобится таймер,
несколько переменных, и возможность
стирания нарисованных спрайтов.
Отчёт отправил: 1803. Саша Выполнено за 10 мин. [Показать отчёт]
Научился: Основам анимации. 
Сложности: Рассчитать координаты, чтобы плашки не уехали. 
Комментарии: Все супер! 
25 Домино. Подъём переворотом 00:28:16 37 чел. ★ 5 Done
  На этом уроке мы реализуем ещё два вида анимации.
1. Выбор плашки, она будет "дрожать" на месте
2. Переворот плашки, она будет сжиматься и разжиматься.
Отчёт отправил: 1803. Саша Выполнено за 25 мин. [Показать отчёт]
Научился: Продолжаю изучать анимацию. 
Сложности: Не сложно, а долго - опять же подогнать координаты. Для этого надо правильно рассчитывать масштаб. 
Комментарии: Пока что плашка растягивается больше чем нужно, но я этот вопрос решу. 
26 Домино. Базовый класс Анимаций 00:21:37 37 чел. ★ 5 Done
  На этом уроке мы наведём порядок в нашем проекте.
Квинтессенцию анимации оформим отдельным классом - Animate.
Уберём всё лишнее из класса Graph и основного модуля.
И сделаем, чтобы всё заработало -
пока статичное отображение спрайта через экземпляр класса Animate.
Отчёт отправил: 1803. Саша Выполнено за 1 час. 10 мин. [Показать отчёт]
Научился: Продолжаю изучать оптимизацию кода.  
Сложности: Намучился с пропорциями плашек! Надо было спрайты создавать указанного размера. 
Комментарии: Если бы не размеры и пропорции плашек, то все ОК.  
27 Домино. Три наследника Аниматора 00:30:26 37 чел. ★ 5 Done
  На этом уроке мы реализуем все способы анимации
через созадние классов наследников от Animate.
У нас будет три класса: AnimateMove, AnimateMark и AnimateTurn.
Отчёт отправил: 1803. Саша Выполнено за 30 мин. [Показать отчёт]
Научился: Создавать классы-наследники с отличающимися друг от друга функциями.  
Сложности: Ничего, все сложное уже сделали. 
Комментарии: Все супер. 
28 Домино. Пирамида из анимашек 00:15:05 37 чел. ★ 5 Done
  На этом уроке мы добавим ещё парочку
виртуальных функций в базовый класс Animate,
чтобы их можно было вызывать без явного указания типа.

Но самое главное - мы создадим матрицу "анимашек",
инициализируем её экземплярами базового класса
и выведем это всё на экран в виде пирамиды.
Отчёт отправил: 1803. Саша Выполнено за 20 мин. [Показать отчёт]
Научился: Узнал, как создавать матрицу спрайтов. 
Сложности: Ничего 
Комментарии: На самом деле я уже предпринимал попытку отображать матрицу плашек, но вместо спрайтов я использовал картинки и запутался с позиционированием. 
29 Домино. Rolling Stones 00:19:29 36 чел. ★ 5 Done
  На этом уроке мы сделаем анимацию раскладывания всех плашек домино на столе.
Для этого напишем метод RollDomino(), а ещё нам потребуется отлавливать
момент, когда все доминошки уже выложены на стол. Для этого мы добавим
поле string mode, чтобы в таймере отловить этот момент.
Отчёт отправил: 1803. Саша Выполнено за 25 мин. [Показать отчёт]
Научился: Модифицировать метод RollDomino. 
Сложности: Ничего 
Комментарии: Сделал рандомное появление плашек домино - отдельно слева и справа. 
30 Домино. Наведение порядка 00:20:25 36 чел. ★ 5 Done
  На этом уроке мы наведём порядок на форме,
избавимся от наследия Label [,], уберём ненужные методы.
Потом, на 10-ой минуте мы приступим к открытию плашек
на первом и последнем ряду пирамиды.
Отчёт отправил: 1803. Саша Выполнено за 15 мин. [Показать отчёт]
Научился: Открывать плашки домино. 
Сложности: Ничего 
Комментарии: На данном этапе все понятно. 
31 Домино. Финальный аккорд 00:22:58 35 чел. ★ 5 Done
  На этом уроке мы научим программу выбирать
плашки по щелчку мышки, убирать с экрана верные пары,
и сыграем несколько раз до полного успеха :)
Отчёт отправил: 1803. Саша Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Отлаживать программу! На завершительном этапе нашел ошибку, из-за которой плашки при нажатии глючили.  
Сложности: Проверять заново программу. 
Комментарии: Ну что я могу сказать - Ура, победа! (правда для плашек с суммой 6, для ускорения сдачи задания). Запланировал: исследовать и улучшить анимацию появления, поворота и исчезновения плашек. 
32 ФИНАЛЬНЫЙ урок 00:23:23 28 чел. ★ 5 $
  Задание:
Записать видео обзор игры Пасьянс из домино.
33 VIP урок. Телефон по TCP/IP протоколу 00:47:44 23 чел. ★ 5 $
  На этом видеоуроке мы создадим три класса, которые удобно
использовать для передачи данных между двумя компьютерами.
  Итого:   33 видеоурока общей продолжительностью 12 час. 26 мин. 23 чел. ★ 4.95  
  Финалисты:   Олюшка,   Руслан,   Екатерина,   Иван,   Андрей Поляков,   Дмитрий,   Елена,   Ильшат,   Фомичева Наталья,   Илья,   Владимир,   Никита,   Сергей Сергеевич,   Артём,   Мариша ,   Михаил Ермишин,   Максим Лапшинов,   Максим,   Электрон,   Tekashnik,   Новопашин Владимир,   Dimon,   chokayes .

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




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

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

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

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


Научился: С первого раза раскладывать Пасьянс.
Трудности: Дождаться загрузки на YouTube.
Мои обзоры становятся короче.


Научился: Я всё ещё учусь записывать видео
Всё отлично! Я сделал это! :~) Всем спасибо за моральную поддержку.