Изучение 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 в производных классах. Совокупность этмх методов позволяет передвигать сложные фигуры как целое.
Отчёт отправил: 2773. Никита Выполнено за 15 мин. [Показать отчёт]
Научился: Узнал про понятие инкапсуляция. 
Сложности: Ничего сложного. 
Комментарии: Инкапсуляция (как я понял) - это сокрытие  чего-либо, название происходит от слова "капсула". То есть мы не видим внутреннюю реализацию, а можем воздействовать на объект непосредственно через видимый интерфейс. 
2 Урок рисования 00:08:10
2 теста
206 чел. ★ 4.9 Done
  На этом уроке мы нарисуем домик из двух линий и прямоугольника.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Все это уже известно, лишь освежил знания. 
Сложности: Ничего сложного. Немного поштриховал прямоугольник)) Только не знаю, как аналогичное действие сделать с крышей дома( 
Комментарии: Все отлично и понятно.  
3 Первый класс 00:09:53
2 теста
193 чел. ★ 4.8 Done
  На этом уроке мы создадим первый класс - Line.
И перепишем программу, чтобы она работала точно так же.
Отчёт отправил: 2773. Никита Выполнено за 15 мин. [Показать отчёт]
Научился: Пока что ничего нового для меня нету. Все ясно и понятно. 
Сложности: Ничего сложного. 
Комментарии: Хороший видеоурок с подробным объяснением каждого шага. Я посмотрел несколько видеоуроков из раздела "Спрайты", так вот там тоже самое делается (создается отдельный класс для линии, передается массив линий и выводится), но еще было использование структуры (в "Спрайтах"). 
4 Второй класс 00:09:13
185 чел. ★ 4.9 Done
  На этом уроке мы создадим второй вспомогательный класс - Box.
Порассуждаем на тему "наследования" и переделаем программу.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Пока что ничего нового, но интересно) 
Сложности: Ничего сложного. 
Комментарии: Получается, что мы определили методы Draw с разной сигнатурой (имя метода и список его параметров). Мне кажется, что в конструкторе класса Box при определении ширины и высоты прямоугольника можно было не использовать ключевое слово this (то есть, можно сделать как на видео, а можно и без "this"). Хорошо, что начали, так сказать, с азов, чтобы все было понятно: что, зачем и почему) 
5 Круглый класс 00:08:10
182 чел. ★ 4.9 Done
  Создадим класс для задания окружности - Circle.
Дополним окружность в центре домика.
Отчёт отправил: 2773. Никита Выполнено за 10 мин. [Показать отчёт]
Научился: Пока все известно. 
Сложности: Ничего сложного. 
Комментарии: Получилась вписанная окружность) Конечно можно и не запоминать, какие пространства имен (using'и) нужны для того или иного метода/свойства или чего-либо, достаточно нажать "Alt+Enter" и C# сама предложит из списка выбрать нужный using (или сама даже подключит) (так, к слову) ))). 
6 Структура пикселя 00:10:55
171 чел. ★ 4.9 Done
  Создадим структуру для задания координат пикселя
и перепишем классы и программу с её использованием.
Почитать об отличии класса от структуры:
http://www.cyberforum.ru/csharp-beginners/thread442631.html
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Пока что ничего нового, но так, с точками, гораздо интереснее получается. 
Сложности: Ничего сложного. Главное правильно вычислить координаты точек. 
Комментарии: Все понятно и хорошо объяснено. Структура - это хорошо) 
7 Структура vs Класс 00:25:05
1 тест
162 чел. ★ 4.9 Done
  На этом дополнительном уроке наглядно демонстрируются главные отличия между struct и class в языке C#.
Отчёт отправил: 2773. Никита Выполнено за 35 мин. [Показать отчёт]
Научился: Узнал отличия структуры от класса. Узнал, что DateTime - это структура, а не класс. 
Сложности: Главное, разобраться в материале. Структура копирует значения переменных, а в классе содержатся ссылки на значения переменных. 
Комментарии: Все понятно и подробно разъяснено. Было бы неплохо, познакомиться еще с интерфейсами. Если у Вас, Евгений Витольдович, будем время - запишите, пожалуйста, урок про интерфейсы. 
8 Пиксели для классов 00:14:44
2 теста
157 чел. ★ 4.9 Done
  На этом уроке мы продолжим внедрение структуры Pixel в наши классы.
