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

Формула программиста
основатель — Волосатов Евгений Витольдович
1-2-3 мая - Создай online игру!
У вас нет доступа для просмотра этой записи.

Получить доступ

Теория ООП

Практический курс по теории Объектно-ориентированного программирования.
С нуля создаётся проект по рисованию различных геометрических фигур,
которые потом объединяются в спрайты, взаимодействуют друг с другом.

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

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

Объём: 39 коротких видеоуроков
Время: 7 часов 40 минут.
Доступ на 30 дней.

Хочу купить!

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

Цена: 1,200 p.


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

# Название видеоурока Решило Рейтинг Доступ
1 Инкапсуляция мечты 00:09:02 157 чел. ★ 4.8 Done
  Курс по теории Объектно-ориентированного программирования.
С нуля создаётся проект по рисованию различных геометрических фигур,
которые потом объединяются в спрайты, взаимодействуют друг с другом.

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

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

Выдержка из отчёта Ларисы по завершению курса.
1) Получила представление о методах ООП - инкапсуляции, полиморфизме и наследовании.
Эти три "кита" позволяют изменять и усложнять программы, добавляя в них новые возможности;
2) Научилась рисовать простые геометрические фигуры;
3) Создавать базовые и производные классы;
4) Создавать структуры и работать с пикселями;
5) Создавать фигуры из массива простых фигур в том числе и в цвете;
6) Передвигать простую фигуру;
7) Создавать класс объектов Sprite, являющийся производным от базового абстрактого класса Shape,
а в нем список List, который содержит произвольное число фигур и функцию, которая добавляет фигуру,
а также метод Move, который двигает её;
8) Освоила BreakPoint, который дает возможность проследить переходы в классе и связи между классами;
9) Познакомилась с абстрактыми и виртуальными методами в абстрактном базовом классе и методами override в производных классах. Совокупность этмх методов позволяет передвигать сложные фигуры как целое.
Отчёт отправил: 2773. Никита Выполнено за 15 мин. [Показать отчёт]
Научился: Узнал про понятие инкапсуляция. 
Сложности: Ничего сложного. 
Комментарии: Инкапсуляция (как я понял) - это сокрытие чего-либо, название происходит от слова "капсула". То есть мы не видим внутреннюю реализацию, а можем воздействовать на объект непосредственно через видимый интерфейс. 
2 Урок рисования 00:08:10 134 чел. ★ 4.9 Done
  На этом уроке мы нарисуем домик из двух линий и прямоугольника.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Все это уже известно, лишь освежил знания. 
Сложности: Ничего сложного. Немного поштриховал прямоугольник)) Только не знаю, как аналогичное действие сделать с крышей дома( 
Комментарии: Все отлично и понятно.  
3 Первый класс 00:09:53 125 чел. ★ 4.9 Done
  На этом уроке мы создадим первый класс - Line.
И перепишем программу, чтобы она работала точно так же.
Отчёт отправил: 2773. Никита Выполнено за 15 мин. [Показать отчёт]
Научился: Пока что ничего нового для меня нету. Все ясно и понятно. 
Сложности: Ничего сложного. 
Комментарии: Хороший видеоурок с подробным объяснением каждого шага. Я посмотрел несколько видеоуроков из раздела "Спрайты", так вот там тоже самое делается (создается отдельный класс для линии, передается массив линий и выводится), но еще было использование структуры (в "Спрайтах"). 
4 Второй класс 00:09:13 120 чел. ★ 4.9 Done
  На этом уроке мы создадим второй вспомогательный класс - Box.
Порассуждаем на тему "наследования" и переделаем программу.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Пока что ничего нового, но интересно) 
Сложности: Ничего сложного. 
Комментарии: Получается, что мы определили методы Draw с разной сигнатурой (имя метода и список его параметров). Мне кажется, что в конструкторе класса Box при определении ширины и высоты прямоугольника можно было не использовать ключевое слово this (то есть, можно сделать как на видео, а можно и без "this"). Хорошо, что начали, так сказать, с азов, чтобы все было понятно: что, зачем и почему) 
5 Круглый класс 00:08:10 118 чел. ★ 4.9 Done
  Создадим класс для задания окружности - Circle.
