Изучение c# на примерах

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

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.

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

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

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

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

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

Выдержка из отчёта Ларисы по завершению курса.
1) Получила представление о методах ООП - инкапсуляции, полиморфизме и наследовании.
Эти три "кита" позволяют изменять и усложнять программы, добавляя в них новые возможности;
2) Научилась рисовать простые геометрические фигуры;
3) Создавать базовые и производные классы;
4) Создавать структуры и работать с пикселями;
5) Создавать фигуры из массива простых фигур в том числе и в цвете;
6) Передвигать простую фигуру;
7) Создавать класс объектов Sprite, являющийся производным от базового абстрактого класса Shape,
а в нем список List, который содержит произвольное число фигур и функцию, которая добавляет фигуру,
а также метод Move, который двигает её;
8) Освоила BreakPoint, который дает возможность проследить переходы в классе и связи между классами;
9) Познакомилась с абстрактыми и виртуальными методами в абстрактном базовом классе и методами override в производных классах. Совокупность этмх методов позволяет передвигать сложные фигуры как целое.
Отчёт отправил: 11353. AlliZzeN Выполнено за 17 час. 52 мин. [Показать отчёт]
Научился: Инкапсуляция - как "черный ящик". Мы знаем, как с ним взаимодействовать, но не знаем как внутри он работает. Инкапсуляция - это скрытая внутренняя реализация чего-то, но открыта для взаимодействия. Например думаю, к этому примеру подходит  механизм управления автомобилем. Мы знаем что если руль крутить влево, то машина поедет налево, если вправо - направо. Нам неважно знать какие процессы, неведомые силы и прочие функции происходят внутри машины для поворотов. 
Сложности: Пока вроде бы все понятно, если я правильно понял определение инкапсуляции. 
2 Урок рисования 00:08:10
2 теста
206 чел. ★ 4.9 Done
  На этом уроке мы нарисуем домик из двух линий и прямоугольника.
Отчёт отправил: 11353. AlliZzeN Выполнено за 1 час. 27 мин. [Показать отчёт]
Научился: Научился рисовать прямоугольник и линии. 
Сложности: Ничего сложным не было. 
3 Первый класс 00:09:53
2 теста
193 чел. ★ 4.8 Done
  На этом уроке мы создадим первый класс - Line.
И перепишем программу, чтобы она работала точно так же.
Отчёт отправил: 11353. AlliZzeN Выполнено за 20 час. 4 мин. [Показать отчёт]
Научился: Создавать класс, перегружать методы. Программа начинает выглядеть красиво. Только у меня одно замечание. Может я тороплюсь и это будет далее, а может и вовсе не прав, но может нужно было бы поля класса Line делать приватными, а доступ к ним сделать через свойства. Я бы так сделал, но у меня мало опыта, так что утверждать не буду, просто мои догадки. 
Сложности: Сложного ничего не было и это радует. 
4 Второй класс 00:09:13
185 чел. ★ 4.9 Done
  На этом уроке мы создадим второй вспомогательный класс - Box.
Порассуждаем на тему "наследования" и переделаем программу.
Отчёт отправил: 11353. AlliZzeN Выполнено за 1 час. 4 мин. [Показать отчёт]
Научился: Все никак не могу привыкнуть в системе координат.  Примечание: В данном случае не нужно ставить this в конструкторе перед widthи heigth. 
Сложности: Сложности были с координатами, немного запутался в них. 
5 Круглый класс 00:08:10
182 чел. ★ 4.9 Done
  Создадим класс для задания окружности - Circle.
Дополним окружность в центре домика.
Отчёт отправил: 11353. AlliZzeN Выполнено за 13 час. 41 мин. [Показать отчёт]
Научился: Создавать класс Эллипс и рисовать окружность. 
Сложности: Сложностей пока не было.  Данный урок повторяет предыдущий. 
6 Структура пикселя 00:10:55
171 чел. ★ 4.9 Done
  Создадим структуру для задания координат пикселя
