Изучение 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:09:02
2 теста
242 чел. ★ 4.9 Done
  Курс по теории Объектно-ориентированного программирования.
С нуля создаётся проект по рисованию различных геометрических фигур,
которые потом объединяются в спрайты, взаимодействуют друг с другом.

Во время создания проекта постоянно применяется рефакторинг кода,
при этом демонстрируются приёмы Объектно-ориентированного программирования.

Во второй части курса мы проработаем понятие Интерфейса.

Выдержка из отчёта Ларисы по завершению курса.
1) Получила представление о методах ООП - инкапсуляции, полиморфизме и наследовании.
Эти три "кита" позволяют изменять и усложнять программы, добавляя в них новые возможности;
2) Научилась рисовать простые геометрические фигуры;
3) Создавать базовые и производные классы;
4) Создавать структуры и работать с пикселями;
5) Создавать фигуры из массива простых фигур в том числе и в цвете;
6) Передвигать простую фигуру;
7) Создавать класс объектов Sprite, являющийся производным от базового абстрактого класса Shape,
а в нем список List, который содержит произвольное число фигур и функцию, которая добавляет фигуру,
а также метод Move, который двигает её;
8) Освоила BreakPoint, который дает возможность проследить переходы в классе и связи между классами;
9) Познакомилась с абстрактыми и виртуальными методами в абстрактном базовом классе и методами override в производных классах. Совокупность этмх методов позволяет передвигать сложные фигуры как целое.
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Со словом "Инкапсуляция" у меня всегда ассоциируется "Шляпа Фокусника" =) 
2 Урок рисования 00:08:10
1 тест
203 чел. ★ 4.9 Done
  На этом уроке мы нарисуем домик из двух линий и прямоугольника.
Отчёт отправил: 10558. Иван Воронин Выполнено за 27 мин. [Показать отчёт]
Научился: всё ок, идём дальше. 
Сложности: найти время 
3 Первый класс 00:09:53
2 теста
190 чел. ★ 4.9 Done
  На этом уроке мы создадим первый класс - Line.
И перепишем программу, чтобы она работала точно так же.
Отчёт отправил: 10558. Иван Воронин Выполнено за 21 мин. [Показать отчёт]
Научился: Сделал всё тоже самое, только с использованием списка и инициализации объектов Line при его создании. После чего досмотрел видео. Отличный рефакторинг. 
Сложности: найти время 
4 Второй класс 00:09:13
182 чел. ★ 4.9 Done
  На этом уроке мы создадим второй вспомогательный класс - Box.
Порассуждаем на тему "наследования" и переделаем программу.
Отчёт отправил: 10558. Иван Воронин Выполнено за 16 мин. [Показать отчёт]
Научился: Я конечно добавил в класс Rectangle поля w/h, для вычисления ширины и длинны. Но они мне не понадобились, так как я во время инициализации объекта Rectangle использовал вычисление координат относительно размеров поля, на котором этот самый Rectangle в последствии и отрисовывается. Поэтому проблем с размерами у меня не возникло. Всё отлично, идём дальше. з.ы. Так же использовал список для хранения объектов Rectangle, малоли =) 
Сложности: найти время 
5 Круглый класс 00:08:10
180 чел. ★ 4.9 Done
  Создадим класс для задания окружности - Circle.
Дополним окружность в центре домика.
Отчёт отправил: 10558. Иван Воронин Выполнено за 42 мин. [Показать отчёт]
Научился: Как обычно создал список объектов Circle. Описал параметры во время инициализации объектов при инициализации списка этих самых объектов. Добавил определение необходимого размера радиуса, чтобы каждая окружность вписалась в нужные границы, первая граница это всё поле отрисовки, вторая граница это прямоугольник. Как видно на скриншоте, первый круг вписался в рамки поля рисования, второй круг в рамки прямоугольника. Не использовал доп. параметры для вычисления, т.е. они по сути не нужны, так как что с ними, что без них, выводится идентично, так как вводимые данные относительны. Всё супер, идём дальше. 
Сложности: найти время 
6 Структура пикселя 00:10:55
169 чел. ★ 4.9 Done
  Создадим структуру для задания координат пикселя