Дополним окружность в центре домика.
Отчёт отправил: 2773. Никита Выполнено за 10 мин. [Показать отчёт]
Научился: Пока все известно. 
Сложности: Ничего сложного. 
Комментарии: Получилась вписанная окружность) Конечно можно и не запоминать, какие пространства имен (using'и) нужны для того или иного метода/свойства или чего-либо, достаточно нажать "Alt+Enter" и C# сама предложит из списка выбрать нужный using (или сама даже подключит) (так, к слову) ))). 
6 Структура пикселя 00:10:55 108 чел. ★ 5 Done
  Создадим структуру для задания координат пикселя
и перепишем классы и программу с её использованием.
Почитать об отличии класса от структуры:
http://www.cyberforum.ru/csharp-beginners/thread442631.html
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Пока что ничего нового, но так, с точками, гораздо интереснее получается. 
Сложности: Ничего сложного. Главное правильно вычислить координаты точек. 
Комментарии: Все понятно и хорошо объяснено. Структура - это хорошо) 
7 Структура vs Класс 00:25:05 100 чел. ★ 4.9 Done
  На этом дополнительном уроке наглядно демонстрируются главные отличия между struct и class в языке C#.
Отчёт отправил: 2773. Никита Выполнено за 35 мин. [Показать отчёт]
Научился: Узнал отличия структуры от класса. Узнал, что DateTime - это структура, а не класс. 
Сложности: Главное, разобраться в материале. Структура копирует значения переменных, а в классе содержатся ссылки на значения переменных. 
Комментарии: Все понятно и подробно разъяснено. Было бы неплохо, познакомиться еще с интерфейсами. Если у Вас, Евгений Витольдович, будем время - запишите, пожалуйста, урок про интерфейсы. 
8 Пиксели для классов 00:14:44 98 чел. ★ 4.9 Done
  На этом уроке мы продолжим внедрение структуры Pixel в наши классы.
Будем её использовать для хранения координат внутри класса.
Также избавимся от повторяемого кода внутри конструкторов.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Наследовать конструкторы. 
Сложности: Вроде все ясно. 
Комментарии: Все нормально. 
9 Расстояние между пикселями 00:12:12 97 чел. ★ 4.9 Done
  Как вычислить расстояние между двумя пикселями?
Есть специальная формула, которую можно разместить в структуру Pixel.
Теперь мы сможем создать ещё один конструктор окружности по центру и любой точке на окружности.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Продолжаю исследовать возможности структуры. Для меня новое, что в структуре можно описывать методы и их потов вызывать. Очень полезная вещь на мой взгляд. 
Сложности: Ничего сложного, пока все понятно. 
Комментарии: Все понятно и подробно объяснено. 
10 Цветные карандаши 00:14:54 95 чел. ★ 4.9 Done
  Возьмём цветные карандаши и будем раскрашивать наш домик.
Создаём новые классы для цветны линий, окружностей и прямоугольников.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Интересно уже получается, программа все веселей и веселей. Цветные фигуры смотрятся куда лучше однообразных серых.  
Сложности: Ничего сложного, все понятно. 
Комментарии: Теперь интересно как же можно упростить нашу программу, так как кода становится все больше и больше и разобраться в нем становится все сложнее и сложнее. 
11 Рисуем Снеговика 00:14:40 94 чел. ★ 4.9 Done
  На этом уроке мы создадим ... Снеговика (спрайт) —
более сложную фигуру, которая состоит из других фигур.
В дальнейшем мы будем работать с такими спрайтами,
перемещать их, поворачивать, масштабировать,
а пока ... мы просто нарисуем Снеговика.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Рисовать объекты с помощью графических примитивов. 
Сложности: Ничего сложного. 
Комментарии: Оказывается как просто рисовать объекты, когда уже все готово (у нас есть и линия, и окружность, и прямоугольник). Задаем координаты точки и вперед, рисуем, что придумает наше воображение)) p.s. Я пока оставил снеговика, а потом уже создам свой рисунок. 
12 Второй Снеговик 00:09:46 94 чел. ★ 4.9 Done
  На этом уроке мы создадим второй спрайт -
ещё одного снеговика, но разноцветного.