и перепишем классы и программу с её использованием.
Почитать об отличии класса от структуры:
http://www.cyberforum.ru/csharp-beginners/thread442631.html
Отчёт отправил: 11353. AlliZzeN Выполнено за 31 мин. [Показать отчёт]
Научился: Хорошо что использовали struct. Прочитал про них, попрактиковался с ними. 
Сложности: - 
7 Структура vs Класс 00:25:05
1 тест
162 чел. ★ 4.9 Done
  На этом дополнительном уроке наглядно демонстрируются главные отличия между struct и class в языке C#.
Отчёт отправил: 11353. AlliZzeN Выполнено за 10 час. 7 мин. [Показать отчёт]
Научился: Хороший урок, понял некоторые моменты, которые не знал.   Структура  это тип значения. Располагается в стеке. При передачи в метод передается копия структуры. Но значения структуры изменить можно, использовать модификаторы ref или out, или возвратить структуру.  При инициализации структуры значения устанавливаются по умолчанию. Нельзя наследовать структуру.   Класс это ссылочный тип. Располагается в куче. При передачи в метод передается указатель(ссылка на класс), поэтому при изменениях значений мы сразу их меняем "там", куда ведет нас указатель.  При создании класса значения устанавливаются по умолчанию. Класс поддерживает наследование. 
Сложности: Ничего сложного. 
8 Пиксели для классов 00:14:44
2 теста
157 чел. ★ 4.9 Done
  На этом уроке мы продолжим внедрение структуры Pixel в наши классы.
Будем её использовать для хранения координат внутри класса.
Также избавимся от повторяемого кода внутри конструкторов.
Отчёт отправил: 11353. AlliZzeN Выполнено за 45 мин. [Показать отчёт]
Научился: Научился использовать структуру в классе. Правда сразу не все понял как 2*2. Пришлось второй раз пересматривать с паузами и понять. ЛОгично и удобнее стало на мой взгляд. Кажется ничего сложного, но это на примере.  Как будет при создании нового своего приложения пока  сильно не углублялся.  
Сложности: Ничего) 
9 Расстояние между пикселями 00:12:12
2 теста
155 чел. ★ 4.9 Done
  Как вычислить расстояние между двумя пикселями?
Есть специальная формула, которую можно разместить в структуру Pixel.
Теперь мы сможем создать ещё один конструктор окружности по центру и любой точке на окружности.
Отчёт отправил: 11353. AlliZzeN Выполнено за 11 час. 50 мин. [Показать отчёт]
Научился: public Circle(Pixel centr, Pixel point): this(centr, centr.Distance(point)) this в конструкторе говорит нам о том, что сначала вызывается конструктор подходящий по параметрам (centr, centr.Distance(point), а после уже вызывается первая часть конструктора Pixel centr, Pixel point). Со структурой все понятно. 
Сложности: Проблем не было. 
10 Цветные карандаши 00:14:54
1 тест
152 чел. ★ 4.9 Done
  Возьмём цветные карандаши и будем раскрашивать наш домик.
Создаём новые классы для цветны линий, окружностей и прямоугольников.
Отчёт отправил: 11353. AlliZzeN Выполнено за 46 мин. [Показать отчёт]
Научился: По началу при создании ColorLine были некоторые непонятно, после уже разобрался. Думал, а зачем мы копировали из классов весь код, могли бы сделать наследование. Вроде подходит такой вариант, не разбирался после того как Евгений озвучил, что специально так сделал, далее будет оптимизировать код. Посмотрим, что будет дальше. 
Сложности: Ничего сложного. 
11 Рисуем Снеговика 00:14:40
151 чел. ★ 4.9 Done
  На этом уроке мы создадим ... Снеговика (спрайт) —