и перепишем классы и программу с её использованием.
Почитать об отличии класса от структуры:
http://www.cyberforum.ru/csharp-beginners/thread442631.html
Отчёт отправил: 10558. Иван Воронин Выполнено за 29 мин. [Показать отчёт]
Научился: Отличная идея и рефакторинг, код выглядит более компактно. Относительность наше всё =) з.ы. как всегда послушал идею, реализовал сам и досмотрел видео . 
Сложности: найти время 
7 Структура vs Класс 00:25:05
1 тест
160 чел. ★ 4.9 Done
  На этом дополнительном уроке наглядно демонстрируются главные отличия между struct и class в языке C#.
Отчёт отправил: 10558. Иван Воронин Выполнено за 34 мин. [Показать отчёт]
Научился: Отличный урок, всё это уже знал, но было интересно посмотреть =) 
Сложности: найти время 
8 Пиксели для классов 00:14:44
2 теста
155 чел. ★ 4.9 Done
  На этом уроке мы продолжим внедрение структуры Pixel в наши классы.
Будем её использовать для хранения координат внутри класса.
Также избавимся от повторяемого кода внутри конструкторов.
Отчёт отправил: 10558. Иван Воронин Выполнено за 52 мин. [Показать отчёт]
Научился: Отличный урок, всё отлично, идём дальше. 
Сложности: найти время 
9 Расстояние между пикселями 00:12:12
2 теста
153 чел. ★ 4.9 Done
  Как вычислить расстояние между двумя пикселями?
Есть специальная формула, которую можно разместить в структуру Pixel.
Теперь мы сможем создать ещё один конструктор окружности по центру и любой точке на окружности.
Отчёт отправил: 10558. Иван Воронин Выполнено за 55 мин. [Показать отчёт]
Научился: Отличный урок, очень полезные добавления, всё супер, идём дальше. з.ы. у меня три окружности, одна вписана в форму, вторая вписана в квадрат, третья на основании данного урока, описывается углы квадрата. 
Сложности: найти время 
10 Цветные карандаши 00:14:54
1 тест
150 чел. ★ 4.9 Done
  Возьмём цветные карандаши и будем раскрашивать наш домик.
Создаём новые классы для цветны линий, окружностей и прямоугольников.
Отчёт отправил: 10558. Иван Воронин Выполнено за 34 мин. [Показать отчёт]
Научился: При копипасте из Lines в ColorLines кода, сразу захотелось реализовать наследование, но решил сделать так как в уроке, в конце как раз об этом и сказали, что это всё специально для демонстрации, отличная идея, всегда надо показывать для того чтобы понимали, зачем наследование вообще придумали и используют. 
Сложности: найти время и не внедрять наследование, которое будет в след уроке =) 
11 Рисуем Снеговика 00:14:40
149 чел. ★ 4.9 Done
  На этом уроке мы создадим ... Снеговика (спрайт) —
более сложную фигуру, которая состоит из других фигур.
В дальнейшем мы будем работать с такими спрайтами,
перемещать их, поворачивать, масштабировать,
а пока ... мы просто нарисуем Снеговика.
Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 30 мин. [Показать отчёт]
Научился: Отличный урок, когда-то давно подобное делали на БК-0010, тогда я голову Оптимуса Прайма нарисовал, теперь решил логотип Автоботов =) Координаты только левой половины логотипа, правая часть отзеркалена относительно центра логотипа. Всё супер, идём дальше. 
Сложности: найти время 
12 Второй Снеговик 00:09:46
1 тест
149 чел. ★ 4.9 Done
  На этом уроке мы создадим второй спрайт -
ещё одного снеговика, но разноцветного.

