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

Вопрос для перехода к следующему уроку:
Что нужно изменить в этой программе, чтобы мы могли
а) перемещать снеговика;
б) поворачивать снеговика;
в) изменять размер снеговика.
Отчёт отправил: 7645. Александр Львович Выполнено за 30 мин. [Показать отчёт]
Научился: Научился создавать второй спрайт, состоящий из нескольких объектов.  
Сложности: Нетрудно.  
Комментарии: Большое спасибо! Замечаний нет. Чтобы перемещать снеговика, нужно менять переменную delta A = new Pixel(219 + delta1, 63 + delta2); Чтобы поворачивать снеговика, нужно задать центр поворота и каким-то образом определять расстояния от цента до каждой точки. Чтобы изменять размер снеговика, нужно добавить коэффициент A = new Pixel(219 * gamma, 63 * gamma);  
13 Богатое наследство 00:12:53
2 теста
150 чел. ★ 5 Done
  Наконец-таки мы возьмёмся за наследование.
Убираем повторяющийся код из цветных классов.
Осмысливаем значение термина «наследование».
Отчёт отправил: 7645. Александр Львович Выполнено за 30 мин. [Показать отчёт]
Научился: Научился создавать дочерний класс с учетом наследования от родительского класса. Наследование, своими словами, - это возможность использования свойств и методов родительского класса в дочернем классе.  
Сложности: Нетрудно.  
Комментарии: Большое спасибо! Замечаний нет.  
14 Фигуральный базовый класс 00:10:56
148 чел. ★ 5 Done
  Очень хочется все элементы снеговика поместить в один массив.
Сейчас это сделать нельзя - придётся делать три массива - для кругов, для линий, для боксиков...
Решение гениальное - создаём базовый класс фигуры - Shape, создаём массив фигур, и все фигуры помещаем в этот массив!
После размещения фигур в массив можно видеть, что каждая фигура в нём хранится не как фигура, а под своим типом.
А все под одной крышей они могут находится потому что все они - фигуры, так как унаследованы от Shape.
Отчёт отправил: 7645. Александр Львович Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Научился создавать базовый класс для всех фигур.  
Сложности: Написать функцию, которая будет рисовать картинки для базового класса. Долго думал. Получилось так:         private void Draw(Shape shape) // функция для рисования фигуры         {             if (shape.GetType().ToString() == "Geometry.Circle")                 Draw((Circle)shape);             if (shape.GetType().ToString() == "Geometry.Box")                 Draw((Box)shape);             if (shape.GetType().ToString() == "Geometry.Line")                 Draw((Line)shape);             if (shape.GetType().ToString() == "Geometry.ColorCircle")                 Draw((ColorCircle)shape);             if (shape.GetType().ToString() == "Geometry.ColorBox")                 Draw((ColorBox)shape);             if (shape.GetType().ToString() == "Geometry.ColorLine")                 Draw((ColorLine)shape);         }  
Комментарии: Большое спасибо! Замечаний нет.  
15 Приведение с мотором 00:11:51
1 тест
148 чел. ★ 4.9 Done
  На этом уроке мы реализуем метод Draw (Shape shape) через серию условных операторов.
А также создадим функцию для рисования целевого спрайта (снеговика) - Draw (Shape [] shapes).
Результат работы программы не изменяется, а вот содержимое кода всё более и более облагораживается.
Отчёт отправил: 7645. Александр Львович Выполнено за 40 мин. [Показать отчёт]
Научился: Научился работать с экземплярами базового класса и выводить их на экран.  
Сложности: Нетрудно. 
Комментарии: Большое спасибо! Замечаний нет. Переменная Shape.position создается для указания точки центра, от которого рассчитываются параметры группы фигур (спрайта) (думаю, что эта точка будет особенно нужна для моделирования поворота спрайта).  
16 Переезд метода Draw 00:11:54
146 чел. ★ 4.9 Done
  На этом уроке мы начнём переносить функции для рисования фигур из основной программы в классы.
Отчёт отправил: 7645. Александр Львович Выполнено за 40 мин. [Показать отчёт]
Научился: Научился пониманию полиморфизма, также научился совмещать данные и методы в одном классе. Познакомился с вкладкой Class View.  
Сложности: Нетрудно.  
Комментарии: Большое спасибо! Замечаний нет.  
17 Переезд graph в базовый класс 00:13:10
1 тест
145 чел. ★ 5 Done
  На этом уроке мы напишем функции для рисования фигур во всех остальных классах.