более сложную фигуру, которая состоит из других фигур.
В дальнейшем мы будем работать с такими спрайтами,
перемещать их, поворачивать, масштабировать,
а пока ... мы просто нарисуем Снеговика.
Отчёт отправил: 11353. AlliZzeN Выполнено за 13 час. 5 мин. [Показать отчёт]
Научился: Так как я еще не совсем хорошо разбираюсь с координатами в WinForm, нашел подсказку в Pain. При наведении в углу показываются координаты точки. Теперь всё стало понятно. Не знаю как дальше буду курс проходить, но думаю что-нибудь придумаю. Всё равно кажется рисунок не идеален. Как говорится, - И так сойдёт!  
Сложности: Придумать что-то своё не сложное, но и не простое.  
Видеообзор: XYQzrSDatJ0
12 Второй Снеговик 00:09:46
1 тест
151 чел. ★ 4.9 Done
  На этом уроке мы создадим второй спрайт -
ещё одного снеговика, но разноцветного.

Вопрос для перехода к следующему уроку:
Что нужно изменить в этой программе, чтобы мы могли
а) перемещать снеговика;
б) поворачивать снеговика;
в) изменять размер снеговика.
Отчёт отправил: 11353. AlliZzeN Выполнено за 43 мин. [Показать отчёт]
Научился: Что нужно изменить в этой программе, чтобы мы могли Сделать класс Снеговик и через конструктор все это менять + интерфейс наверное. а) перемещать снеговика; б) поворачивать снеговика; в) изменять размер снеговика. 
Сложности: В этом уроке ничего сложного. 
13 Богатое наследство 00:12:53
2 теста
150 чел. ★ 5 Done
  Наконец-таки мы возьмёмся за наследование.
Убираем повторяющийся код из цветных классов.
Осмысливаем значение термина «наследование».
Отчёт отправил: 11353. AlliZzeN Выполнено за 2 дня 18 час. 31 мин. [Показать отчёт]
Научился: Наследование - это копирование состояния родителя с возможностью добавления новых функций и т.д. Например, есть класс Транспортное средство с параметрами -скорость, - количество мест, - количество колес. Есть классы Автомобиль, Мотоцикл, Велосипед. Так вот, Все эти классы наследуются от класса Транспортное средство с учетом своих значений (скорость, количество колес и количества мест).  Класс от которого наследуется, называется базовый, родительский. Класс который наследуется называется наследник, дочерний. Если в наследнике указано ключевое слово base, то сначала вызывается конструктор из родительского класса, после уже конструктор дочернего класса. 
Сложности: Ничего сложного. 
14 Фигуральный базовый класс 00:10:56
148 чел. ★ 5 Done
  Очень хочется все элементы снеговика поместить в один массив.
Сейчас это сделать нельзя - придётся делать три массива - для кругов, для линий, для боксиков...
Решение гениальное - создаём базовый класс фигуры - Shape, создаём массив фигур, и все фигуры помещаем в этот массив!
После размещения фигур в массив можно видеть, что каждая фигура в нём хранится не как фигура, а под своим типом.
А все под одной крышей они могут находится потому что все они - фигуры, так как унаследованы от Shape.
Отчёт отправил: 11353. AlliZzeN Выполнено за 12 час. 14 мин. [Показать отчёт]
Научился: Первый способ реализации функции Draw(); (в лоб) думаю такой: void Draw(Shape sh)         {             if (sh is Line)                 Draw((Line)sh);             if (sh is Box)                 Draw((Box)sh);             if (sh is Circle)                 Draw((Circle)sh);             if (sh is ColorLine)                 Draw((ColorLine)sh);             if (sh is ColorBox)                 Draw((ColorBox)sh);             if (sh is ColorCircle)                 Draw((ColorCircle)sh);         } Работает, но не элегантно. Думал на счет делегатов, в делегат записать все методы Draw))) Кажется плохое решение) Пока не знаю. Может быть на за счет интерфейсов. 
Сложности: Придумать реализацию. 
15 Приведение с мотором 00:11:51
1 тест
148 чел. ★ 4.9 Done
  На этом уроке мы реализуем метод Draw (Shape shape) через серию условных операторов.