Вопрос для перехода к следующему уроку:
Что нужно изменить в этой программе, чтобы мы могли
а) перемещать снеговика;
б) поворачивать снеговика;
в) изменять размер снеговика.
Отчёт отправил: 10558. Иван Воронин Выполнено за 42 мин. [Показать отчёт]
Научился: Отличный урок, использовал ту же функцию для инициализации координат точек, так как после того как они занеслись в список, можно их ещё раз переинициализировать и занести в новый список, использовав тебе же переменные точек как буфер. Для того чтобы их было эффективно перемещать, нужно все объекты привести к общему интерфейсу, на основе которого можно будет создавать связанный список элементов объекта, так же для каждого типа элементов надо добавить функционал смещения по координатам x и y, которое вызывать в цикле, к примеру foreach. 
Сложности: Не бежать впереди паровоза, ну и найти время =) 
13 Богатое наследство 00:12:53
2 теста
148 чел. ★ 5 Done
  Наконец-таки мы возьмёмся за наследование.
Убираем повторяющийся код из цветных классов.
Осмысливаем значение термина «наследование».
Отчёт отправил: 10558. Иван Воронин Выполнено за 13 мин. [Показать отчёт]
Научился: Отличный урок, ещё на прошлом уроки хотел это сделать, но решил отложить и верно сделал, так как на этом было бы нечем заняться, дальше ещё интереснее оптимизация. 
Сложности: найти время 
14 Фигуральный базовый класс 00:10:56
146 чел. ★ 5 Done
  Очень хочется все элементы снеговика поместить в один массив.
Сейчас это сделать нельзя - придётся делать три массива - для кругов, для линий, для боксиков...
Решение гениальное - создаём базовый класс фигуры - Shape, создаём массив фигур, и все фигуры помещаем в этот массив!
После размещения фигур в массив можно видеть, что каждая фигура в нём хранится не как фигура, а под своим типом.
А все под одной крышей они могут находится потому что все они - фигуры, так как унаследованы от Shape.
Отчёт отправил: 10558. Иван Воронин Выполнено за 38 мин. [Показать отчёт]
Научился: Отличный урок, реализовал switch для 5, 6 и 7 версии C#, чтобы не использовать if else, более красиво получается. Поглядим, что предложат в след, уроке. 
Сложности: найти время 
15 Приведение с мотором 00:11:51
1 тест
146 чел. ★ 4.9 Done
  На этом уроке мы реализуем метод Draw (Shape shape) через серию условных операторов.
А также создадим функцию для рисования целевого спрайта (снеговика) - Draw (Shape [] shapes).
Результат работы программы не изменяется, а вот содержимое кода всё более и более облагораживается.
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Отличный урок, так как в прошлом использовал свитч, то в этом лишь вынес форыч в отдельный метод, мини-рефакторинг. По поводу объекта Shape и поля position, хранить координаты относительно которых будут вычисляться координаты объектов, т.е. плюсоваться, аналогия sx/sy =) 
Сложности: найти время 
16 Переезд метода Draw 00:11:54
144 чел. ★ 4.9 Done
  На этом уроке мы начнём переносить функции для рисования фигур из основной программы в классы.
Отчёт отправил: 10558. Иван Воронин Выполнено за 29 мин. [Показать отчёт]
Научился: Отличный урок, давно уже хочется перенести функции рисования в каждый объект, через интерфейс. з.ы. на скрине у левого логотипа слева вверху линия синяя, остальные красные, это для теста новой встроенной функции через Line, как видно в свитче, только она использует фишки данного урока, круг не стал модифицировать, так как пока их не использую, но планирую. 
Сложности: найти время 
17 Переезд graph в базовый класс 00:13:10
1 тест
143 чел. ★ 5 Done
  На этом уроке мы напишем функции для рисования фигур во всех остальных классах.
Отчёт отправил: 10558. Иван Воронин Выполнено за 55 мин. [Показать отчёт]
Научился: Отличный урок, наконец перенести Draw() куда надо. Всё супер, идём дальше. 
Сложности: найти время 
18 Мощь полиморфизма 00:09:01
2 теста
139 чел. ★ 5 Done
  На этом уроке мы создадим в базовом классе функцию Draw(),
