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

Формула программиста
основатель — Волосатов Евгений Витольдович
Вступай в Телеграм чат проекта | Обход блокировки
Игровой комплекс Сокобан - Введи код скидки

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

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

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

Хочу купить!

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

Цена: 1600 p.


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

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

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

Отчёт отправил: 4342. Алекс Выполнено за 15 мин. [Показать отчёт]
Научился: ------ 
Сложности: ------ 
Комментарии: ------ 
2 Спрайт. Структура для линии 00:11:07 83 чел. ★ 4.9 Done
  На этом уроке мы создадим структуру для хранения линий,
массив палитры цветов и массив линий.
И перепишем программу, чтобы она это всё выводило на экран.
Отчёт отправил: 4342. Алекс Выполнено за 15 мин. [Показать отчёт]
Научился: ---- 
Сложности: ----- 
Комментарии: ----- 
3 Спрайт. Класс для графики 00:09:32 75 чел. ★ 4.9 Done
  На этом уроке мы создадим класс Graph,
куда перенесём всё хозяйство для рисования:
структуру, графику, картинку, массив палитры.
После этого создадим методы Draw() для рисования линий.
Отчёт отправил: 4342. Алекс Выполнено за 12 мин. [Показать отчёт]
Научился: ---- 
Сложности: ----- 
Комментарии: ------- 
4 Спрайт. Класс для Спрайта 00:14:10 56 чел. ★ 4.9 Done
  На этом уроке мы создадим класс Sprite,
в котором будут храниться все линии каждого спрайта.
В этом классе будут методы для добавления линий,
а также, самое главное, для сохранения
и загрузки Спрайта из XML файла.
Отчёт отправил: 4342. Алекс Выполнено за 24 мин. [Показать отчёт]
Научился: повторил 
Сложности: сложно не было 
Комментарии: Узнаю паттерн MVC. Становится всё интересней. 
5 Спрайт. Рисуем линии мышкой 00:22:31 55 чел. ★ 4.9 Done
  На этом уроке мы начнём создавать редактор, наконец-таки.
Использую мышку можно будет рисовать линии,
которые будут добавляться в наш спрайт.
Отчёт отправил: 4342. Алекс Выполнено за 40 мин. [Показать отчёт]
Научился: Недавно код писал, так в событии мыши не догадался получить координаты через аргумент. Вместо этого огород городил по позиции курсора (Cursor.Position.X).  
Сложности: сложно не было 
Комментарии: нет 
6 Спрайт. Панель инструментов 00:19:00 55 чел. ★ 5 Done
  На этом уроке мы создадим панель инструментов с кнопками
для переключения цвета, очистки экрана, отмены последнего действия.
Отчёт отправил: 4342. Алекс Выполнено за 30 мин. [Показать отчёт]
Научился: Повторил 
Сложности: сложно не было 
Комментарии: Все ок 
7 Спрайт. Сериализация объекта 00:18:23 53 чел. ★ 4.9 Done
  На этом уроке мы научимся сохранять и загружать объекты,
используя технологию сериализации и десериализации.
Отчёт отправил: 4342. Алекс Выполнено за 43 мин. [Показать отчёт]
Научился: Этот урок затронул очень большой и востребованный пласт знаний - сериализацию и XML. Немного погуглил, немного почитал. Сделал сериализацию используя другой источник в инете. Работало нестабильно, глючило через раз, в файл периодически что то неправильное писалось, пока не переключил FileMod для потока на запись из CreateOrOpen в Create. Из полезного еще продолжил изучать работу с классами, предназначенными для взаимодействия с файловой системой. 
Сложности: особенно сложного ничего. 
Комментарии: Еще нового! 
8 Аполлон. Главные герои 00:07:08 81 чел. ★ 4.7 Done
  На этом уроке мы озвучим правила игры Аполлон.
Выясним, какие у нас будут главные герои.
Твоё самостоятельное задание -
нарисовать на бумаге внешний вид игры
со всеми главными героями.
Как ты это себе представляешь.
Отчёт отправил: 4342. Алекс Выполнено за 50 мин. [Показать отчёт]
Научился: работе с посадочным модулем Аполлон  
Сложности: ... в один момент у нас лопнул балон с жидким кислородом. Нелегко в тесном модуле отстирывать штаны. 
Комментарии: нет 
9 Аполлон. Законы физики 00:26:47 78 чел. ★ 4.9 Done
  Корабль Аполлон прилуняется на Луну.
На этом уроке мы рассмотрим упрощённую
физическую модель этого процесса и
выпишем все параметры и все формулы,
которые будут управлять этим процессом.
Отчёт отправил: 4342. Алекс Выполнено за 45 мин. [Показать отчёт]
Научился: Повторил 
Сложности: Не было 
Комментарии: Замечаний нет 
10 Аполлон. Плавное прилунение 00:55:16 67 чел. ★ 5 Done
  На этом уроке мы допишем игру Аполлон.