А также создадим функцию для рисования целевого спрайта (снеговика) - Draw (Shape [] shapes).
Результат работы программы не изменяется, а вот содержимое кода всё более и более облагораживается.
Отчёт отправил: 11353. AlliZzeN Выполнено за 5 час. 46 мин. [Показать отчёт]
Научился: Функцию Draw(Shape shape) реализовал еще на прошлом уроки в домашнем задании через if. Переменная Shape.position понадобится для указания начала координат каждой отдельной фигуры. Если я правильно понял. 
Сложности: Ничего сложного не было. 
16 Переезд метода Draw 00:11:54
146 чел. ★ 4.9 Done
  На этом уроке мы начнём переносить функции для рисования фигур из основной программы в классы.
Отчёт отправил: 11353. AlliZzeN Выполнено за 1 час. 14 мин. [Показать отчёт]
Научился: Сначала программа выбивала ошибку на рисовании цветной фигуры при моем старом коде: if (sh is Line)                 Draw((Line)sh);             if (sh is Box)                 Draw((Box)sh);             if (sh is Circle)                 Draw((Circle)sh);             if (sh is ColorLine)                 Draw((ColorLine)sh);             if (sh is ColorBox)                 Draw((ColorBox)sh);             if (sh is ColorCircle)                 Draw((ColorCircle)sh); Понял ошибку. Так как цветной Circle является так же и обычным Circle поэтому вызывало ошибку что graph и pen имеют ссылку null.  Так что лучше использовать typeof. Он выдает тип класса точнее. Учту. Если я не так сформулировал и понял, поправьте пожалуйста. 
Сложности: Ничего сложного. 
17 Переезд graph в базовый класс 00:13:10
1 тест
145 чел. ★ 5 Done
  На этом уроке мы напишем функции для рисования фигур во всех остальных классах.
Отчёт отправил: 11353. AlliZzeN Выполнено за 2 час. 16 мин. [Показать отчёт]
Научился: Использовать базовый класс в режиме Наследование. Не сразу понял как присваивается необходимый цвет фигуре, пошел по шагам и все стало ясно. 
Сложности: Ничего сложного) 
18 Мощь полиморфизма 00:09:01
2 теста
141 чел. ★ 5 Done
  На этом уроке мы создадим в базовом классе функцию Draw(),
и при её вызове через механизм полиморфизма будет запускаться созвучный метод нужного класса.
Отчёт отправил: 11353. AlliZzeN Выполнено за 19 мин. [Показать отчёт]
Научился: Вот вроде знаком с перегрузкой методов, абстрактными классами/методами. Но не мог додумать в прошлых уроках как организовать функцию рисования, чтобы работала для всех классов. А оказалось все логично, легко и просто. 
Сложности: Было легко и просто. 
19 Спрайт для Снеговика 00:12:28
1 тест
140 чел. ★ 5 Done
  На этом уроке мы создадим новый класс - Sprite, в котором будет хранится список всех фигур, из  которых строится графический объект, чтобы в основной программе мы могли оперировать сразу спрайтами, а не их составными элементами.
Отчёт отправил: 11353. AlliZzeN Выполнено за 1 час. 10 мин. [Показать отчёт]
Научился: List<T> динамический список однотипных элементов(конечно можно хранить в нем переменные разного типа, но это влияет на производительность, да и запутаешься в конце концов, а программа тем более). Так вот.  Хорош данный список тем, что при инициализации нам не нужно указывать какого объема он будет(как, например массив int[] arr = new int[2];), хотя в List есть возможность указать начальную емкость коллекции, что увеличит время выполнения и производительность. Так же в List можем добавлять массивы, удалять определенные значения, значения по индексу, сортировать коллекцию List. C уроком разобрался, пока все понятно. И наконец понял, как компилятор понимает из какого класса вызывать функцию Draw(). 
Сложности: Проблем не было. Все решил самостоятельно после просмотра без подсказок. 
20 Перемещение круга 00:11:42
1 тест
139 чел. ★ 4.9 Done
  На этом уроке мы начнём реализовывать идею перемещения спрайтов.