и при её вызове через механизм полиморфизма будет запускаться созвучный метод нужного класса.
Отчёт отправил: 10558. Иван Воронин Выполнено за 29 мин. [Показать отчёт]
Научился: Отличный урок, коротко и по делу. Но рефакторинг ещё не окончен =) 
Сложности: найти время 
19 Спрайт для Снеговика 00:12:28
1 тест
138 чел. ★ 5 Done
  На этом уроке мы создадим новый класс - Sprite, в котором будет хранится список всех фигур, из  которых строится графический объект, чтобы в основной программе мы могли оперировать сразу спрайтами, а не их составными элементами.
Отчёт отправил: 10558. Иван Воронин Выполнено за 27 мин. [Показать отчёт]
Научился: Отличный урок, так как ранее использовал список, переделать под Sprite было не сложно, отличная идея. 
Сложности: найти время 
20 Перемещение круга 00:11:42
1 тест
137 чел. ★ 4.9 Done
  На этом уроке мы начнём реализовывать идею перемещения спрайтов.
Начнём, как обычно, с простого. Научимся перемещать один кружок.
Отчёт отправил: 10558. Иван Воронин Выполнено за 32 мин. [Показать отчёт]
Научился: Отличный урок, но я решил сразу реализовать поддержку перемещения всего спрайта, а то рисовал зря что-ли такую красоту =) делать шаг назад к кружкам. Ну вот и пришло его время, добил круг обрамляющий логотип относительно крайних координат. 
Сложности: найти время 
21 Перемещение других фигур 00:08:37
2 теста
135 чел. ★ 5 Done
  На этом уроке мы переделаем метод Draw() для остальных фигур - Line и Box().
Наша программа теперь по нажатию кнопочки будет перемещать сразу три фигурки.
Отчёт отправил: 10558. Иван Воронин Выполнено за 8 мин. [Показать отчёт]
Научился: Так как реализовал перемещение спрайта ещё на прошлом уроке, то этот просто просмотрел. Идём дальше. 
Сложности: найти время 
22 Перемещение Снеговиков 00:10:48
1 тест
135 чел. ★ 4.9 Done
  На этом уроке мы научим перемещаться целых снеговиков.
Для этого нам не нужно будет менять метод Draw(),
мы воспользуемся полиморфизмом!
Отчёт отправил: 10558. Иван Воронин Выполнено за 14 мин. [Показать отчёт]
Научился: Как видно из скриншота, передаются координаты смещения относительно текущих координат спрайта. Никаких delta не использовал, поэтому избавляться не пришлось =) отличный урок, идём дальше з.ы. пока не добавили virtual и override ошибки не было, просто предупреждение и без этого работало. 
Сложности: найти время 
23 ПОЛУФИНАЛЬНЫЙ УРОК. без видео
126 чел. ★ 4.9 Done
  На этом первая часть видеокурса "Теория ООП" закончилась.
Пожалуйста, напиши отзыв об этом курсе,
что тебе понравилось, что узнал нового,
что можно было бы сделать лучше,
оправдал ли курс твои ожидания.

Приложи своё фото и напиши своё имя-фамилию.

(видео в этом уроке нет)
Отчёт отправил: 10558. Иван Воронин Выполнено за 4 мин. [Показать отчёт]
Научился: Отлично проработана первая половина курса, пошаговый рефакторинг наглядно показывает что откуда и куда. Жаль мало спрайты мучали, вроде планировали их поворачивать вокруг оси и зуммировать. Надеюсь это будет в след. уроках, иначе я это сам реализую =) уж очень интересная идея на самом деле. С наилучшими пожеланиями, Иван Воронин. 
Сложности: найти время 
24 Интерфейс. Зачем он нужен. 00:09:33
1 тест
123 чел. ★ 4.9 Done
  На этом уроке я объясню своими словами, что такое интерфейс.
Мы поговорим об игре "Голя" или "Сифа" или "Вода",
о том, кто в неё может играть, и что делать тем,
кто не знает правила игры.
В конце урока мы создадим наш интерфейс.