Свяжем класс логики с интерфейсом.
Сделаем управление двигателем с помощью мышки.
Добавим таймер, функцию отображения корабля.
А также сообщение о конце игры и перезапуск игры.
Отчёт отправил: 4342. Алекс Выполнено за 1 час. 35 мин. [Показать отчёт]
Научился: прилуняться  
Сложности: прилуниться 
Комментарии: комментариев нет 
11 Спрайт. Рисуем Аполлона 00:14:10 48 чел. ★ 4.9 Done
  На этом уроке мы переделаем программу,
чтобы удобно было рисовать ломанные линии.
Добавим фоновый рисунок для его обведения.
И в конце концов нарисуем Землю, вид из Космоса.

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

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

Отчёт отправил: 4342. Алекс Выполнено за 22 мин. [Показать отчёт]
Научился: повторил enum, поработал с условно-неравномерным массивом. 
Сложности: Не было 
Комментарии: Извините, доминошек нет. Не могу позволить себе задержку в связи с этим несущественным обстоятельством. Поэтому только код.  
16 Домино. Перемешиваем плашки 00:22:49 45 чел. ★ 4.9 Done
  На этом уроке мы напишем метод Start (),
который перемешает вся плашки домино.
Далее, продумаем список всех необходимых
методов для класса Domino и реализуем
самые тривиальные из них.
Отчёт отправил: 4342. Алекс Выполнено за 35 мин. [Показать отчёт]
Научился: Выносить все константы в конфигурационный файл. Был интересный момент (скорее в качестве взгляда под другим углом на проблему, но тем не менее) какие методы делаем private, а какие protected. 
Сложности: не было 
Комментарии: в данном месте замечаний нет 
17 Домино. Динамическая пирамида 00:21:39 45 чел. ★ 4.9 Done
  На этом уроке мы нарисуем пирамидку из доминошек.
Для отображения каждой плашки используется Label.
Label'ы мы будем создавать динамически, как в сказке.
Отчёт отправил: 4342. Алекс Выполнено за 50 мин. [Показать отчёт]
Научился: Повторил порйденное 
Сложности: В какой то момент при выводе массива лейблов на панель случился затык в понимании, почему же i и j меняются местами при определении координат лейбла. Пока не нарисовал , не разобрался в чем там дело. А дело в том, как мы двойной цикл задаем. 
Комментарии: Строго говоря, для соответствия массива доминошек нормальной системе координат нам нужно писать не for (int x = 0; x <= maxPoints; x++) for (int y = 0; y <= x; y++) map[x, y] = new Plate(x, y); А наоборот: for (int y = 0; y <= maxPoints; y++) for (int x = 0; x <= y; x++) map[x, y] = new Plate(x, y); Применять это как к логике , так и к графике. 
18 Домино. Делегаты отображения 00:20:38 43 чел. ★ 5 Done
  На этому уроке мы свяжем два класса -
FormDomino и Domino через механизм делегатов.
Наш делегат будет отвечать за отображение плашки.
Отчёт отправил: 4342. Алекс Выполнено за 1 час. 05 мин. [Показать отчёт]
Научился: Продолжил осваивать практическое применение События (event) 
Сложности: Собственно, применить событие 
Комментарии: Решил реализовывать все не через делегат, а через событие. Не то что бы это было принципиально разные вещи, но реализуются все равно немного иначе. Ну мне так захотелось. 
19 Домино. Выбираем и убираем 00:27:16 43 чел. ★ 5 Done
  На этом уроке мы допишем метод отображения плашки.
Затем напишем важный метод OpenFreePlates(),
чтобы после убирания старых плашек новые открывались.
Закончим урок обработкой клика по каждой плашке -
будем отмечать выделенные и убирать их, если сумма равна 12.
Отчёт отправил: 4342. Алекс Выполнено за 1 час. 05 мин. [Показать отчёт]
Научился: Продолжил учиться создавать единый алгоритм. 
Сложности: Узреть всю логику алгоритма целиком.  
Комментарии: Я восхищен. Нет, серьезно. Аккуратные, точные и коротенькие функции. Очень красивый алгоритм открытия hide-костяшек. Я бы там раза в три минимум больше говнокода навертел, если бы сам делал. Может тороплюсь, но не реализовали функцию сброса помеченных (mark) плашек (если сумма на них не удовлетворяет условию). Сейчас посмотрим, реализовано ли это в следующем уроке. 
20 Домино. Ура! Победа! 00:19:12 43 чел. ★ 5 Done
  На этом уроке мы допишем пасьянс из Домино.