Отчёт отправил: 7645. Александр Львович Выполнено за 1 час. 20 мин. [Показать отчёт]
Научился: Научился переносить данные и методы, связанные с объектом, в один класс.  
Сложности: Плохо понятно, почему можно не использовать приведение типов из-за того, что все типы описаны в базовом классе. Также плохо понятно, как теперь настраивается цвет у цветных фигур.  
Комментарии: Не удается передать цвет второму снеговику! Он заменяется на цвет по умолчанию при инициализации фигуры Shape. Подскажите, пожалуйста, в чем моя ошибка?  
18 Мощь полиморфизма 00:09:01
2 теста
141 чел. ★ 5 Done
  На этом уроке мы создадим в базовом классе функцию Draw(),
и при её вызове через механизм полиморфизма будет запускаться созвучный метод нужного класса.
Отчёт отправил: 7645. Александр Львович Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Научился писать метод, реализующий полиморфизм, использовать переопределенные функции с ключевыми словами virtual и override.  
Сложности: Понять виртуальные и абстрактные классы.  
Комментарии: Большое спасибо! Замечаний нет. Очень понравилось, но мозги начинают закипать… :)  
19 Спрайт для Снеговика 00:12:28
1 тест
140 чел. ★ 5 Done
  На этом уроке мы создадим новый класс - Sprite, в котором будет хранится список всех фигур, из  которых строится графический объект, чтобы в основной программе мы могли оперировать сразу спрайтами, а не их составными элементами.
Отчёт отправил: 7645. Александр Львович Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Научился создавать новый класс для спрайта.  
Сложности: Плохо понятно, зачем мы все это делаем. Была программа простая и понятная, а сейчас она становится все более запутанной и сложной.  
Комментарии: Большое спасибо! Плохо понятно, зачем мы все это делаем. Была программа простая и понятная, а сейчас она становится все более запутанной и сложной. Кроме того, могут накапливаться мелкие ошибки, которые далее сильно осложнят выполнение курса. Хорошо бы, чтобы ИМЕННО ДЛЯ ДАННОГО КУРСА после прохождения урока открывался эталонный код программы.  
20 Перемещение круга 00:11:42
1 тест
139 чел. ★ 4.9 Done
  На этом уроке мы начнём реализовывать идею перемещения спрайтов.
Начнём, как обычно, с простого. Научимся перемещать один кружок.
Отчёт отправил: 7645. Александр Львович Выполнено за 40 мин. [Показать отчёт]
Научился: Научился перемещать объект.  
Сложности: Пока все относительно понятно.  
Комментарии: Большое спасибо! Замечаний нет.  
21 Перемещение других фигур 00:08:37
2 теста
137 чел. ★ 5 Done
  На этом уроке мы переделаем метод Draw() для остальных фигур - Line и Box().
Наша программа теперь по нажатию кнопочки будет перемещать сразу три фигурки.
Отчёт отправил: 7645. Александр Львович Выполнено за 40 мин. [Показать отчёт]
Научился: Научился перемещать объекты.  
Сложности: Непонятно как определяются относительные координаты крайних точек фигур.  
Комментарии: Большое спасибо! Замечаний нет.  
22 Перемещение Снеговиков 00:10:48
1 тест
137 чел. ★ 4.9 Done
  На этом уроке мы научим перемещаться целых снеговиков.
Для этого нам не нужно будет менять метод Draw(),
мы воспользуемся полиморфизмом!
Отчёт отправил: 7645. Александр Львович Выполнено за 40 мин. [Показать отчёт]
Научился: Научился перемещать спрайты.  
Сложности: Пока все относительно понятно.  
Комментарии: Большое спасибо! Уже стало видно преимущество объектно-ориентированного подхода. Перемещение второго спрайта производится изменением всего трех операторов.  
23 ПОЛУФИНАЛЬНЫЙ УРОК. без видео
128 чел. ★ 4.9 Done
  На этом первая часть видеокурса "Теория ООП" закончилась.
Пожалуйста, напиши отзыв об этом курсе,
что тебе понравилось, что узнал нового,
что можно было бы сделать лучше,
оправдал ли курс твои ожидания.

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

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