Правила игры, для тех, кто не знает:
Выбирается ведущий.
Его цель - догнать и дотронуться до кого-либо из участников.
Цель остальных - не допустить этого.
Когда ведущий дотронется до кого-либо (заголит) - ведущим становится новый участник.
Отчёт отправил: 10558. Иван Воронин Выполнено за 27 мин. [Показать отчёт]
Научился: Отличное начало, интерфейс в C# аналогичен абстрактному классу, в котором все методы являются абстрактными. После данный интерфейс будем реализовывать там где это необходимо. Скорее всего создадим класс Player и реализуем все эти методы, после чего можно будет создать массив/список/множества этих Player объектов и манипулировать ими через общий интерфейс. 
Сложности: найти время 
25 Интерфейс. Правила игры. 00:12:23
1 тест
121 чел. ★ 5 Done
  На этом уроке мы поговорим о правилах игры в догоняшки.
На прошлом уроке мы выясняли, что должны уметь делать игроки.
На этом уроке мы начнём писать класс, в котором
опишем конкретные правила нашей игры.
Отчёт отправил: 10558. Иван Воронин Выполнено за 31 мин. [Показать отчёт]
Научился: Так как у нас имеется приватная переменная leader, думаю надо присвоить ей значение нового игрока, чтобы он стал лидером. Чтобы определить, пойман ли кто либо, надо реализовать проверку исходя из правил игры. На данный момент не вижу как можно это сделать, надо как минимум добавить координаты, чтобы можно было определить, находится лидер рядом с тем, кого поймал или нет. 
Сложности: Найти время 
26 Интерфейс. Алгоритм игры. 00:07:48
120 чел. ★ 4.9 Done
  На этом уроке мы допишем класс GameCatch.
Напишем реализацию методов FindNewLeader() и SetNewLeader().
Ваша задача - подумать и написать, что нужно ещё сделать,
чтобы можно было начать играть в эту игру.
Отчёт отправил: 10558. Иван Воронин Выполнено за 48 мин. [Показать отчёт]
Научился: Чтобы начать играть, надо добавить игроков, добавить в интерфейс любой вариант определения объектов в пространстве относительно друг друга, так же реализовать отображение для наглядности. 
Сложности: найти время 
27 Интерфейс. Создаём кружок. 00:08:36
118 чел. ★ 4.9 Done
  На этом уроке мы создадим объект для нашей игры - Кружок!
У кружочка есть координаты центра, радиус и цвет.
Цель урока - создать класс Circle.cs
Отчёт отправил: 10558. Иван Воронин Выполнено за 12 мин. [Показать отчёт]
Научился: Ну раз на следующем уроке будем уже отображать кружки на форме, то надо добавить функции рисования и смещения для реализации движения. Плюс проверки, чтобы не убегали за пределы видимого поля. 
Сложности: найти время 
28 Интерфейс. Площадка для игры. 00:11:58
1 тест
117 чел. ★ 5 Done
  На этом уроке мы начнём создавать класс Arena,
который создаст поле для игры и реализует
методы для отображения объектов на экране.
Отчёт отправил: 10558. Иван Воронин Выполнено за 23 мин. [Показать отчёт]
Научился: Реализовал работу Арены, добавил очистку фиолетовым цветом для наглядности. Арена нужна для визуального отображения ситуации на поле брани =) 
Сложности: найти время 
29 Интерфейс. Кружок на площадке. 00:11:49
1 тест
116 чел. ★ 4.9 Done
  На этом уроке мы допишем класс Arena,
реализуем методы Show(Circle), Refresh(), static NewCircle().
Всё готово к созданию кода для отображения кружка из класса Form1.cs!

Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 0 мин. [Показать отчёт]
Научился: Реализовал отображение шарика на поле брани. Не меняя свой код, который написал на прошлом уроке, добавив лишь пару новых строчек в классе Arena(). Всё супер, идём дальше. з.ы. на урок потратил 20 минут, но надо было срочно уйти, поэтому доделал и выложил отчёт когда вернулся. 
Сложности: найти время 
30 Интерфейс. Запускаем кружки на площадку! 00:11:49
3 теста
116 чел. ★ 5 Done
  На этом уроке мы настроим нашу форму,
напишем несколько волшебных строчек,
и ... программа заработает!!!
У нас будет много-много кружков на экране 8-о