Напишем методы IsWinner() и IsLooser().
Добавим метки для оповещения о результате игры
и попытаемся наконец-таки разложить этот пасьянс.
Не забудьте добавить эту программу в своё портфолио!

Внимание! В конце видео можно посмотреть на весь код целиком.
Отчёт отправил: 4342. Алекс Выполнено за 2 час. 10 мин. [Показать отчёт]
Научился: уффф... терпению 
Сложности: 1. Функции IsWinner, IsLooser Чувствуется, был уже поздний вечер. Функция получилась не такая изящная и несколько непонятная вначале. 2. Я снова для проверки победа/неудача реализовал событие. На победу срабатывало нормально, на поражение перманентный глюк. В конце концов победил. Работает. 
Комментарии: Откровенно говоря, увидев в начале какую задачу и какую игру мы будем решать был разорован. Домино? Скукотище! Ну ладн, решать то все равно надо. И надо сказать, мои ожидания полностью.... не оправдались. Урок получился удивительно интересный. Сам не знаю почему (тему то по прежнему скучно считаю :-)). Возможно, нестандартная математическая задача (по крайней мере, отличающаяся от ранее решаемых здесь), "скособоченный" массив, красивый и местами лаконичный алогоритм решения - вот в чем секрет. Получил реальное удовольствие от решения. 
21 Спрайт. Рисуем плашки 00:25:50 39 чел. ★ 4.9 Done
  На этом уроке мы будем рисовать плашки домино.
Каждая состоит из двух частей, отдельно
нарисуем восемь левых частей и столько же правых.
Почему восемь? От пустышки до шестёрки, и оборотная сторона.
Отчёт отправил: 4342. Алекс Выполнено за 30 мин. [Показать отчёт]
Научился: рисовать я умел 
Сложности: )))) 
Комментарии: А не проще ли было боковые нарисовать сначала "кружочки", и для одних и тех же кружочков просто рисовать контурные линии плашки (то слева, то справа)? Рисовать в разы меньше.  
22 Домино. Отображение плашки 00:26:38 38 чел. ★ 5 Done
  На этом уроке мы откроем проект Домино,
добавим в него два класса - Graph и Sprite,
и создадим метод для рисования плашки домино.
Нам придётся, как и в Аполлоне, доработать методы Draw().
В конце урока мы загрузим файлы спрайтов в ресурсы
и научим статический метод Load() загружать их
их массива байт, из строки символов.
Это добавление делать по желанию.
Отчёт отправил: 4342. Алекс Выполнено за 40 мин. [Показать отчёт]
Научился: повторил 
Сложности: не сложное, но требующее внимания - десериализация из бинарного файла 
Комментарии: нет 
23 Домино. Двойной спрайт 00:29:27 37 чел. ★ 5 Done
  На этом уроке мы создадим класс SpriteDomino, в котором
будем хранить обе части плашки домино в виде спрайта.
В этом классе будет конструктор и методы Open() / Hide(),
которые будут пересоздавать спрайты по мере необходимости.
Дальше нужно будет в классе Graph написать метод Draw()
для рисования нашей доминошки и убедиться, что это всё работает.
Отчёт отправил: 4342. Алекс Выполнено за 1 час. 20 мин. [Показать отчёт]
Научился: Выявлять ошибки 
Сложности: Поймал ошибку нулл референз иксепшн, час искал в чем дело. 
Комментарии: Нет 
24 Домино. Анимация спрайта 00:17:36 37 чел. ★ 5 Done
  На этом уроке мы создадим анимацию спрайтов.
Для этого нам понадобится таймер,
несколько переменных, и возможность
стирания нарисованных спрайтов.
Отчёт отправил: 4342. Алекс Выполнено за 20 мин. [Показать отчёт]
Научился: повторил пройденное 
Сложности: сложно не было 
Комментарии: замечаний нет 
25 Домино. Подъём переворотом 00:28:16 37 чел. ★ 5 Done
  На этом уроке мы реализуем ещё два вида анимации.
1. Выбор плашки, она будет "дрожать" на месте
2. Переворот плашки, она будет сжиматься и разжиматься.
Отчёт отправил: 4342. Алекс Выполнено за 50 мин. [Показать отчёт]
Научился: Масштабировать спрайт 
Сложности: Сложно не было 
Комментарии: Прикольно получилось 
26 Домино. Базовый класс Анимаций 00:21:37 37 чел. ★ 5 Done
  На этом уроке мы наведём порядок в нашем проекте.
