C# обучение для чайников

Формула программиста

основатель — Волосатов Евгений Витольдович

Клуб формулистов - Ежемесячная подписка

Вступление в Клуб Формулистов на выгодных условиях для НОВЫХ участников.

После взноса  999  499 руб. вы получите подписку
в Клуб Формулистов на 30 дней и 256 байт для быстрого старта.
Байты используются для открытия более одного урока в день, по 50 байт за урок.

Стоимость 1 дня за первый месяц: всего 16 рублей.

Первый взнос - 499 руб./30 дней.

Через 30 дней будет списано 3,000 2,400 руб.
за продление подписки в Клуб на 30 дней + подарок 512 байт.

Так будет продолжаться каждые 30 дней, пока вы не отмените подписку.
Средства будет автоматически считываться с вашей карты.
Вы в любой момент сможете отказаться от продления Клуба.

Только ДО КОНЦА НЕДЕЛИ -
-50% скидка на первый взнос, всего 499 (вместо 999) рублей!
-20% скидка на ЕЖЕМЕСЯЧНЫЙ платёж!
Всего 2400 руб/месяц (вместо 3000 руб/месяц), или 80 руб./день - цена чашки кофе.


Стоимость 1 дня: 80 руб.

Хочу вступить!

Также есть другие варианты оплаты участия в КФ:

Билет в клуб формулистов на ...
30+ дней | 60 дней | 150 дней | 380 дней | 1000 дней

Внимание!
Стоимость участия в Клубе формулистов увеличивается 1 числа каждого месяца на 100 рублей.
При оформления подписки стоимость остаётся постоянной, пока подписка не будет отменена.







Первый взнос - 499 руб./30 дней + 500 байт.
Последующие взносы - 3,000 2400 руб./месяц + 512 байт.



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

# Название видеоурока Видео / Тесты Решило Рейтинг Доступ
1 FREE Легендарная игра 00:02:13
1 тест
109 чел. ★ 4.8 Done
  Мы начинаем создание легендарной игровой программы
"Сапёр" на языке программирования Java.

Отчёт отправил: 8380. zhikharevav Выполнено за 85 дней 7 час. 40 мин. [Показать отчёт]
Научился: Скачал картинки для игры 
Сложности: Скачать картинки для игры 
2 FREE Простое окно 00:03:02
96 чел. ★ 4.9 Done
  На этом уроке мы начинаем новый проект
и создадим JFrame приложение.
Отчёт отправил: 8380. zhikharevav Выполнено за 5 мин. [Показать отчёт]
Научился: Выводить окно 
Сложности: Найти окно на экране, когда оно вывелось 
3 Закрытие на выходе 00:03:00
91 чел. ★ 4.9 Done
  На этом уроке мы настроим JFrame приложения.
Для этого пропишем необходимые параметры.

Отчёт отправил: 8380. zhikharevav Выполнено за 4 мин. [Показать отчёт]
Научился: Узнал как установить некоторые свойства окна 
Сложности: Найти и остановить предыдущие запуски программы 
4 Полёт над классом 00:03:53
89 чел. ★ 4.8 Done
  На этом слайде мы обсудим все поля и методы основного класса нашей запускаемой игры JavaSweeper, который наследуется от JFrame
Отчёт отправил: 8380. zhikharevav Выполнено за 1 час. 42 мин. [Показать отчёт]
Научился: Посмотрел и поучился, как составлять план написания программы. Самая интересная функция для меня это Image GetImage(String name), которая по имени картинки, наверное, должна подтянуть необходимую картинку и установить её на указанное программой место. 
Сложности: Выбрать скриншот! 
5 Пустая панель 00:02:33
88 чел. ★ 4.9 Done
  На этом слайде мы добавим на нашу форму панель, установим ее размер и разместим ее по центру экрана
Отчёт отправил: 8380. zhikharevav Выполнено за 3 мин. [Показать отчёт]
Научился: Добавлять на форму панель и выводить окно в центре экрана 
Сложности: Понять влияние последовательного выполнения комманд 
6 Раздельная инициализация 00:02:23
88 чел. ★ 4.9 Done
  На этом слайде мы займемся рефакторингом. Мы не будем добавлять новой функциональности, а просто красиво оформим то, что уже есть.