Вопрос для перехода к следующему уроку:
Что нужно изменить в этой программе, чтобы мы могли
а) перемещать снеговика;
б) поворачивать снеговика;
в) изменять размер снеговика.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Рисовать цветные графические примитивы) 
Сложности: Ничего сложного. 
Комментарии: 1) Для перемещения снеговика необходимо ввести дополнительную переменную, допустим как мы и сделали (переменная delta), которую мы будем прибавлять к одной из координат каждой точки. На форме можно сделать, к примеру, ползунок для изменения этой delta. 2) Для поворачивания снеговика, как мне кажется, нужно ввести еще одну переменную - третью ось Z и с ней как-то уж работать. 3) Для изменения размера снеговика нужно ввести переменную k - коэффициент растяжения/сжатия, изменяя который мы будем изменять размеры снеговика. То есть домножать на этот коэффициент каждую из координат. На форме, к примеру, можно задавать этот коэффициент, вводя его в текстовое поле. Вот так, на мой взгляд, можно все это реализовать.  
13 Богатое наследство 00:12:53 93 чел. ★ 4.9 Done
  Наконец-таки мы возьмёмся за наследование.
Убираем повторяющийся код из цветных классов.
Осмысливаем значение термина «наследование».
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Познакомился с наследованием. 
Сложности: Ничего вроде сложного нет, главное - понимать, что откуда берется и куда передается. 
Комментарии: Наследование - это перенесение всех свойств (методов, полей и т.п.) родительского класса на дочерний с добавлением чего-то нового в дочерний. К примеру, если у нас есть 2 класса: класс "Человек" и класс "Студент", то базовым (родительским) классом будет являться класс "Человек", а его наследником - класс "Студент", так как студент - это же человек, но у него будет что-то свое ( к примеру, номер зачетной книжки, оценки за сессию). Это все нужно для того, чтобы не было дублирующегося кода. 
14 Фигуральный базовый класс 00:10:56 92 чел. ★ 4.9 Done
  Очень хочется все элементы снеговика поместить в один массив.
Сейчас это сделать нельзя - придётся делать три массива - для кругов, для линий, для боксиков...
Решение гениальное - создаём базовый класс фигуры - Shape, создаём массив фигур, и все фигуры помещаем в этот массив!
После размещения фигур в массив можно видеть, что каждая фигура в нём хранится не как фигура, а под своим типом.
А все под одной крышей они могут находится потому что все они - фигуры, так как унаследованы от Shape.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Пока что ничего нового, но думаю, с следующем уроке будет очень интересно. 
Сложности: Ничего сложного 
Комментарии: Как мне кажется, для того, чтобы выводить снеговика в целом (класс Shape), нужно определить из каких фигур он состоит и в зависимости от этого вызывать ту или иную функцию (для рисования линии, прямоугольника, окружности). Но вот как это реализовать я не знаю( Поэтому с нетерпением перехожу к следующему уроку) 
15 Рисователь снеговиков 00:11:51 92 чел. ★ 4.9 Done
  На этом уроке мы реализуем метод Draw (Shape shape) через серию условных операторов.
А также создадим функцию для рисования целевого спрайта (снеговика) - Draw (Shape [] shapes).
Результат работы программы не изменяется, а вот содержимое кода всё более и более облагораживается.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Познакомился с методом GetType. Интересно еще то, что для вызова метода рисования нужной фигуры (например, окружности), нужно использовать явное приведение типов. 
Сложности: Ничего сложного 
Комментарии: Оказывается не так сложно было реализовать функцию Draw для рисования фигуры. С методом GetType() я был знаком (знаю, что такой есть), но синтаксис не очень хорошо знаю. Очень часто применяется этот метод (GetType), когда работает с элементами на форме, то есть когда нам нужно выполнить одинаковое действие для всех элементов на форме (панели, picturebox'е или еще где-нибудь). Переменная position, объявленная в классе Shape, понадобится нам для дальнейшей работы. С помощью нее мы сможем перемещать фигуру, изменять ее размеры и поворачивать (изменяя угол поворота). 
16 Переезд метода Draw 00:11:54 91 чел. ★ 4.9 Done
  На этом уроке мы начнём переносить функции для рисования фигур из основной программы в классы.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Дальнейшему упрощению кода программы. 
Сложности: Ничего сложного 
Комментарии: Очень интересно и увлекательно) 
17 Переезд graph в базовый класс 00:13:10 91 чел. ★ 4.9 Done
  На этом уроке мы напишем функции для рисования фигур во всех остальных классах.