Начнём, как обычно, с простого. Научимся перемещать один кружок.
Отчёт отправил: 11353. AlliZzeN Выполнено за 1 день 23 час. 3 мин. [Показать отчёт]
Научился: Два раза пересматривать пришлось для понимания.  
Сложности: Вроде всё понятно. 
21 Перемещение других фигур 00:08:37
2 теста
137 чел. ★ 5 Done
  На этом уроке мы переделаем метод Draw() для остальных фигур - Line и Box().
Наша программа теперь по нажатию кнопочки будет перемещать сразу три фигурки.
Отчёт отправил: 11353. AlliZzeN Выполнено за 1 час. 33 мин. [Показать отчёт]
Научился: Пришлось немного подумать и осмыслить, а еще сообразить с этими не координатами) Вроде бы получилось задуманное. 
Сложности: В принципе ничего сложного. Главное серое вещество заставить шевелиться. 
22 Перемещение Снеговиков 00:10:48
1 тест
137 чел. ★ 4.9 Done
  На этом уроке мы научим перемещаться целых снеговиков.
Для этого нам не нужно будет менять метод Draw(),
мы воспользуемся полиморфизмом!
Отчёт отправил: 11353. AlliZzeN Выполнено за 2 час. 46 мин. [Показать отчёт]
Научился: Повторил базовый полиморфизм. 
Сложности: Сложного пока ничего  
23 ПОЛУФИНАЛЬНЫЙ УРОК. без видео
128 чел. ★ 4.9 Done
  На этом первая часть видеокурса "Теория ООП" закончилась.
Пожалуйста, напиши отзыв об этом курсе,
что тебе понравилось, что узнал нового,
что можно было бы сделать лучше,
оправдал ли курс твои ожидания.

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

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

Правила игры, для тех, кто не знает:
Выбирается ведущий.
Его цель - догнать и дотронуться до кого-либо из участников.
Цель остальных - не допустить этого.
Когда ведущий дотронется до кого-либо (заголит) - ведущим становится новый участник.
Отчёт отправил: 11353. AlliZzeN Выполнено за 1 день 2 час. 24 мин. [Показать отчёт]
Научился: Интерфейс - это ссылочный тип данных, набор свойств и методов без реализации. Интерфейсы реализуют в классах и структурах. Принято обозначение интерфейсов с заглавной буквы I (IPlayer). В С# поддерживается множественное наследование public class Person : IPlayer, ITrainer. При реализации интерфейсов необходимо реализовать все методы и свойства. Вообще интерфейсы похожи на абстрактные классы. По умолчанию идентификаторы доступа в интерфейсах значатся как public. Оно и понятно:) Ведь нужно реализовать в классах. При реализации и классов и интерфейсов одновременно если, то необходимо указывать интерфейсы после классов. Можно реализовать множественное наследование интерфейсов.  
Сложности: Ничего сложного. Интересная тема. 
25 Интерфейс. Правила игры. 00:12:23
1 тест
123 чел. ★ 5 Done
  На этом уроке мы поговорим о правилах игры в догоняшки.
На прошлом уроке мы выясняли, что должны уметь делать игроки.
На этом уроке мы начнём писать класс, в котором
опишем конкретные правила нашей игры.
Отчёт отправил: 11353. AlliZzeN Выполнено за 1 час. 35 мин. [Показать отчёт]
Научился: Ничему нового. Сделал как на первый взгляд сделал реализацию функций FindNewLeader( ) и SetNewLeader( ), но кажется что-то не так. Посмотрим в следующем уроке. 
26 Интерфейс. Алгоритм игры. 00:07:48
122 чел. ★ 4.9 Done
  На этом уроке мы допишем класс GameCatch.