Отчёт отправил: 8380. zhikharevav Выполнено за 4 мин. [Показать отчёт]
Научился: Узнал, что не надо нагружать конструктор. 
Сложности: Найти кнопочку extract  
7 Метод рисования 00:01:59
88 чел. ★ 4.9 Done
  На этом слайде мы наконец-то начнем рисовать. Создадим Paint-компонент для отображения рисунков на нашей панели и на форме.
Отчёт отправил: 8380. zhikharevav Выполнено за 5 мин. [Показать отчёт]
Научился: Создавать анонимный класс 
Сложности: Понять как это работает 
8 Импорт картинок 00:01:22
86 чел. ★ 4.9 Done
  На этом слайде мы добавим в наш проект картинки, которые потом будем показывать на панели во время игры.
Отчёт отправил: 8380. zhikharevav Выполнено за 2 мин. [Показать отчёт]
Научился: Добавлять в проект картинки 
Сложности: Ничего 
9 Загрузка и отображение 00:02:13
86 чел. ★ 4.9 Done
  На этом слайде мы выведем картинку на панель
Отчёт отправил: 8380. zhikharevav Выполнено за 3 мин. [Показать отчёт]
Научился: Выводить картинку на панель 
Сложности: Найти ошибку в имени картинки, так как из-за этого картинка не выводилась 
10 Угловая бомба 00:01:31
85 чел. ★ 4.9 Done
  На этом слайде мы добавим еще пару картинок на нашу форму.
Отчёт отправил: 8380. zhikharevav Выполнено за 2 мин. [Показать отчёт]
Научился: Выводить много картинок 
Сложности: Ничего 
11 Константные размеры 00:02:42
85 чел. ★ 4.9 Done
  На этом слайде мы добавим константы и немножко порефакторим.
Отчёт отправил: 8380. zhikharevav Выполнено за 4 мин. [Показать отчёт]
Научился: Выносить одинаковые числа в переменные 
Сложности: Найти и поменять все числа на переменные 
12 Перечисление кубиков 00:03:42
85 чел. ★ 4.9 Done
  На этом слайде мы создадим перечисление Box
Отчёт отправил: 8380. zhikharevav Выполнено за 5 мин. [Показать отчёт]
Научился: Создавать перечисление enum 
Сложности: Правильно прописать все элементы перечисления 
13 Первый цикл 00:01:59
85 чел. ★ 4.9 Done
  На этом слайде мы выведем все картинки на форме
Отчёт отправил: 8380. zhikharevav Выполнено за 6 мин. [Показать отчёт]
Научился: Выводить картинки в цикле 
Сложности: Сообразить как тут всё устроено 
14 Картинка в кубике 00:03:45
84 чел. ★ 4.9 Done
  На этом слайде мы поместим картинку в каждый экземпляр перечисления Box.

Отчёт отправил: 8380. zhikharevav Выполнено за 5 мин. [Показать отчёт]
Научился: Как отказываться от использования конкретных классов 
Сложности: Понять смысл происходящего 
15 Источник ресурсов 00:01:53
79 чел. ★ 4.9 Done
  На этом слайде мы сделаем загрузку картинок через систему ресурсов в языке Java
Отчёт отправил: 8380. zhikharevav Выполнено за 3 мин. [Показать отчёт]
Научился: Подключать папку с ресурсами и использовать её 
Сложности: Правильно записать getClass... 
16 Запускаемый jархив 00:02:55
73 чел. ★ 5 Done
  На этом слайде мы создадим запускаемый JAR-архив для нашей программы

Примечание.
При попытке запуска jar на линуксе появляется сообщение "is not marked as executable".
Необходимо запускать архив из командной строки:
  java -jar JavaSweeper.jar
Либо разрешить исполнение этого файла, чтобы запускать по клику мышкой:
 chmod +x JavaSweeper.jar

Отчёт отправил: 8380. zhikharevav Выполнено за 4 мин. [Показать отчёт]
Научился: Создавать jar архив своей программы 
Сложности: Не знал до этого как это делать, так что всё казалось сложным и интересным 
17 Карта классных сокровищ 00:04:48
70 чел. ★ 4.9 Done
  На этом слайде мы разберем UML-схему нашего проекта