Отчёт отправил: 2773. Никита Выполнено за 25 мин. [Показать отчёт]
Научился: Постигаю мощь наследования. Очень удобная вещь оказывается)) 
Сложности: Ничего сложного, главное - правильно выстроить логику. 
Комментарии: Кода становится все меньше и меньше, разбираться в программе проще. Очень доволен видеоуроком. 
18 Мощь полиморфизма 00:09:01 88 чел. ★ 5 Done
  На этом уроке мы создадим в базовом классе функцию Draw(),
и при её вызове через механизм полиморфизма будет запускаться созвучный метод нужного класса.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Полиморфизм это конечно мощь) Узнал про абстрактный класс и использование ключевого слова override для расширения абстрактной реализации унаследованного метода. 
Сложности: Вроде ничего сложного. Все понятно. 
Комментарии: Хотелось бы конечно поподробнее немного узнать об override и virtual. Разница, когда вызывать и т.п. Это пожелание) Хотя обо всем этом можно прочитать в учебнике, так что так даже лучше (мне это стало интересно, пошел прочитал и разобрался) )) 
19 Спрайт для Снеговика 00:12:28 88 чел. ★ 5 Done
  На этом уроке мы создадим новый класс - Sprite, в котором будет хранится список всех фигур, из  которых строится графический объект, чтобы в основной программе мы могли оперировать сразу спрайтами, а не их составными элементами.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Продолжаю постигать мощь полиморфизма и наследования. 
Сложности: Ничего сложного, кода становится все меньше и меньше и это не может не радовать) 
Комментарии: Все отлично и понятно. 
20 Перемещение круга 00:11:42 87 чел. ★ 4.9 Done
  На этом уроке мы начнём реализовывать идею перемещения спрайтов.
Начнём, как обычно, с простого. Научимся перемещать один кружок.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Перемещению фигуры - кружка. 
Сложности: Главное - разобраться) Чтобы все правильно работало. 
Комментарии: Как я понял: то есть мы создаем кружок с начальными координатами (в данном случае с координатами 0;0), потом его перемещаем в новые координаты относительно начальных (circle.Move(new Pixel(100,100))) и потом снова идет перемещение кружка в новую позицию вновь от начальных координат (так как они инициализируются в конструкторе при создании кружка), верно? 
21 Перемещение других фигур 00:08:37 86 чел. ★ 4.9 Done
  На этом уроке мы переделаем метод Draw() для остальных фигур - Line и Box().
Наша программа теперь по нажатию кнопочки будет перемещать сразу три фигурки.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Рисовать фигуры с помощью графических примитивов) 
Сложности: Ничего сложного) 
Комментарии: Все отлично и понятно) 
22 Перемещение Снеговиков 00:10:48 85 чел. ★ 4.9 Done
  На этом уроке мы научим перемещаться целых снеговиков.
Для этого нам не нужно будет менять метод Draw(),
мы воспользуемся полиморфизмом!
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Научился перемещать снеговиков) 
Сложности: Ничего сложного, все понятно с перемещением. 
Комментарии: Отличный видеоурок, все понято) 
23 ПОЛУФИНАЛЬНЫЙ УРОК. 78 чел. ★ 4.9 Done
  На этом первая часть видеокурса "Теория ООП" закончилась.
Пожалуйста, напиши отзыв об этом курсе,
что тебе понравилось, что узнал нового,
что можно было бы сделать лучше,
оправдал ли курс твои ожидания.

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

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

Правила игры, для тех, кто не знает:
Выбирается ведущий.
Его цель - догнать и дотронуться до кого-либо из участников.
Цель остальных - не допустить этого.
Когда ведущий дотронется до кого-либо (заголит) - ведущим становится новый участник.
Отчёт отправил: 2773. Никита Выполнено за 10 мин. [Показать отчёт]
Научился: Создавать интерфейсы. 
Сложности: Ничего сложного. 
Комментарии: Я поставил еще перед названием интерфейса букву "I", чтобы было понятно, что это интерфейс. Интерфейс, в моем недалеком понимании, это набор абстрактных членов, то есть в нем будут храниться только названия методов, без тела. 
25 Интерфейс. Правила игры. 00:12:23 75 чел. ★ 5 Done
  На этом уроке мы поговорим о правилах игры в догоняшки.