Отчёт отправил: 10558. Иван Воронин Выполнено за 22 мин. [Показать отчёт]
Научился: Отличный урок, проблем с овалами у меня не было, так как я ещё с самого начала использовал ширину и высоту. На этом уроке только добавил кнопку добавления игроков, остальное уже ранее реализовал. PictureBox добавляю на форму программно, поэтому ручной работы с формой минимум. 
Сложности: найти время 
31 Интерфейс. Кружок хочет играть. 00:09:42
2 теста
115 чел. ★ 4.9 Done
  На этом уроке мы унаследуем кружок от интерфейса Игрок.
Теперь для запуска программы нам придётся реализовать
методы из его интерфейса.
В этом уроке мы реализуем методы Голя() и НеГоля().
Отчёт отправил: 10558. Иван Воронин Выполнено за 12 мин. [Показать отчёт]
Научился: В функции "Беги" будем смещать центр кружка при помощи sx и sy, а в функции "Поймал" будем проверять, пересекаются ли координаты кружков. 
Сложности: найти время 
32 Интерфейс. Кружок готов к игре! 00:20:47
1 тест
114 чел. ★ 5 Done
  На этом уроке мы допишем методы Игрока в классе Circle.
Реализуем метод Беги() и Поймал(), и даже исправим
недочёты в описании интерфейса (!!).
В конце урока я ответил на многочисленные вопросы участников.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 56 мин. [Показать отчёт]
Научился: Отвлекался несколько раз, но всё же доделал то, что хотел проверить. Реализовал добавление на поле сразу 10 игроков. При генерации игрока, ему случайным образом добавляется смещение. При нажатии на кнопку, обновляется новая позиция игроков относительно их положения на поле брани. Оставил след траектории, как делали в курсе "Хранитель экрана", чтобы нагляднее было видно направление движения и изменение цвета при столкновении игроков. з.ы. см. скриншот. 
Сложности: найти время 
33 Интерфейс. Кружочки гоняются друг за другом. 00:11:53
1 тест
113 чел. ★ 5 Done
  На этом уроке мы добавим в форму класс GameCatch,
Разместим таймер и наконец-таки запустим нашу игру -
Шарики начнут гоняться друг за другом!
Отчёт отправил: 10558. Иван Воронин Выполнено за 30 мин. [Показать отчёт]
Научился: Реализовал генерацию направления движения, чтобы ни по одной из осей не было 0. Реализовал проверку, чтобы "Лова" нельзя было передавать тому, кто был им в прошлый раз (у нас были такие правила в детстве). 
Сложности: найти время 
34 Интерфейс. Изменяем правила игры. 00:10:22
1 тест
111 чел. ★ 5 Done
  На этом уроке мы добавим в правила игры задержку
после получения Голи. Ведущий будет считать до 10,
и только потом сможет голить других.
Твоя задача - придумать новую игру, в которую
смогут играть Игроки, то есть объекты, которые
умеют делать то, что описано в интерфейсе Игрок.
Отчёт отправил: 10558. Иван Воронин Выполнено за 44 мин. [Показать отчёт]
Научился: Если поставить таймер в 1 сек, что нельзя ловить, то только того, кто поймал его, у нас было так. Так же мне понравилось, что все замирают, а "Лов" бегает и всех пинает =) з.ы. по поводу утечек памяти, как видно из видео, сборщик мусор периодически занимается этим. 
Сложности: найти время 
Видеообзор: EMM0cLuFz5A
35 Интерфейс. Создаём новую игру. 00:12:31
109 чел. ★ 4.9 Done
  На этом уроке мы начнём делать новую игру - Вирус.
Смысл игры подробно рассказан на видео.
Цель урока - создать класс GameVirus и
реализовать методы GameViurs(), AddGamer(), Step(), RunAll().
Также придумать и написать словами алгоритм
методов SetNewVirus(Игрок) и FindNewVirus().
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 39 мин. [Показать отчёт]
Научился: Вначале реализовал новую игру, с теме же правилами, как и в прошлом уроке, что инфицированные перемещаются, а остальные стоят на месте. Досмотрел видео до конца и понял, что полностью реализация будет в следующем уроке. =) 
Сложности: найти время 
Видеообзор: jKF_FprBRxc
36 Интерфейс. ФИНАЛЬНЫЙ УРОК. 00:13:05
104 чел. ★ 5 Done
  На этом уроке мы допишем последние две функции