Отчёт отправил: 8380. zhikharevav Выполнено за 6 мин. [Показать отчёт]
Научился: Пришлось видео посмотреть два раза. Второй раз останавливался после добавления нового класса, чтобы самому объяснить его назначение, потом слушал объяснение от Магистра! ))) 
Сложности: Понять назначение каждого класса 
18 Наши координаты 00:03:24
65 чел. ★ 5 Done
  На этом слайде мы создадим класс Coord и задействуем его в нашей программе
Отчёт отправил: 8380. zhikharevav Выполнено за 6 мин. [Показать отчёт]
Научился: Создавать публичный класс 
Сложности: Правильно переписать основную программу с использованием нового класса 
19 Статичная граница 00:03:12
65 чел. ★ 4.9 Done
  На этом слайде мы создадим класс Ranges, который будет использоваться во многих классах нашего проекта и позволит задавать глобальные параметры и перебор всех координат.
Отчёт отправил: 8380. zhikharevav Выполнено за 8 мин. [Показать отчёт]
Научился: Ознакомился с классом Ranges 
Сложности: Понять необходимость всех методов в классе 
20 Установка размеров 00:04:22
64 чел. ★ 4.9 Done
  На этом слайде мы создадим класс Range с двумя статичными методами для установки и получения размеров нашего поля.
Отчёт отправил: 8380. zhikharevav Выполнено за 6 мин. [Показать отчёт]
Научился: Передавать размеры из одного класса в другой 
Сложности: Уловить мысль ))) 
21 Полный список 00:04:28
60 чел. ★ 5 Done
  На этом слайде мы добавим в класс Range список всех координат нашего поля и будем его использовать для перебора всех клеток
Отчёт отправил: 8380. zhikharevav Выполнено за 7 мин. [Показать отчёт]
Научился: Убирать лишние линии у края окна 
Сложности: Выбрать какую картинку вывести на экран )) 
22 Радуга картинок 00:03:18
57 чел. ★ 4.9 Done
  На этом слайде мы добавим иконку нашей программе и немножко пошалим с отображением картинок на экране
Отчёт отправил: 8380. zhikharevav Выполнено за 6 мин. [Показать отчёт]
Научился: Шалить с выводом картинок. Как раз прохожу курс графоциклы, дак там как раз шалим по полной, уже пошли на четвертый уровень вложенности циклов. 
Сложности: Всё правильно записать 
23 Фасадный класс 00:02:05
57 чел. ★ 4.9 Done
  На этом слайде мы начнем создавать фасадный класс Game и напишем первые два метода этого класса

Отчёт отправил: 8380. zhikharevav Выполнено за 4 мин. [Показать отчёт]
Научился: шаблон фасад, наверное, как раз отвечает за ту часть, которую видит пользователь. А класс game - это класс отвечающий за логику игры, т.е. связь всех компонентов и классов игры. 
Сложности: Описать назначение класса и шаблона 
24 Игровая координата 00:04:07
57 чел. ★ 4.9 Done
  На этом слайде мы создадим класс Game и реализуем в нем конструктор, а также метод getBox(), который по заданным координатам возвращает, что должно быть в указанной клетке нашего поля.
Отчёт отправил: 8380. zhikharevav Выполнено за 9 мин. [Показать отчёт]
Научился: Для каждого вида действия нужен свой класс 
Сложности: Понять, что и куда нужно переносить 
25 Матрица мира 00:04:32
56 чел. ★ 4.9 Done
  На этом слайде мы создадим класс Matrix для хранения всех элементов нашего игрового поля
Отчёт отправил: 8380. zhikharevav Выполнено за 6 мин. [Показать отчёт]
Научился: Ещё один класс для ещё одного типа действий 
Сложности: Надо всё ещё раз посмотреть, что...откуда....и куда идет и как друг с другом связано  
26 За гранью видимого 00:04:49
55 чел. ★ 4.9 Done
  На этом слайде мы добавим в класс Matrix два метода - геттер и сеттер для получения и установки полей нашей игры