На прошлом уроке мы выясняли, что должны уметь делать игроки.
На этом уроке мы начнём писать класс, в котором
опишем конкретные правила нашей игры.
Отчёт отправил: 2773. Никита Выполнено за 15 мин. [Показать отчёт]
Научился: Работать с интерфейсом через классы. 
Сложности: Ничего сложного. 
Комментарии: Метод FindNewLeader(): делаем поиск по всем игрокам и если он Голя, то он лидер. Метод SetNewLeader(): если игрок поймал другого игрока, то он - Голя. Не знаю, насколько верно, увидим в следующем уроке) Действительно, у нас такой классный уровень абстракции (считай все своими именами названо, удобно очень работать) )) 
26 Интерфейс. Алгоритм игры. 00:07:48 75 чел. ★ 5 Done
  На этом уроке мы допишем класс GameCatch.
Напишем реализацию методов FindNewLeader() и SetNewLeader().
Ваша задача - подумать и написать, что нужно ещё сделать,
чтобы можно было начать играть в эту игру.
Отчёт отправил: 2773. Никита Выполнено за 15 мин. [Показать отчёт]
Научился: Реализовывать алгоритм игры) 
Сложности: В принципе ничего сложного 
Комментарии: А в методе FindNewLeader() мы добавили в конце цикла foreach оператор break (return), для того, чтобы, к примеру, если лидер поймал игрока5, а у нас в команде 20 игроков, чтобы по всех не проверять, поэтому добавили break? Не знаю, понятно ли расписал вопрос)) 
27 Интерфейс. Создаём кружок. 00:08:36 73 чел. ★ 5 Done
  На этом уроке мы создадим объект для нашей игры - Кружок!
У кружочка есть координаты центра, радиус и цвет.
Цель урока - создать класс Circle.cs
Отчёт отправил: 2773. Никита Выполнено за 15 мин. [Показать отчёт]
Научился: Создавать класс "Кружок")) 
Сложности: Ничего сложного 
Комментарии: Дальше, по моему мнению, создать игроков - кружочки. Вывести кружочки на экран и сделать их передвижение (например, по таймеру). p.s. Кто-то (ник proger) писал на вебинаре, что можно убрать private set в свойствах, у меня стоит ReSharper, он не подсказывает, что так можно сделать. Так что думаю, наверное, правильнее оставить (могу ошибаться, я не знаком со свойствами). А вот в классе GameCatch Resharper у списка gamers показывает, что private set убрать можно) Я так и сделал.  
28 Интерфейс. Площадка для игры. 00:11:58 72 чел. ★ 5 Done
  На этом уроке мы начнём создавать класс Arena,
который создаст поле для игры и реализует
методы для отображения объектов на экране.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Освежил знания  
Сложности: Ничего сложного. 
Комментарии: Данный класс нужен нам для отображения всех "кружочков" на поле и для очистки поля. То есть, арена демонстрирует нам игроков, которые сейчас играю в игру Голя. Также игроков этих можно шугнуть, громко свистнув (метод Clear()) :) 
29 Интерфейс. Кружок на площадке. 00:11:49 71 чел. ★ 5 Done
  На этом уроке мы допишем класс Arena,
реализуем методы Show(Circle), Refresh(), static NewCircle().
Всё готово к созданию кода для отображения кружка из класса Form1.cs!

Отчёт отправил: 2773. Никита Выполнено за 15 мин. [Показать отчёт]
Научился: Довел до ума класс Арена) 
Сложности: Ничего сложного, все просто) 
Комментарии: Все отлично, легко и понятно!) 
30 Интерфейс. Запускаем кружки на площадку! 00:11:49 70 чел. ★ 5 Done
  На этом уроке мы настроим нашу форму,
