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.

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

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

Отчёт отправил: 16496. Pavlin Выполнено за 4 час. 18 мин. [Показать отчёт]
Научился: Привязка image к элементам Enum. 
Сложности: Не понял каким образом поле image в дальнейшем будет свое у каждого элемента Enum. 
15 Источник ресурсов 00:01:53
79 чел. ★ 4.9 Done
  На этом слайде мы сделаем загрузку картинок через систему ресурсов в языке Java
Отчёт отправил: 16496. Pavlin Выполнено за 17 час. 57 мин. [Показать отчёт]
Научился: Узнал о системе ресурсов. 
Сложности: Ничего. 
16 Запускаемый jархив 00:02:55
73 чел. ★ 5 Done
  На этом слайде мы создадим запускаемый JAR-архив для нашей программы

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

Отчёт отправил: 16496. Pavlin Выполнено за 17 час. 59 мин. [Показать отчёт]
Научился: Создание jar-файла и что jar-файл является zip-архивом. 
Сложности: Довольно запутанная последовательность действий для создания  jar-файла. 
17 Карта классных сокровищ 00:04:48
70 чел. ★ 4.9 Done
  На этом слайде мы разберем UML-схему нашего проекта
Отчёт отправил: 16496. Pavlin Выполнено за 12 час. 58 мин. [Показать отчёт]
Научился: Составил представление о взаимосвязи классов в игровой программе. Идея представит поле игры двумя слоями. 
Сложности: Уловить и понять тонкости взаимосвязей классов. 
18 Наши координаты 00:03:24
65 чел. ★ 5 Done
  На этом слайде мы создадим класс Coord и задействуем его в нашей программе
Отчёт отправил: 16496. Pavlin Выполнено за 59 мин. [Показать отчёт]
Научился: Как удобно и наглядно изображать классы с их полями и методами на блок-схеме устройства программы.. 
Сложности: Удерживать нить понимания меняющегося кода. 
19 Статичная граница 00:03:12
65 чел. ★ 4.9 Done
  На этом слайде мы создадим класс Ranges, который будет использоваться во многих классах нашего проекта и позволит задавать глобальные параметры и перебор всех координат.
Отчёт отправил: 16496. Pavlin Выполнено за 14 мин. [Показать отчёт]
Научился: Может быть удобней перебирать все координаты списком, а не двойным циклом for. Хочу запомнить прием планирования программы - заготовки классов, их полей/методов на блок-схеме. P.S. И в Java, и в C# есть оператор yield, насколько я знаю. 
Сложности: Планирование необходимых методов заранее и удержать в голове будущие взаимосвязи между классами/объектами. 
20 Установка размеров 00:04:22
64 чел. ★ 4.9 Done
  На этом слайде мы создадим класс Range с двумя статичными методами для установки и получения размеров нашего поля.
Отчёт отправил: 16496. Pavlin Выполнено за 11 мин. [Показать отчёт]
Научился: В процессе. 
Сложности: Пока не понял, зачем нужно два метода getSize() с разными параметрами. 
21 Полный список 00:04:28
60 чел. ★ 5 Done
  На этом слайде мы добавим в класс Range список всех координат нашего поля и будем его использовать для перебора всех клеток
Отчёт отправил: 16496. Pavlin Выполнено за 8 мин. [Показать отчёт]
Научился: Способ автоматического отображения картинок на поле. 
Сложности: Что чтобы не было рамочек, setVisible() нужно ставить после pack(). 
22 Радуга картинок 00:03:18
57 чел. ★ 4.9 Done
  На этом слайде мы добавим иконку нашей программе и немножко пошалим с отображением картинок на экране
Отчёт отправил: 16496. Pavlin Выполнено за 10 мин. [Показать отчёт]
Научился: Устанавливать иконку. 
Сложности: Все понятно. 
23 Фасадный класс 00:02:05
57 чел. ★ 4.9 Done
  На этом слайде мы начнем создавать фасадный класс Game и напишем первые два метода этого класса

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

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

Отчёт отправил: 16496. Pavlin Выполнено за 17 мин. [Показать отчёт]
Научился: Что в case оператора switch можно прописать еще один switch. 
Сложности: Все понятно. 
45 Нулевая рекурсия 00:04:01
47 чел. ★ 5 Done
  На этом слайде мы рекурсивно откроем все клетки вокруг нулей.