Отчёт отправил: 8380. zhikharevav Выполнено за 6 мин. [Показать отчёт]
Научился: Записывать геттер и сеттер 
Сложности: Успеть всё понять 
27 Бомбанутый класс 00:02:55
53 чел. ★ 5 Done
  На этом слайде мы поговорим о классе Bomb, который будет использоваться для хранения нижнего слоя нашего поля, где находятся бомбы и числа вокруг них
Отчёт отправил: 8380. zhikharevav Выполнено за 3 мин. [Показать отчёт]
Научился: Класс bomb это самый нижний слой нашего слоёного пирога 
Сложности: Понять для чего всё это нужно 
28 Тестовая бомба 00:05:11
54 чел. ★ 5 Done
  На этом слайде мы начнем создавать класс Bomb
Отчёт отправил: 8380. zhikharevav Выполнено за 8 мин. [Показать отчёт]
Научился: Вновь создавали геттер и сеттер 
Сложности: Успеть всё правильно сделать 
29 Случайные бомборазмещения 00:04:35
54 чел. ★ 5 Done
  На этом слайде мы разместим бомбы в случайных местах на нашей карте
Отчёт отправил: 8380. zhikharevav Выполнено за 8 мин. [Показать отчёт]
Научился: Урааа, мы начали размещать бомбочки на поле 
Сложности: Забыл почему именно 10 бомб ?!?! Искал по классам где мы передаем количество бомб и нашёл ))))) 
30 Сравнение координат 00:03:09
53 чел. ★ 5 Done
  На этом слайде мы исправим несколько ошибок и добавим в класс Coord метод для сравнения двух координат
Отчёт отправил: 8380. zhikharevav Выполнено за 5 мин. [Показать отчёт]
Научился: Никогда не прислушивался к советам среды разработки, а тут на тебе, оказывается она дело говорит )))) 
Сложности: Успеть за всеми исправлениями 
31 Ограда из единиц 00:06:29
53 чел. ★ 4.9 Done
  На этом слайде мы научимся проставлять единицы вокруг каждой бомбы
Отчёт отправил: 8380. zhikharevav Выполнено за 14 мин. [Показать отчёт]
Научился: Теперь единицами перерисовывается всё подряд, надо навести порядок в выставлении единиц и бомб )))) Наверное, в следующих слайдах сделаем 
Сложности: Переписать все новшества правильно 
32 Следующая цифра 00:04:16
51 чел. ★ 5 Done
  На этом слайде мы будем увеличивать цифры вокруг каждой новой размещенной бомбы
Отчёт отправил: 8380. zhikharevav Выполнено за 29 мин. [Показать отчёт]
Научился: Увеличивать цифры у бомб 
Сложности: Всё сделать правильно 
33 Дважды в одну воронку 00:05:52
49 чел. ★ 5 Done
  На этом слайде мы исключим попадание двух бомб в одну воронку
Отчёт отправил: 8380. zhikharevav Выполнено за 8 мин. [Показать отчёт]
Научился: Видеокурс очень нравится, наконец-то доберемся до правил открытия клеток...))) 
Сложности: Понять как всё должно работать 
34 Флаг над классом 00:09:18
48 чел. ★ 5 Done
  На этом слайде мы перейдем к верхнему уровню нашей абстракции - классу Flag.
Отчёт отправил: 8380. zhikharevav Выполнено за 19 мин. [Показать отчёт]
Научился: Понравился метод setOpenedToClosedBombBox, который открывает клетки с бомбами, которые не были открыты или помечены во время игры, после проигрыша!! Грустный такой метод!! ))) 
Сложности: Уложить в голове структуру класса Flag 
35 Королевская траншея 00:05:02
48 чел. ★ 5 Done
  На этом слайде мы создадим методы start() и get() в класс Flag.
Отчёт отправил: 8380. zhikharevav Выполнено за 10 мин. [Показать отчёт]
Научился: Прятать нижний уровень 
Сложности: Всё правильно понять 
36 Клавишные инструменты 00:04:16
48 чел. ★ 5 Done
  На этом слайде мы создадим два метода в классе Game - pressLeftButton() и pressRightButton()
Отчёт отправил: 8380. zhikharevav Выполнено за 27 мин. [Показать отчёт]
Научился: Описывать обработчик нажатия левой и правой кнопки мыши 
Сложности: Придумать проверку этих функций, но всё было рассказано в уроке 
37 Мышечный адаптер 00:06:27
47 чел. ★ 5 Done
  На этом слайде мы, наконец, добавим интерактив в нашу программу и зарегистрируем адаптер мыши для опроса левой и правой кнопки.