напишем несколько волшебных строчек,
и ... программа заработает!!!
У нас будет много-много кружков на экране 8-о

Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Рисовать кружки на арене:) 
Сложности: Ничего сложного) 
Комментарии: Все очень круто) Забавно получается) Как пузырьки) Воспользовался советом Максима Базуева и сделал сглаживание (SmoothingMode.AntiAlias). Кружки выглядят покрасивее) 
31 Интерфейс. Кружок хочет играть. 00:09:42 70 чел. ★ 4.9 Done
  На этом уроке мы унаследуем кружок от интерфейса Игрок.
Теперь для запуска программы нам придётся реализовать
методы из его интерфейса.
В этом уроке мы реализуем методы Голя() и НеГоля().
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Реализовывать интерфейсы) 
Сложности: Ничего сложного 
Комментарии: Уже с интерфейсами становится понятнее и понятнее) Как я понимаю в методе Беги() нам нужно будет сделать движение кружка по таймеру в хаотичном порядке, причем, если шарик достиг конца поля, то он должен оттолкнуться (развернуться) от него и побежать в другую сторону. Что касается метода Поймал(), то Евгений Витольдович дал очень хорошую подсказку, введя переменные sx и sy - смещение относительно координаты x и y соответственно. Мы будем определять поймал ли Голя игрока или нет по тому, если шарик-голя коснулся (налетел) на шарика-неГолю. Для этого нам и понадобится смещение (к примеру, если расстояние между шариками будет меньше, чем 5 пикселов, то шарик пойман, иначе - нет.). Это мое видение реализации этих методов, а прав ли я или нет, увидим в следующем уроке)  
32 Интерфейс. Кружок готов к игре! 00:20:47 69 чел. ★ 5 Done
  На этом уроке мы допишем методы Игрока в классе Circle.
Реализуем метод Беги() и Поймал(), и даже исправим
недочёты в описании интерфейса (!!).
В конце урока я ответил на многочисленные вопросы участников.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Очень интересно было послушать ответы на вопросы участников вебинара, чтобы получше разобраться) 
Сложности: В принципе все понятно) 
Комментарии: Для запуска игры нам нужен таймер. Как раз при его запуске кружки начнут перемещаться. Далее в этом (timer.Tick) методе (скорее всего так будет) будем вызывать функции, которые писали на этом уроке) 
33 Интерфейс. Кружочки гоняются друг за другом. 00:11:53 69 чел. ★ 5 Done
  На этом уроке мы добавим в форму класс GameCatch,
Разместим таймер и наконец-таки запустим нашу игру -
Шарики начнут гоняться друг за другом!
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Запускать шарики)) 
Сложности: Ничего сложного) Все классно) 
Комментарии: Отличный видеоурок) Ура! Наконец-то кружки "начали играть!") Я думаю, чтобы исправить недочет с переголением, нужно добавить какое-нибудь условие (мол, если ты меня поймал, то дай мне время убежать). 
34 Интерфейс. Изменяем правила игры. 00:10:22 68 чел. ★ 5 Done
  На этом уроке мы добавим в правила игры задержку
после получения Голи. Ведущий будет считать до 10,
и только потом сможет голить других.
Твоя задача - придумать новую игру, в которую
смогут играть Игроки, то есть объекты, которые
умеют делать то, что описано в интерфейсе Игрок.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Отредактировали функцию с новым игроком, чтобы исправить недочет с переголением. 
Сложности: Ничего сложного, все понятно) 
Комментарии: На мой взгляд, можно организовать игру прятки. Игрок, который ищет - Голя (лидер). Он должен найти (заголить) других игроков. Можно также добавить условие дополнительное - мало того, что нужно найти игрока, нужно его поймать. И, допустим, кого первого поймали, тот и будет Голей в следующем раунде. По моему, неплохой вариант) 
35 Интерфейс. Создаём новую игру. 00:12:31 67 чел. ★ 5 Done
  На этом уроке мы начнём делать новую игру - Вирус.
Смысл игры подробно рассказан на видео.
Цель урока - создать класс GameVirus и
реализовать методы GameViurs(), AddGamer(), Step(), RunAll().
Также придумать и написать словами алгоритм
методов SetNewVirus(Игрок) и FindNewVirus().
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Понял, что имея интерфейс, можно написать практически любую игру) 
Сложности: Ничего сложного. Новые правила игры понял. 
Комментарии: В методе SetNewVirus(Игрок) мы будем делать так, если игрок еще не был заражен, а до него коснулись, то он становится переносчиком вируса (Голей). А в методе FindNewVirus() мы будем смотреть, если игрока поймали, то мы его добавляем в список вирусопереносчиков. 
36 Интерфейс. ФИНАЛЬНЫЙ УРОК. 00:13:05 63 чел. ★ 5 Done
  На этом уроке мы допишем последние две функции