Отчёт отправил: 16496. Pavlin Выполнено за 20 мин. [Показать отчёт]
Научился: Реализовал метод, открывающий клетки вокруг пустых ячеек. 
Сложности: Все понятно. 
46 Учёт зарытых флагов 00:04:19
47 чел. ★ 5 Done
  На этом слайде мы будем считать количество флажков и закрытых клеток на нашем поле
Отчёт отправил: 16496. Pavlin Выполнено за 9 мин. [Показать отчёт]
Научился: Добавил в класс Flag счетчики флажков и закрытых клеток. 
Сложности: Ничего. 
47 Телеграмма о флажках 00:03:28
47 чел. ★ 5 Done
  На этом слайде мы выведем сообщение пользователю, сколько флажков и сколько бомб есть на экране
Отчёт отправил: 16496. Pavlin Выполнено за 48 мин. [Показать отчёт]
Научился: Сделал вывoд coобщений о количестве бoмб и флажков. 
Сложности: Все понятно. 
48 День Победы! 00:05:25
47 чел. ★ 5 Done
  На этом слайде мы проверим, а не победили ли мы!
Отчёт отправил: 16496. Pavlin Выполнено за 50 мин. [Показать отчёт]
Научился: Реализовал проверку на победу в игре. 
Сложности: Победить. 
49 Первая ошибка сапёра 00:06:13
47 чел. ★ 5 Done
  На этом слайде мы зафиксируем поражение, когда игрок подорвался на бомбе.
Отчёт отправил: 16496. Pavlin Выполнено за 21 мин. [Показать отчёт]
Научился: Реализовал проигрыш и перезапуск игры после клика при проигрыше и победе. 
Сложности: Все понял. 
50 Открываем карты 00:07:26
45 чел. ★ 5 Done
  На этом слайде мы покажем расположение бомб после проигрыша.
Отчёт отправил: 16496. Pavlin Выполнено за 29 мин. [Показать отчёт]
Научился: Реализовал отображение бомб при проигрыше. 
Сложности: Все понятно. 
51 Цифровой помощник сапёра 00:11:31
46 чел. ★ 5 Done
  На этом слайде мы напишем помощник, который помогает открывать заведомо безопасные клетки.
Отчёт отправил: 16496. Pavlin Выполнено за 35 мин. [Показать отчёт]
Научился: Реализация автоматического открывания безопасных клеток. 
Сложности: Все понял. 
52 Финальный аккорд 00:17:49
35 чел. ★ 5 Done
  На этом видео мы проанализируем всё, что было сделано - пройдёмся по всему коду программы.
Также поговорим о создании Бота для игры Сапёр - как это можно сделать.
Ваше задание - записать видеообзор созданной игры, выложить
на youtube и разместить ссылку на видео в описании.
Отчёт отправил: 16496. Pavlin Выполнено за 54 мин. [Показать отчёт]
Научился: Возможности записать видео обзор нет, поэтому попытаюсь выразить впечатления в виде текста. Так как язык Java сам по себе и его синтаксис меня не слишком интересует, проходя этот курс я в первую очередь рассчитывал увидеть реализацию принципов ООП на практике, как постепенно выстраивается структура программы, строятся взаимосвязи классов и их объектов, как происходит взаимодействие между ними. Тут курс меня очень приятно удивил - с первого же видео понятно, что над курсом проведена тщательна и продуманная работа, программа пишется не с нуля, а по заранее продуманной схеме и плану. В каждом видео рассмотрена определенная часть программы - программа собирается как бы по кусочка-кирпичикам, к тому же видео короткие и сжатые по смыслу, что само по себе уже отдельный плюс. Особенно понравились слайды со схемами будущих классов с подробным объяснением предназначений их полей и методов - сразу упрощает понимание класса и его роль в программе в целом. Ну и отдельная благодарность за последнее видео, с подведением итога и обзора структуры программы - очень помогает снова взглянуть на структуру, но уже на все вместе и сразу в одном видео, новым взглядом и на готовую версию программы, после рефакторинга. В общем, спасибо за такой качественный, продуманный и проработанный курс, да еще и бесплатно всем желающим :) 
  Итого:   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 усилий что бы сделать данную игру, приходят мысли что надо сесть осмыслить и сделать самому. Спасибо Евгению Витольдовичу за данный курс. На этом всё)