Отчёт отправил: 8380. zhikharevav Выполнено за 12 мин. [Показать отчёт]
Научился: Научился управлять мышкой в java 
Сложности: Запомнить, как написать реагирование на нажатие мышки 
38 Схема правой педали 00:02:24
47 чел. ★ 5 Done
  На этом слайде мы разберем алгоритм нажатия правой кнопки мышки в игре JavaSweeper
Отчёт отправил: 8380. zhikharevav Выполнено за 17 мин. [Показать отчёт]
Научился: Всё так, как и должно быть, если открыта, то ничего не делаем, если закрыта, то ставим флаг, если флаг стоит, то убираем флаг. 
Сложности: Ничего 
39 Смена флагов 00:03:36
47 чел. ★ 5 Done
  На этом слайде мы реализуем установку и удаление флажков и напишем реализацию функции pressRightButton()
Отчёт отправил: 8380. zhikharevav Выполнено за 20 мин. [Показать отчёт]
Научился: Обрабатывать нажатие правой кнопки мыши 
Сложности: Понять как всё устроено 
40 Добро пожаловать! 00:04:24
47 чел. ★ 5 Done
  На этом слайде мы добавим строчку состояния в нашу программу
Отчёт отправил: 8380. zhikharevav Выполнено за 15 мин. [Показать отчёт]
Научился: Не совсем понял откуда появились отличия в коде  у меня и у вас?!?! Отличия выделил на скриншоте 
Сложности: Так и не понял от куда появились отличия в коде 
41 Недетские состояния 00:02:52
47 чел. ★ 5 Done
  На этом слайде мы создадим перечисление GameState, в котором будет храниться состояние игры

Отчёт отправил: 8380. zhikharevav Выполнено за 5 мин. [Показать отчёт]
Научился: Создавать перечисления 
Сложности: Объявлять перечисления в программе 
42 Актуальное информирование 00:06:07
47 чел. ★ 5 Done
  На этом слайде мы сформируем сообщение о текущем статусе игры в зависимости от текущего состояния и выведем его на экран
Отчёт отправил: 8380. zhikharevav Выполнено за 30 мин. [Показать отчёт]
Научился: Обрабатывать состояния игры 
Сложности: Шалить! )) 
43 Алгоритм открывашки 00:07:43
47 чел. ★ 5 Done
  На этом слайде мы займемся обработкой нажатия левой кнопки мышки
Отчёт отправил: 8380. zhikharevav Выполнено за 10 мин. [Показать отчёт]
Научился: Понял какие состояния системы надо использовать для организации логики игры 
Сложности: Разобраться 
44 Выбор из выбора 00:05:05
47 чел. ★ 5 Done
  На этом слайде мы напишем метод openBox(), который перебирает все возможные состояния клеток и в зависимости от этого выполняет ту или иную операцию.

Отчёт отправил: 8380. zhikharevav Выполнено за 11 мин. [Показать отчёт]
Научился: Очень безопасная игра получается ))) 
Сложности: Сделать всё правильно 
45 Нулевая рекурсия 00:04:01
47 чел. ★ 5 Done
  На этом слайде мы рекурсивно откроем все клетки вокруг нулей.
Отчёт отправил: 8380. zhikharevav Выполнено за 10 мин. [Показать отчёт]
Научился: Всё ближе и ближе мы подбираемся к окончанию игры 
Сложности: Ничего 
46 Учёт зарытых флагов 00:04:19
47 чел. ★ 5 Done
  На этом слайде мы будем считать количество флажков и закрытых клеток на нашем поле
Отчёт отправил: 8380. zhikharevav Выполнено за 14 мин. [Показать отчёт]
Научился: Как то у меня отрисовка проходит в несколько этапов, рамки становятся ярче через 3 нажатия на клетки и т.д. буду разбираться 
Сложности: Всё отлично 
47 Телеграмма о флажках 00:03:28
47 чел. ★ 5 Done
  На этом слайде мы выведем сообщение пользователю, сколько флажков и сколько бомб есть на экране