Напишем реализацию методов FindNewLeader() и SetNewLeader().
Ваша задача - подумать и написать, что нужно ещё сделать,
чтобы можно было начать играть в эту игру.
Отчёт отправил: 11353. AlliZzeN Выполнено за 3 час. 16 мин. [Показать отчёт]
Научился: Научился работать с интерфейсом. Наверное нужно добавить textbox и label на форму, ну еще пару кнопочек для прокрутки колеса. 
Сложности: Пока ничего. Но нужно еще пройтись по данной теме с интерфейсами. 
27 Интерфейс. Создаём кружок. 00:08:36
120 чел. ★ 4.9 Done
  На этом уроке мы создадим объект для нашей игры - Кружок!
У кружочка есть координаты центра, радиус и цвет.
Цель урока - создать класс Circle.cs
Отчёт отправил: 11353. AlliZzeN Выполнено за 20 мин. [Показать отчёт]
Научился: Создали класс с конструктором. Только у меня замечание. Свойства же принято писать с большой буквы?  
Сложности: Easy 
28 Интерфейс. Площадка для игры. 00:11:58
1 тест
119 чел. ★ 5 Done
  На этом уроке мы начнём создавать класс Arena,
который создаст поле для игры и реализует
методы для отображения объектов на экране.
Отчёт отправил: 11353. AlliZzeN Выполнено за 58 мин. [Показать отчёт]
Научился: Как я понял, класс Arena нужен для отображения наших красных кружков на форме. 
Сложности: - 
29 Интерфейс. Кружок на площадке. 00:11:49
1 тест
118 чел. ★ 4.9 Done
  На этом уроке мы допишем класс Arena,
реализуем методы Show(Circle), Refresh(), static NewCircle().
Всё готово к созданию кода для отображения кружка из класса Form1.cs!

Отчёт отправил: 11353. AlliZzeN Выполнено за 10 час. 36 мин. [Показать отчёт]
Научился: Реализовал все методы урока + попробовал запустить отображение кружков на форме. Сегодня повторял тему Делегаты, поэтому сделал метод Show через делегат. Думаю, что нет необходимости использование делегата в таком ключе. В комментарии работает метод и без делегата. Правда кружки не похожи на ровный круг. 
Сложности: Сложностей не было. 
30 Интерфейс. Запускаем кружки на площадку! 00:11:49
3 теста
118 чел. ★ 5 Done
  На этом уроке мы настроим нашу форму,
напишем несколько волшебных строчек,
и ... программа заработает!!!
У нас будет много-много кружков на экране 8-о

Отчёт отправил: 11353. AlliZzeN Выполнено за 23 час. 12 мин. [Показать отчёт]
Научился: Научился отображать рандомно окружности. Так же вспомнил в каком-то из уроков тест на заливку окружности, решил воплотить + сделал чуть толще толщину пера. С интерфейсов разобрался. Прочитал дополнительную литературу. Была ошибка, забыл указать в классе Circle значение у радиуса. Поэтому в методе graph.DrawEllipse(pen, circle.Centr.X - circle.Radius, circle.Centr.Y - circle.Radius,  2 * circle.Radius, 2 * circle.Radius); ничего не отображалось. 
Сложности: Ничего сложного 
31 Интерфейс. Кружок хочет играть. 00:09:42
2 теста
117 чел. ★ 4.9 Done
  На этом уроке мы унаследуем кружок от интерфейса Игрок.
Теперь для запуска программы нам придётся реализовать
методы из его интерфейса.
В этом уроке мы реализуем методы Голя() и НеГоля().
Отчёт отправил: 11353. AlliZzeN Выполнено за 3 дня 6 час. 47 мин. [Показать отчёт]
Научился: Я понял, что Интерфейсы реализуются, оно и понятно, потому что в них хранятся методы, в отличие от классов. Поэтому не правильно говорить Интерфейсы наследуются.  В методе Поймал необходимо определить пересекаются ли окружности, вроде бы несложно, знать необходимо центр окружности и радиус, вернуть значение true. Если истина- то передать Голя новой окружности, если ложь - двигаться далее. Вот как реализовать в коде пока не придумал, со школы не люблю геометрию:) 
Сложности: Вроде ничего сложного при работе с интерфейсов не возникло. 
32 Интерфейс. Кружок готов к игре! 00:20:47
1 тест
116 чел. ★ 5 Done
  На этом уроке мы допишем методы Игрока в классе Circle.