и надолго залипнем в экран, наблюдая за новой
игрой для наших кружков, как вирусная эстафета
может быстро передаваться, особенно, когда
игроков очень много.
В комментариях написать свой отзыв об этой серии уроков.

Следующие уроки не обязательны для выполнения.
Я предупредил.

Какой курс ты будешь проходить следующим?
Отчёт отправил: 10558. Иван Воронин Выполнено за 45 мин. [Показать отчёт]
Научился: Отличный курс, как говорится: "Вкусновато, но маловато" =) з.ы. Добавил проверку на последнего заражённого, чтобы зациклить рестарт игры, остальное реализовал в прошлом уроке. Вперёд, к VIP урокам на десерт. 
Сложности: найти время 
Видеообзор: dfEsj3aUoa4
37 Интерфейс. VIP. Квадратики тоже хотят играть. 00:16:23
96 чел. ★ 5 Done
  На этом уроке мы создадим новый класс Box.
Квадратики тоже хотят играть в эту игру,
и просят их научить. Пока они ещё не умеют
ловить, но уже смогут отображаться и передвигаться.

Полезные ссылки для написания функции Поймал:
http://xdan.ru/how-to-check-intersect-two-rectangles.html
http://stackoverflow.com/questions/306316/determine-if-two-rectangles-overlap-each-other
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 35 мин. [Показать отчёт]
Научился: Реализовал добавление игроков поочерёдно, при клике на кнопку, добавляется вначале кружок, потом квадратик и так далее. Реализовал независимую игру кружкой и квадратиков, т.е. кружки ловят кружки, а квадратики ловят квадратики, но если играют кружки, квадратики не мешаются, стоят на месте и наоборот. Оставил реализацию ловли квадратиков кружками и наоборот на след урок, чтобы было чем там заняться =) з.ы. по ссылка и правда ошибочные примеры, я ранее уже реализовывал подобное, когда занимался серверами Terraria (когда занимался разработкой системы межей для строительства). По поводу класса Box, реализовал его по своему, по аналогии с Circle, там Rectangle незачем, так как экземпляр объекта Circle создаётся в функции Show(), то и логичнее так же создавать экземпляр Rectangle(), передавая аналогичным образом Point() и Size() для симметрии кода игроков. 
Сложности: найти время 
Видеообзор: EG5T44cknGw
38 Интерфейс. VIP. Пересечение прямоугольников. 00:09:47
93 чел. ★ 5 Done
  На этом уроке мы допишем метод Box.Поймал()
и запустим игру с квадратиками.
Потом попробуем подружить квадратики с кружками,
увидим, что это не так просто, да собственно и не нужно.
Но возможно.
Отчёт отправил: 10558. Иван Воронин Выполнено за 21 мин. [Показать отчёт]
Научился: Реализовал пересечение прямоугольников ещё на прошлом уроке. Реализовал функцию Show(IGamer g) через свитч. Всё отлично, идём дальше. з.ы. по поводу интерфейса, это не его суть, чтобы игроки были одинаковые, они и так одинаковые, так как у них всех единый интерфейс. По поводу же реализации пересечения разных объетов, это немного другая задача. просто она сложнее, чем проверка одинаковых объектов. Поглядим реализацию в след. уроке. 
Сложности: найти время 
39 Интерфейс. VIP. Тяжёлая дружба кругов и квадратов. 00:22:25
81 чел. ★ 5 Done
  На этом уроке мы создалим "универсальный" класс Crosser,
который сможет проверять на столкновение "любых" двух Игроков.
Конечно не любых, а только двух наших Box и Circle.
Это яркий способ, чего стоит избегать в программах.
Потому что тут не добавляется универсальности,
т.к. при добавлении новых объектов придётся
дописывать кучу новых функций на сравнение.