Правила игры, для тех, кто не знает:
Выбирается ведущий.
Его цель - догнать и дотронуться до кого-либо из участников.
Цель остальных - не допустить этого.
Когда ведущий дотронется до кого-либо (заголит) - ведущим становится новый участник.
Отчёт отправил: 7645. Александр Львович Выполнено за 30 мин. [Показать отчёт]
Научился: Познакомился с понятием "интерфейс". Интерфейс – это программное средство, обеспечивающее взаимодействие между различными элементами и объектами системы. Например, интерфейс может обеспечивать взаимодействие между отдельными классами в программе или между человеком и программой. Еще бывают интерфейсы для взаимодействия различных элементов компьютера. Например, сокет (разъём) – это тоже вид интерфейса.  
Сложности: Пока все понятно.  
Комментарии: Большое спасибо! Замечаний нет  
25 Интерфейс. Правила игры. 00:12:23
1 тест
123 чел. ★ 5 Done
  На этом уроке мы поговорим о правилах игры в догоняшки.
На прошлом уроке мы выясняли, что должны уметь делать игроки.
На этом уроке мы начнём писать класс, в котором
опишем конкретные правила нашей игры.
Отчёт отправил: 7645. Александр Львович Выполнено за 40 мин. [Показать отчёт]
Научился: Научился создавать класс с разработанными предварительно полями и методами. Самостоятельно методы FindNewLeader() и SetNewLeader() пока не напишу. Первый метод, вероятно, должен проверять все объекты. Если какой-то объект пойман (Поймал(gamer) == true), то этот объект становится голей (SetNewLeader(gamer)). Метод SetNewLeader() освобождает прежнего голю и назначает нового.  
Сложности: Пока все относительно понятно.  
Комментарии: Большое спасибо! Замечаний нет  
26 Интерфейс. Алгоритм игры. 00:07:48
122 чел. ★ 4.9 Done
  На этом уроке мы допишем класс GameCatch.
Напишем реализацию методов FindNewLeader() и SetNewLeader().
Ваша задача - подумать и написать, что нужно ещё сделать,
чтобы можно было начать играть в эту игру.
Отчёт отправил: 7645. Александр Львович Выполнено за 30 мин. [Показать отчёт]
Научился: Научился создавать методы для преобразования объектов. Чтoбы нaчaть игру, нужно создать несколько экземпляров игроков и назначить голю.  
Сложности: Пока все относительно понятно.  
Комментарии: Большое спасибо! Замечаний нет  
27 Интерфейс. Создаём кружок. 00:08:36
120 чел. ★ 4.9 Done
  На этом уроке мы создадим объект для нашей игры - Кружок!
У кружочка есть координаты центра, радиус и цвет.
Цель урока - создать класс Circle.cs
Отчёт отправил: 7645. Александр Львович Выполнено за 30 мин. [Показать отчёт]
Научился: Научился создавать класс объекта. Дальше нужно создать несколько экземпляров игроков и назначить голю.  
Сложности: Пока все относительно понятно.  
Комментарии: Большое спасибо! Замечаний нет  
28 Интерфейс. Площадка для игры. 00:11:58
1 тест
119 чел. ★ 5 Done
  На этом уроке мы начнём создавать класс Arena,
который создаст поле для игры и реализует
методы для отображения объектов на экране.
Отчёт отправил: 7645. Александр Львович Выполнено за 40 мин. [Показать отчёт]
Научился: Научился создавать площадку для игры. Класс Arena нужен для формирования площадки.  
Сложности: Есть трудности в понимании операторов конструктора класса Arena.  
Комментарии: Большое спасибо! Замечаний нет  
29 Интерфейс. Кружок на площадке. 00:11:49
1 тест
118 чел. ★ 4.9 Done
  На этом уроке мы допишем класс Arena,
реализуем методы Show(Circle), Refresh(), static NewCircle().
Всё готово к созданию кода для отображения кружка из класса Form1.cs!

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

Отчёт отправил: 7645. Александр Львович Выполнено за 30 мин. [Показать отчёт]
Научился: Научился создавать запускать экземпляры объектов.  
Сложности: Пока все понятно.  
Комментарии: Большое спасибо! Замечаний нет  
31 Интерфейс. Кружок хочет играть. 00:09:42
2 теста
117 чел. ★ 4.9 Done
  На этом уроке мы унаследуем кружок от интерфейса Игрок.
Теперь для запуска программы нам придётся реализовать
методы из его интерфейса.
В этом уроке мы реализуем методы Голя() и НеГоля().
Отчёт отправил: 7645. Александр Львович Выполнено за 40 мин. [Показать отчёт]
Научился: Научился использовать наследование интерфейса и создавать методы, унаследованные у интерфейса. Метод Беги() может использовать случайное смещение объекта (кружка) по осям X и Y. Метод Поймал(obj) сравнивает координаты Голи и остальных объектов. Если Голя и какой-нибудь другой объект пересекаются, то метод Поймал(obj) возвращает значение true (в противном случае – false).  
Сложности: Пока все понятно.  
Комментарии: Большое спасибо! Замечаний нет  
32 Интерфейс. Кружок готов к игре! 00:20:47
1 тест
116 чел. ★ 5 Done
  На этом уроке мы допишем методы Игрока в классе Circle.