и надолго залипнем в экран, наблюдая за новой
игрой для наших кружков, как вирусная эстафета
может быстро передаваться, особенно, когда
игроков очень много.
В комментариях написать свой отзыв об этой серии уроков.

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

Какой курс ты будешь проходить следующим?
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Создавать новые игры, используя интерфейс. 
Сложности: Ничего сложного. 
Комментарии: Мне очень понравилась игра!) Очень классно получилось) И что самое примечательное, что мы можем сами, как нам угодно менять правила игры) 
37 Интерфейс. VIP. Квадратики тоже хотят играть. 00:16:23 63 чел. ★ 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
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Просто и легко создавать класс Box. 
Сложности: Ничего сложного. 
Комментарии: Попробовал реализовать пересечение прямоугольников и как странно, но все получилось! Спасибо за ссылки, Евгений Витольдович, но в коде действительно имеются ошибки, поэтому сделал по-своему) 
38 Интерфейс. VIP. Пересечение прямоугольников. 00:09:47 60 чел. ★ 5 Done
  На этом уроке мы допишем метод Box.Поймал()
и запустим игру с квадратиками.
Потом попробуем подружить квадратики с кружками,
увидим, что это не так просто, да собственно и не нужно.
Но возможно.
Отчёт отправил: 2773. Никита Выполнено за 10 мин. [Показать отчёт]
Научился: Метод Cross я реализовал в прошлом уроке) 
Сложности: Ничего сложного) 
Комментарии: Все отлично! Шарики и боксики летают) 
39 Интерфейс. VIP. Тяжёлая дружба кругов и квадратов. 00:22:25 51 чел. ★ 5 Done
  На этом уроке мы создалим "универсальный" класс Crosser,
который сможет проверять на столкновение "любых" двух Игроков.
Конечно не любых, а только двух наших Box и Circle.
Это яркий способ, чего стоит избегать в программах.
Потому что тут не добавляется универсальности,
т.к. при добавлении новых объектов придётся
дописывать кучу новых функций на сравнение.

Самостоятельное задание - записать видеообзор
своего проекта и рассказать, что такое Interface.
Отчёт отправил: 2773. Никита Выполнено за 30 мин. [Показать отчёт]
Научился: Сумел подружить квадраты и кружки)) 
Сложности: Наверное, эта "дружба" фигур. 
Комментарии: Все очень понравилось! Отличный видеокурс!) Мало того, что более-менее пришло понимание интерфейса, так и еще можно визуально увидеть, что делаешь. Считаю это (наглядность) очень важным моментом) Конечно, количество со временем перейдет в качество! (потихоньку, используя интерфейсы буду все лучше и лучше разбираться что да как!) 
Видеообзор: https://youtu.be/l2N9xKZhPso
  Итого:   39 видеоуроков общей продолжительностью 7 час. 40 мин. 51 чел. ★ 4.95  
  Финалисты:   lomik,   Роман,   Максим Базуев,   Neverwinter 2,   Владимир,   Никита,   Олюшка,   Валера Луцевич,   Anton Sozykin,   Permitin Alexey,   Артём,   Максим Лапшинов,   Frank,   Archi,   Александр Львович,   Ильшат,   Олег Михайлович,   Дмитрий,   Новопашин Владимир,   Евгений,   Сергей Соколов,   Александр Б.,   Максим Саратов,   Алексей В.,   Александр,   Rita,   Станислав,   Алексей Хонин,   Ludmila,   Yefim,   Сергей Зулкарнаев,   Сергей Аникин,   Константин,   Tekashnik,   Артем Посунько,   Андрей Козлов,   kalobyte,   Sergio,   Алексей Малышев,   Александр,   Сергей Стефаненко,   Николай Денисов,   Анатолий,   Денис,   Алексей|BrisK|Кривицкий,   Скозложоп,   chokayes,   Иван Воронин,   Андрей Шевченко,   chip,   Rise .

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




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

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

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

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