Квинтессенцию анимации оформим отдельным классом - Animate.
Уберём всё лишнее из класса Graph и основного модуля.
И сделаем, чтобы всё заработало -
пока статичное отображение спрайта через экземпляр класса Animate.
Отчёт отправил: 4342. Алекс Выполнено за 35 мин. [Показать отчёт]
Научился: Узнал, что константы оказывается сродни static членам - обращаться к ним нужно не через имя экземпляра, а по имени класса.  
Сложности: сложно не было 
Комментарии: Интересный замут получается с классом Animate. Сейчас посмотрим в следующем уроке, как реализуется в стиле чистого ООП наследование от этого класса, а так же переопределение виртуального метода. 
27 Домино. Три наследника Аниматора 00:30:26 37 чел. ★ 5 Done
  На этом уроке мы реализуем все способы анимации
через созадние классов наследников от Animate.
У нас будет три класса: AnimateMove, AnimateMark и AnimateTurn.
Отчёт отправил: 4342. Алекс Выполнено за 45 мин. [Показать отчёт]
Научился: На практике пощупал virtual - override. Продолжил щупать наследование и полиморфизм. 
Сложности: Сложно не было 
Комментарии: Все ок. 
28 Домино. Пирамида из анимашек 00:15:05 37 чел. ★ 5 Done
  На этом уроке мы добавим ещё парочку
виртуальных функций в базовый класс Animate,
чтобы их можно было вызывать без явного указания типа.

Но самое главное - мы создадим матрицу "анимашек",
инициализируем её экземплярами базового класса
и выведем это всё на экран в виде пирамиды.
Отчёт отправил: 4342. Алекс Выполнено за 18 мин. [Показать отчёт]
Научился: повторил 
Сложности: не было 
Комментарии: нет 
29 Домино. Rolling Stones 00:19:29 36 чел. ★ 5 Done
  На этом уроке мы сделаем анимацию раскладывания всех плашек домино на столе.
Для этого напишем метод RollDomino(), а ещё нам потребуется отлавливать
момент, когда все доминошки уже выложены на стол. Для этого мы добавим
поле string mode, чтобы в таймере отловить этот момент.
Отчёт отправил: 4342. Алекс Выполнено за 25 мин. [Показать отчёт]
Научился: Повторил 
Сложности: Сложно не было 
Комментарии: комментариев, отзывов, вопросов, замечаний и лишних денег нет. 
30 Домино. Наведение порядка 00:20:25 36 чел. ★ 5 Done
  На этом уроке мы наведём порядок на форме,
избавимся от наследия Label [,], уберём ненужные методы.
Потом, на 10-ой минуте мы приступим к открытию плашек
на первом и последнем ряду пирамиды.
Отчёт отправил: 4342. Алекс Выполнено за 35 мин. [Показать отчёт]
Научился: Продолжил учиться анализу готовой программы. 
Сложности: Сложно не было. 
Комментарии: Замечаний нет. 
31 Домино. Финальный аккорд 00:22:58 35 чел. ★ 5 Done
  На этом уроке мы научим программу выбирать
плашки по щелчку мышки, убирать с экрана верные пары,
и сыграем несколько раз до полного успеха :)
Отчёт отправил: 4342. Алекс Выполнено за 35 мин. [Показать отчёт]
Научился: продолжил учиться.  
Сложности: Сложно не было. 
Комментарии: Уфффф...... Осилил. ))))) Архив созданных по курсу "Игры со спрайтами" вышлю на имейл. 
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#.

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


Научился: При создании домино еще больше проникся мощью ООП и полиморфизма. Получилась отличная площадка для оттачивания навыков рефакторинга. Курс в целом отличный! Все понравилось.



Научился: Закрепил навыки по защите своих программ.
Курс просто замечательный! В первой части я подумал, что это скукота, поскольку всё казалось неинтересным, однако потом, изучив анимации с домино и разные перемещения, я понял, до чего это прекрасно! Я считаю этот курс логическим продолжением уроков "Теория ООП", которые я не без удовольствия выполнил, поскольку тут прекрасно продемонстрированы как инкапсуляция, так и наследование с полиморфизмом (последнее особенно чётко и понятно). Кроме того, стал лучше понимать делегаты и координаты. Ну и, само собой, тут можно простыми шагами научиться делать красивые и полезные анимации, которые пригодятся в дальнейшем. Так что рекомендую "Игры со спрайтами" всем, у кого проблемы с ООП и кто любит эстетику :) Спасибо огромное!!! P.S. есть и обратная сторона, но это, скорее, у меня только такое: с каждым новым курсом я чувствую себя, как Денис Ритчи в первый день работы, цитирую: «Когда я был студентом Гарварда, я написал на фортране игру в “крестики-нолики” и считал себя лучшим программистом. Когда молодым специалистом я устроился на работу в Bell Labs, моим первым заданием было переписать программу управления автоматикой так, чтобы эта программа занимала в два раза меньше памяти и работала в четыре раза быстрей. И вот тогда я осознал, что я не программист, а полное дерьмо».