Реализуем метод Беги() и Поймал(), и даже исправим
недочёты в описании интерфейса (!!).
В конце урока я ответил на многочисленные вопросы участников.
Отчёт отправил: 7645. Александр Львович Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Научился писать методы Беги() и Поймал(obj). Для запуска игры нужно задать изменения координат (сейчас они у нас равны 0).  
Сложности: Не совсем понятен параметр this в методе Поймал(obj).  
Комментарии: Большое спасибо! Замечаний нет  
33 Интерфейс. Кружочки гоняются друг за другом. 00:11:53
1 тест
115 чел. ★ 5 Done
  На этом уроке мы добавим в форму класс GameCatch,
Разместим таймер и наконец-таки запустим нашу игру -
Шарики начнут гоняться друг за другом!
Отчёт отправил: 7645. Александр Львович Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Научился воспроизводить движение объектов по таймеру.  
Сложности: Не очень понятен механизм перерисовки объектов в таймере.  
Комментарии: Большое спасибо! Уже заработало! Можно насладиться результатом. Недoчeт c переголением, мне кажется, можно исправить, используя задержку.  
34 Интерфейс. Изменяем правила игры. 00:10:22
1 тест
113 чел. ★ 5 Done
  На этом уроке мы добавим в правила игры задержку
после получения Голи. Ведущий будет считать до 10,
и только потом сможет голить других.
Твоя задача - придумать новую игру, в которую
смогут играть Игроки, то есть объекты, которые
умеют делать то, что описано в интерфейсе Игрок.
Отчёт отправил: 7645. Александр Львович Выполнено за 30 мин. [Показать отчёт]
Научился: Научился реализовывать задержку объекта.  
Сложности: Пока все понятно.  
Комментарии: Большое спасибо! Замечаний нет Новая игра - добавить управление лидирующим шариком, чтобы он избегал столкновения. 
35 Интерфейс. Создаём новую игру. 00:12:31
111 чел. ★ 4.9 Done
  На этом уроке мы начнём делать новую игру - Вирус.
Смысл игры подробно рассказан на видео.
Цель урока - создать класс GameVirus и
реализовать методы GameViurs(), AddGamer(), Step(), RunAll().
Также придумать и написать словами алгоритм
методов SetNewVirus(Игрок) и FindNewVirus().
Отчёт отправил: 7645. Александр Львович Выполнено за 40 мин. [Показать отчёт]
Научился: Научился изменять правила жизнедеятельности объекта и писать новые методы для реализации этих правил. SetNewVirus(Игрoк) – нового игрока добавляем в список virused. FindNewVirus() – проверяем всех игроков на вступление в контакт с "зараженным" игроком.  
Сложности: Пока все понятно.  
Комментарии: Большое спасибо! Замечаний нет  
36 Интерфейс. ФИНАЛЬНЫЙ УРОК. 00:13:05
106 чел. ★ 5 Done
  На этом уроке мы допишем последние две функции
и надолго залипнем в экран, наблюдая за новой
игрой для наших кружков, как вирусная эстафета
может быстро передаваться, особенно, когда
игроков очень много.
В комментариях написать свой отзыв об этой серии уроков.

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

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

Самостоятельное задание - записать видеообзор
своего проекта и рассказать, что такое Interface.
Отчёт отправил: 7645. Александр Львович Выполнено за 1 час. 20 мин. [Показать отчёт]
Научился: Научился писать отдельный модуль для сравнения объектов двух типов. Понял, что очень тяжело программировать сравнение объектов разных типов.  
Сложности: Пока все понятно.  
Комментарии: Большое спасибо! Все прекрасно работает!  
Видеообзор: https://youtu.be/tiZQKFwkUEs
  Итого:   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#.

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


Научился: Потрясающе! Чем-то напоминает процесс кристаллизации. Объектно ориентированное программирование замечательная штука! Добавив только один класс можно добавить новый режим игры.



Научился: Уроки супер! Понравились очень. Изучил теорию ООП: наследование, инкапсуляцию полиморфизм. Познакомился с интерфейсами. Наглядно и интересно! Следующий курс "Хранитель экрана".