Самостоятельное задание - записать видеообзор
своего проекта и рассказать, что такое Interface.
Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 0 мин. [Показать отчёт]
Научился: На первом скриншоте показано приближение прямоугольника к кругу своим ребром, на втором скрине видно, что шарик окрасился, т.е. был заражён, но при этом прямоугольник не пересекается своими углами, это потому, что я модернизировал функцию проверки пересечения разных объектов, учёл грани прямоугольников. Если этого не сделать, то маленькие кружки запросто пролетят насквозь больших прямоугольников, если как раз не зацепят их углы. На видео можно понаблюдать над реализацией. Так же устранил все утечки памяти и реализовал уборку мусора каждый 5 секунд, это устранило проблемы с постепенным увеличением потребления ОЗУ со временем. з.ы. по поводу Интерфейса, это очень удобная вещь, которая определяет общий набор функций для различных объектов, что позволяет взаимодействовать с ними намного удобнее и хранить в общем массиве/списке/множестве... Он гарантирует, что каждый объект имеет необходимый функционал, так как он должен обязательно быть реализован!!! з.з.ы. Не согласен, что этот урок показывает как делать нельзя, просто это сложнее и требует доп. ресурсов, но зато это более качественно, чем если бы мы кружки описывали прямоугольником. Можно создать интерфейс для игр, который хранил бы в себе базовый функционал, это прям напрашивается. Отличный курс, но маленький, советую каждому пройти его и осмыслить. 
Сложности: найти время 
Видеообзор: Dq8_ViurKFc
  Итого:   39 видеоуроков 7 час. 40 мин.
35 тестов
80 чел. ★ 4.95  
  Финалисты:   lomik,   Роман,   Максим Базуев,   Neverwinter 2,   Владимир,   Никита,   Олюшка,   Валера Луцевич,   Anton Sozykin,   Permitin Alexey,   Артём,   Максим Лапшинов,   Frank,   Archi,   Александр Львович,   Олег Михайлович,   Дмитрий,   Новопашин Владимир,   Евгений,   Сергей Соколов,   Александр Б.,   Максим Саратов,   Алексей В.,   Александр,   Rita,   Станислав,   Алексей Хонин,   Ludmila,   Yefim,   Сергей Зулкарнаев,   Сергей Аникин,   Константин,   Tekashnik,   Артем Посунько,   Андрей Козлов,   kalobyte,   Sergio,   Алексей Малышев,   Александр,   Сергей Стефаненко,   Николай Денисов,   Анатолий,   Денис,   Алексей|BrisK|Кривицкий,   Скозложоп,   chokayes,   Иван Воронин,   Андрей Шевченко,   Chip,   Rise,   Слава,   Саша Авербух,   Александр,   ser2018,   Дмитрий,   Виктор,   Денис,   Oleksandr,   superGrover,   Александр Балбашов,   vip,   Слава,   Sergey Potapov,   Den Andreevich,   Dmitry Sinitsin,   Никита,   Айдар,   Кирилл,   Max,   AlliZzeN,   no name,   Дмитрий,   Владимир,   ES35,   Anatoli,   Виталий,   Татьяна,   Vdonsk,   MaxB,   Булат .

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





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

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

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

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


Научился: В прошлом уроке я не совсем корректно реализовал игру вирус, у меня новый вирус распространялся после того, как все игроки оказались заражены, а по заданию требовалось делать это на шаг раньше, то есть, когда оставался последний незараженный игрок. Мелочь, но логика игры уже немного другая. К тому же, вариант Евгения Витольдовича более эффективный в плане поиска игроков. Поэтому использовал его алгоритм в методе FindNewVirus. Для разнообразия я привел на видео модифицированный вариант игры, когда зараженные замирают на месте. В целом, уроки короткие, проходятся на одном дыхании, рекомендую всем, кто хочет познакомиться с ООП. Нравится не только сам материал, его структура, но и подача, Евгений Витольдович заряжает оптимизмом, отвечает на вопросы в чате, хочет действительно помочь и делиться своими знаниями, поэтому в результате получаются хорошие уроки. Следующий курс выберу Шарики, давно хотел их пройти.



Научился: Новые функции коллекций NET.
В уроках правится то что написание программы происходит наглядно. Занимаясь по книжкам какие то детали упускаешь. Экономия усилий, времени.