Реализуем метод Беги() и Поймал(), и даже исправим
недочёты в описании интерфейса (!!).
В конце урока я ответил на многочисленные вопросы участников.
Отчёт отправил: 11353. AlliZzeN Выполнено за 46 мин. [Показать отчёт]
Научился: Как в школе. Когда учитель объясняет ,вроде бы всё понятно. А как сам решаешь, так затупки небольшие) Правильно думал про реализацию методом на прошлом уроке. Всё стало понятно и логично. 
Сложности: Легко, не считая работу с координатами, пришлось посидеть порисовать на листочке для большего понимания. 
33 Интерфейс. Кружочки гоняются друг за другом. 00:11:53
1 тест
115 чел. ★ 5 Done
  На этом уроке мы добавим в форму класс GameCatch,
Разместим таймер и наконец-таки запустим нашу игру -
Шарики начнут гоняться друг за другом!
Отчёт отправил: 11353. AlliZzeN Выполнено за 3 час. 21 мин. [Показать отчёт]
Научился: Были некоторые ошибки с методом Move(), ошибку устранил. ----------------Написать словами, как исправить недочет с переголением.---------------- Думаю, что алгоритм такой: 1. Запоминаем индекс игрока-лидера. 2. При установке нового лидера проверяем, совпадает ли индекс пойманного игрока с предыдущем игроком-лидером. 3. Если совпадаем - Ищем дальше лидера. 
Сложности: На первый взгляд ничего сложного. Нужно спокойно в выходной день посидеть всё пересмотреть. 
Видеообзор: rJqPtFsflJY
34 Интерфейс. Изменяем правила игры. 00:10:22
1 тест
113 чел. ★ 5 Done
  На этом уроке мы добавим в правила игры задержку
после получения Голи. Ведущий будет считать до 10,
и только потом сможет голить других.
Твоя задача - придумать новую игру, в которую
смогут играть Игроки, то есть объекты, которые
умеют делать то, что описано в интерфейсе Игрок.
Отчёт отправил: 11353. AlliZzeN Выполнено за 3 час. 22 мин. [Показать отчёт]
Научился: Сделал из дополнительного функционала: Голя при поимке обычного кружка исчезает. В итоге остается один кружок. Хотел ещё сделать, чтобы кружки при соприкосновении отталкивались, но пока что не придумал как сделать. 
Сложности: Ничего сложного. 
Видеообзор: 9rVVur7giP0
35 Интерфейс. Создаём новую игру. 00:12:31
111 чел. ★ 4.9 Done
  На этом уроке мы начнём делать новую игру - Вирус.
Смысл игры подробно рассказан на видео.
Цель урока - создать класс GameVirus и
реализовать методы GameViurs(), AddGamer(), Step(), RunAll().
Также придумать и написать словами алгоритм
методов SetNewVirus(Игрок) и FindNewVirus().
Отчёт отправил: 11353. AlliZzeN Выполнено за 5 час. 7 мин. [Показать отчёт]
Научился: Вроде правила понял, но кажется не до конца(один момент есть). Новый вступивший игрок является Вирусом, далее он ловит остальных и заражает вирусом. Когда остается один игрок, то все вирусы удаляются и он становится новым вирусом, и всё по новой. Получается Игра бесконечная будет? 
Сложности: Реализация двух методов.  На словах понял, но на практике не уверен. 
36 Интерфейс. ФИНАЛЬНЫЙ УРОК. 00:13:05
106 чел. ★ 5 Done
  На этом уроке мы допишем последние две функции