Отчёт отправил: 8380. zhikharevav Выполнено за 17 мин. [Показать отчёт]
Научился: Считать количество установленных флагов 
Сложности: Ничего 
48 День Победы! 00:05:25
47 чел. ★ 5 Done
  На этом слайде мы проверим, а не победили ли мы!
Отчёт отправил: 8380. zhikharevav Выполнено за 4 дня 17 час. 17 мин. [Показать отчёт]
Научился: Ура, ура, ура...победа :-)))) 
Сложности: Ничего 
49 Первая ошибка сапёра 00:06:13
47 чел. ★ 5 Done
  На этом слайде мы зафиксируем поражение, когда игрок подорвался на бомбе.
Отчёт отправил: 8380. zhikharevav Выполнено за 55 мин. [Показать отчёт]
Научился: Здорово всё получилось, но у меня надписи, которые внизу, дублируются на игровое поле и после двух-трёх нажатий мышки по игровому полю исчезают. 
Сложности: Выиграть )))  
50 Открываем карты 00:07:26
45 чел. ★ 5 Done
  На этом слайде мы покажем расположение бомб после проигрыша.
Отчёт отправил: 8380. zhikharevav Выполнено за 13 мин. [Показать отчёт]
Научился: Автоматически открывать все клетки с бомбами 
Сложности: Ничего 
51 Цифровой помощник сапёра 00:11:31
46 чел. ★ 5 Done
  На этом слайде мы напишем помощник, который помогает открывать заведомо безопасные клетки.
Отчёт отправил: 8380. zhikharevav Выполнено за 20 мин. [Показать отчёт]
Научился: Открывать безопасные клетки автоматически 
Сложности: Ничего 
52 Финальный аккорд 00:17:49
35 чел. ★ 5 Done
  На этом видео мы проанализируем всё, что было сделано - пройдёмся по всему коду программы.
Также поговорим о создании Бота для игры Сапёр - как это можно сделать.
Ваше задание - записать видеообзор созданной игры, выложить
на youtube и разместить ссылку на видео в описании.
Отчёт отправил: 8380. zhikharevav Выполнено за 54 мин. [Показать отчёт]
Научился: Создавать с нуля игру сапёр 
Сложности: Быть внимательным 
Видеообзор: Tm6sZB8cDoM
  Итого:   52 видеоурока 3 час. 50 мин.
1 тест
35 чел. ★ 4.96  
  Финалисты:   Никита,   Владислав,   Иван Воронин,   1  ,   Александр Р.,   Danil42Russia,   Pavlin,   Андрей Шевченко,   Neverwinter 2,   Сергей Стефаненко,   Александр,   Михаил,   Hofflin,   Сергей,   VladYorkyee,   chokayes,   Александр,   Tekashnik,   Денис,   Vladimir Falejev,   Yefim,   Иван,   Новопашин Владимир,   sergeykin,   FireWolf,   Кирилл Шмойлов,   yerv,   Нюта,   Anna,   Алексей В.,   AZANIR,   Дмитрий,   zhikharevav,   Dmitry Sinitsin,   Андрей Гладков .

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





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

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

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

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


Научился: Создавать окна, использовать адаптер для мыши. Все это писать на языке Java. Создавать и использовать перечисления. Использовать ООП при написании программ.
Трудности: Сложно было успевать все записывать за маэстро. Чувствуется, что за кадром осталась огромная работа по рефакторингу. Нам же достался бриллиант, сверкающий своими гранями, т.к. каждая функция на своем месте - ни удалить, ни прибавить. Прямо скажу, что курс - образец для подражания, но пока это для меня недостижимая цель. Когда сам начинаешь писать, все валится в одну кучу. Так что буду стремиться к совершенству. Спасибо огромное за курс! Получил огромное удовольствие от его прохождения!



Научился: Просьба за то, что не снял видеообзор камни не кидать xD Была проделана большая работа. Данный курс был разбит на короткие уроки в котором не было воды. Его можно сравнить с хороший книгой, прочитав один раз, хочется прочитать опять. Но понимая, что вложил 0 усилий что бы сделать данную игру, приходят мысли что надо сесть осмыслить и сделать самому. Спасибо Евгению Витольдовичу за данный курс. На этом всё)