Будем её использовать для хранения координат внутри класса.
Также избавимся от повторяемого кода внутри конструкторов.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Наследовать конструкторы. 
Сложности: Вроде все ясно. 
Комментарии: Все нормально. 
9 Расстояние между пикселями 00:12:12
2 теста
155 чел. ★ 4.9 Done
  Как вычислить расстояние между двумя пикселями?
Есть специальная формула, которую можно разместить в структуру Pixel.
Теперь мы сможем создать ещё один конструктор окружности по центру и любой точке на окружности.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Продолжаю исследовать возможности структуры. Для меня новое, что в структуре можно описывать методы и их потов вызывать. Очень полезная вещь на мой взгляд. 
Сложности: Ничего сложного, пока все понятно. 
Комментарии: Все понятно и подробно объяснено. 
10 Цветные карандаши 00:14:54
1 тест
152 чел. ★ 4.9 Done
  Возьмём цветные карандаши и будем раскрашивать наш домик.
Создаём новые классы для цветны линий, окружностей и прямоугольников.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Интересно уже получается, программа все веселей и веселей. Цветные фигуры смотрятся куда лучше однообразных серых.  
Сложности: Ничего сложного, все понятно. 
Комментарии: Теперь интересно как же можно упростить нашу программу, так как кода становится все больше и больше и разобраться в нем становится все сложнее и сложнее. 
11 Рисуем Снеговика 00:14:40
151 чел. ★ 4.9 Done
  На этом уроке мы создадим ... Снеговика (спрайт) —
более сложную фигуру, которая состоит из других фигур.
В дальнейшем мы будем работать с такими спрайтами,
перемещать их, поворачивать, масштабировать,
а пока ... мы просто нарисуем Снеговика.
Отчёт отправил: 2773. Никита Выполнено за 20 мин. [Показать отчёт]
Научился: Рисовать объекты с помощью графических примитивов. 
Сложности: Ничего сложного. 
Комментарии: Оказывается как просто рисовать объекты, когда уже все готово (у нас есть и линия, и окружность, и прямоугольник). Задаем координаты точки и вперед, рисуем, что придумает наше воображение)) p.s. Я пока оставил снеговика, а потом уже создам свой рисунок. 
12 Второй Снеговик 00:09:46
1 тест
151 чел. ★ 4.9 Done
  На этом уроке мы создадим второй спрайт -
ещё одного снеговика, но разноцветного.

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

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

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

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

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

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

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

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

Самостоятельное задание - записать видеообзор
своего проекта и рассказать, что такое Interface.
Отчёт отправил: 2773. Никита Выполнено за 30 мин. [Показать отчёт]
Научился: Сумел подружить квадраты и кружки)) 
Сложности: Наверное, эта "дружба" фигур. 
Комментарии: Все очень понравилось! Отличный видеокурс!) Мало того, что более-менее пришло понимание интерфейса, так и еще можно визуально увидеть, что делаешь. Считаю это (наглядность) очень важным моментом) Конечно, количество со временем перейдет в качество! (потихоньку, используя интерфейсы буду все лучше и лучше разбираться что да как!) 
Видеообзор: https://youtu.be/l2N9xKZhPso
  Итого:   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#.

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


Научился: Очень мощный курс. В данных уроках я познакомился с основными понятиями ООП (о чем так давно мечтал т.к знания были раздробленными и порой делал некоторые вещи не понимая как это устроено, а принимая как должное). На практике сумел закрепить полученные знания. Так же получил представление о работе с интерфейсами и способами их реализации. В рамках курса, как всегда в простой и игровой форме, создано много интересных занятий, где показан правильный и грамотный подход к реализации задач. Огромное спасибо Евгению за проделанную огромную работу. Снова хочу отметить (не раз это подчеркивал), что в уроках Евгения мало заумных слов и много дела. Все сложное превращается в какую то "большую игру"...Порой что то не понятно, но не беда, через несколько уроков начинает приходить понимание исполняемого))) Это важное отличие и делает данный ресурс и его автора привлекательными для людей стремящихся к изучению языков программирования самостоятельно. Следующими на очереди у меня 2 курса: «Базовый ASP.ект» и «Web API».
Трудности: Было очень интересно



Научился: Закрепил знания по работе со списками
Емкая и лаконичная серия уроков по основам ООП и интерфейсам. Со своей стороны рекомендовал бы проходить после выполнения других базовых курсов, чтобы были хотя бы базовые знания кода.