и надолго залипнем в экран, наблюдая за новой
игрой для наших кружков, как вирусная эстафета
может быстро передаваться, особенно, когда
игроков очень много.
В комментариях написать свой отзыв об этой серии уроков.

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

Какой курс ты будешь проходить следующим?
Отчёт отправил: 11353. AlliZzeN Выполнено за 57 мин. [Показать отчёт]
Научился: Хороший курс, постоянное использование интерфейсов. Так же хорошо суть интерфейса в уроках, когда пишем вторую игру - "Virused". Изменений мало, но уже совсем другая игра. Выбрал вариант без застывания "зараженных". Следующий курс еще не выбрал. Осталось несколько уроков пройти в курсе ООП. 
Сложности: Самостоятельная работа по реализации методов) Но думаю, было бы больше времени, то что-нибудь придумал бы. Направление было верное. 
Видеообзор: 7vbY-zGRplA
37 Интерфейс. VIP. Квадратики тоже хотят играть. 00:16:23
98 чел. ★ 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
Отчёт отправил: 11353. AlliZzeN Выполнено за 2 час. 57 мин. [Показать отчёт]
Научился: Научился использовать интерфейс. То ли привык к окружностям, но мне кажется прямоугольники смотрятся более красивыми. 
Сложности: Ничего сложного. Только у меня Голя не двигался, пришлось смотреть/вспоминать где функция за это отвечает. Даже немного пришлось просмотреть прошлый урок и вспомнить. 
38 Интерфейс. VIP. Пересечение прямоугольников. 00:09:47
95 чел. ★ 5 Done
  На этом уроке мы допишем метод Box.Поймал()
и запустим игру с квадратиками.
Потом попробуем подружить квадратики с кружками,
увидим, что это не так просто, да собственно и не нужно.
Но возможно.
Отчёт отправил: 11353. AlliZzeN Выполнено за 45 мин. [Показать отчёт]
Научился: Хороший курс. Понравился очень. Есть возможность сделать, чтобы при передачи Голи, старый Голя удалялся. 
Сложности: Ничего сложного. 
Видеообзор: XA70rTNGrYw
39 Интерфейс. VIP. Тяжёлая дружба кругов и квадратов. 00:22:25
84 чел. ★ 5 Done
  На этом уроке мы создалим "универсальный" класс Crosser,
который сможет проверять на столкновение "любых" двух Игроков.
Конечно не любых, а только двух наших Box и Circle.
Это яркий способ, чего стоит избегать в программах.
Потому что тут не добавляется универсальности,
т.к. при добавлении новых объектов придётся
дописывать кучу новых функций на сравнение.

Самостоятельное задание - записать видеообзор
своего проекта и рассказать, что такое Interface.
Отчёт отправил: 11353. AlliZzeN Выполнено за 14 час. 16 мин. [Показать отчёт]
Научился: Научился работать с двумя разными объектами, а именно определять их пересечение. Правда код класса Crosser на вид какой то "топорный" что-ли, не профессиональный, но работает. Для ознакомления как делать не надо пойдет. Кажется я понял суть интерфейса. Это обучить разные объекты каким-то одним действиям. Не одной функцией, а одной областью, скажем так. Например: - Можно обучить функцией Стрелять разные виды оружия(пистолет, автомат, винтовка, палка); - Настройка яркости(электронная свеча, лампочка, гирлянда); - Управление автомобилем(легковой автомобиль, грузовой автомобиль, автобус, электрокар); 
Сложности: - 
Видеообзор: wfZRbD7r9r8
  Итого:   39 видеоуроков 7 час. 40 мин.
36 тестов
83 чел. ★ 4.94  
  Финалисты:   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,   Булат,   Tim,   Tom,   Антон .

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





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

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

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

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


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


Научился: менять правила игры
Трудности: Функции private void SetNewVirus(iIgrok gamer) и private void FindNewVirus() оказались достаточно развернутыми.
Спасибо! Очень интересно было все это делать. Теперь надо все закреплять и повторять. И попробовать использовать интерфейс для своей какой-нибудь задачи