Изучение 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 в производных классах. Совокупность этмх методов позволяет передвигать сложные фигуры как целое.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 30 мин. [Показать отчёт]
Научился: Всё умел. 
Сложности: Ничего. 
Комментарии: Скриншот создан вручную, подход творческий ))) Согласен с Владимиром (6696), надо четко выделить главное в таких фундаментальных вопросах. 
2 Урок рисования 00:08:10
2 теста
206 чел. ★ 4.9 Done
  На этом уроке мы нарисуем домик из двух линий и прямоугольника.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 30 мин. [Показать отчёт]
Научился: Познакомился с базовыми основами рисования. 
Сложности: Понять всё это. 
Комментарии: Мы создали picture, чтобы рисовать на ней, но затем еще создали bmp, чтобы рисовать на нем, для рисования у нас graph, но рисуем мы pen... Жесть! Как в банке, чтобы получить кредит, куууча промежуточных звеньев непонятного назначения. Неужели нельзя создать picture, а затем заюзать pen... 
3 Первый класс 00:09:53
2 теста
193 чел. ★ 4.8 Done
  На этом уроке мы создадим первый класс - Line.
И перепишем программу, чтобы она работала точно так же.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 30 мин. [Показать отчёт]
Научился: Познакомился с передачей аргументов объекту 
Сложности: Ответить на этот вопрос. 
Комментарии: Даже не знаю что и сказать. Правда. Наверно уроки следует слушать параллельно с чтением книги. 
4 Второй класс 00:09:13
185 чел. ★ 4.9 Done
  На этом уроке мы создадим второй вспомогательный класс - Box.
Порассуждаем на тему "наследования" и переделаем программу.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 30 мин. [Показать отчёт]
Научился: Познакомился с понятием наследование. 
Сложности: Понять всё это. 
Комментарии: Пока вроде неплохо, продолжаем. 
5 Круглый класс 00:08:10
182 чел. ★ 4.9 Done
  Создадим класс для задания окружности - Circle.
Дополним окружность в центре домика.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 30 мин. [Показать отчёт]
Научился: Узнал особенности рисования окружности. 
Сложности: Ну хоть где то я могу написать: ничего)) 
Комментарии: В моей реализации это похоже на ... конуру))) 
6 Структура пикселя 00:10:55
171 чел. ★ 4.9 Done
  Создадим структуру для задания координат пикселя
и перепишем классы и программу с её использованием.
Почитать об отличии класса от структуры:
http://www.cyberforum.ru/csharp-beginners/thread442631.html
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 30 мин. [Показать отчёт]
Научился: Познакомился с кусочком ООП: использование универсальных данных - обозначили один раз, вызвали много раз по разному. 
Сложности: Понять, как всё это работает. Да!! 
Комментарии: Вот это обалденный урок! Я прям почувствовал, как начинаю достигать просветления. box1 = new Box(150, 220, 230, 180); заменили на box1 = new Box(C, B); - круто!! Кусочек мощи объектно-ориентированного подхода в "переводе на пощупать". Кстати вопрос: а что такое конструктор? Определение: штука которая создает экземпляр класса - теперь не прокатывает. Как говорит книга : класс - это чертеж, а объект - это готовый экземпляр... Но с одного чертежа нельзя заготовить два разных объекта. 
7 Структура vs Класс 00:25:05
1 тест
162 чел. ★ 4.9 Done
  На этом дополнительном уроке наглядно демонстрируются главные отличия между struct и class в языке C#.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 45 мин. [Показать отчёт]
Научился: Познакомился с ключевыми словами ref, out. Узнал интересные особенности структур. 
Сложности: Всё здорово объяснили, спасибо, количество понимаемого увеличилось! 
Комментарии: Были понятны пункты 1(из за пояснения в нем же), 4(немного), 6.. и всё. Структуре можно делать конструктор... АХТУНГ!!! Не может быть! (это еще надо было на прошлом уроке написать...) Евгений Витольдович... а что такое виртуальные члены? Хочется спросить, что такое наследование интерфейсов, но я не буду... от греха... голова всё же целая нужна :-)) 
8 Пиксели для классов 00:14:44
2 теста
157 чел. ★ 4.9 Done
  На этом уроке мы продолжим внедрение структуры Pixel в наши классы.
Будем её использовать для хранения координат внутри класса.
Также избавимся от повторяемого кода внутри конструкторов.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 45 мин. [Показать отчёт]
Научился: Познакомился с особенностями использования ключевого слова this  в заголовке конструктора. 
Сложности: Понять, как всё это работает. Раньше мы передавали координаты, а теперь передаём структуру.  
Комментарии: Код становится более компактным, хотя и болеевысокоабстрактным. 
9 Расстояние между пикселями 00:12:12
2 теста
155 чел. ★ 4.9 Done
  Как вычислить расстояние между двумя пикселями?
Есть специальная формула, которую можно разместить в структуру Pixel.
Теперь мы сможем создать ещё один конструктор окружности по центру и любой точке на окружности.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 45 мин. [Показать отчёт]
Научился: Углубил познания о ключевом слове this. 
Сложности: "...идея инкапсуляции в том что, можно предоставлять различные способы вызова объекта..." На этом месте мозг чуть чуть загрустил. Слегонца. а когда появилось вот ЭТО : this (center, center.distance (point))  , то тут мозг загрустил посильнее..... И только лишь четырёхминутная "медитация" по этому вопросу помогла понять, почему убрали вообще всё. 
Комментарии: 1) double radius = Math.Sqrt(      в конструкторе  public Circle  класса Circle. Почему нельзя float? внутри где то double есть? Такое ощущение, что в Math.Sqrt где то в описании дабл забит, но явно это не сказано... 2) при вызове Draw надо было изменить circle1 на circle. Но где то... то ли не сказали, то ли я пропустил. Хорошо хоть быстро до этого догадался... Самое жуткое, когда на вебинаре рисуется 2 окружности, а у тебя ОДНА.... ужааааас.... (потому что будешь искаааать, искааааааать, искааааааааааааааааааааааать...) 3) И раз уж мы возвращались к разнице класса и структуры.... Что такое виртуальные члены? 
10 Цветные карандаши 00:14:54
1 тест
152 чел. ★ 4.9 Done
  Возьмём цветные карандаши и будем раскрашивать наш домик.
Создаём новые классы для цветны линий, окружностей и прямоугольников.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Делать запутанные программы. 
Сложности: Подобрать цвет. Бывает он рисуется, а не видно. И думаешь, что не рисуется... Honeydew к примеру. 
Комментарии: Неожиданное продолжение. Я думал мы напишем типа суперкласс, при помощи которого будем управлять цветами. 
11 Рисуем Снеговика 00:14:40
151 чел. ★ 4.9 Done
  На этом уроке мы создадим ... Снеговика (спрайт) —
более сложную фигуру, которая состоит из других фигур.
В дальнейшем мы будем работать с такими спрайтами,
перемещать их, поворачивать, масштабировать,
а пока ... мы просто нарисуем Снеговика.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 45 мин. [Показать отчёт]
Научился: Познакомился с рисованием "с нуля". 
Сложности: Самым сложным было неподдаться соблазну нарисовать что нибудь супер-пупер-какоенибдуь, и продолжить заниматься)))) 
Комментарии: Может есть более "четкий" способ рисования "с нуля"... я не знаю, надо будет как нибудь загуглить. 
12 Второй Снеговик 00:09:46
1 тест
151 чел. ★ 4.9 Done
  На этом уроке мы создадим второй спрайт -
ещё одного снеговика, но разноцветного.

Вопрос для перехода к следующему уроку:
Что нужно изменить в этой программе, чтобы мы могли
а) перемещать снеговика;
б) поворачивать снеговика;
в) изменять размер снеговика.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 45 мин. [Показать отчёт]
Научился: Всё уже знал 
Сложности: Ничего. 
Комментарии: Вы по сути ответили на вопрос, который задали. Действительно - вся фигура должна обсчитываться относительно одной точки. То есть функция рисования фигуры будет принимать 4 значения (точка отсчета, первая точка, вторая точка, цвет). Точка отсчета - это для всех фигур одного снеговика одинакова. первая и вторая точки это для квадрата углы к примеру. ну цвет - это цвет. Надо сдвинуть - сдвигаем одну точку - точку отсчета. Если хочется поворачивать - придется считать синусы. То есть у нас есть вектор с координатами.  По известным координатам можно его "дополнить до треугольника", вычислить синус угла, вычислить синус необходимого угла, из него выразить координаты... Ну вобщем можно если заморочиться.. На счет поворачивать - не знаю как. У нас объект 2D, такие обычно не поворачивают. 
13 Богатое наследство 00:12:53
2 теста
150 чел. ★ 5 Done
  Наконец-таки мы возьмёмся за наследование.
Убираем повторяющийся код из цветных классов.
Осмысливаем значение термина «наследование».
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 20 мин. [Показать отчёт]
Научился: Познакомился с наследованием 
Сложности: Пока ничего. 
Комментарии: Непонятно про базовый конструктор без параметров. Надеюсь дальше рассмотрим. 
14 Фигуральный базовый класс 00:10:56
148 чел. ★ 5 Done
  Очень хочется все элементы снеговика поместить в один массив.
Сейчас это сделать нельзя - придётся делать три массива - для кругов, для линий, для боксиков...
Решение гениальное - создаём базовый класс фигуры - Shape, создаём массив фигур, и все фигуры помещаем в этот массив!
После размещения фигур в массив можно видеть, что каждая фигура в нём хранится не как фигура, а под своим типом.
А все под одной крышей они могут находится потому что все они - фигуры, так как унаследованы от Shape.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 30 мин. [Показать отчёт]
Научился: Всё знал. 
Сложности: Ничего. 
Комментарии: Реализовать функцию Draw элементарно - достаточно взять (каким-то хитрым образом) из массива информацию о том, какая конкретно фигура рисуется. Ну и добавить в Shape тип фигуры, чтобы с этим работать. Вот и всё - всего - то :-)))))) 
15 Приведение с мотором 00:11:51
1 тест
148 чел. ★ 4.9 Done
  На этом уроке мы реализуем метод Draw (Shape shape) через серию условных операторов.
А также создадим функцию для рисования целевого спрайта (снеговика) - Draw (Shape [] shapes).
Результат работы программы не изменяется, а вот содержимое кода всё более и более облагораживается.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Углубил знания о наследовании. 
Сложности: ВСЁ!!! Всё было сложным! Понять как всё это работает!!!  
Комментарии: Это кошмар какой-то! Я даже не знаю, как это назвать. Мы организовываем класс Shape от которого наследуем всё, при этом в классе ничего нет. То есть сёркл, лайн и бокс это фигуры, а шэйп - это как бы профигура (по аналогии с прокариотами), никакая фигура. И затем мы делаем массив никаких фигур! snowman1 = new Shape[7]; Далее мы рисуем снеговика Draw(snowman1); С одной стороны всё хорошо, Рисуем (снеговик). все четко и понятно. НО с другой стороны мне надо держать в голове, что сноумэн1 это массив, и что будет вызвана функция Draw(Shape[] shapes) . Ага. А shapes[j] - это уже какой то элемент массива, и уже с ним будет вызвана другая функция, то есть строка Draw(shapes[j]); вызовет Draw(Shape shape). которая в свою очередь будет вызывать функции для рисования отдельных фигур. Я на это долго смотрел. Дооолго смотрел. ..... ..... ....  Нет, ну вот честно. Массив никаких фигур, а затем мы вызываем функцию, которая отрисовывает поэлементно, по дороге определяя тип... А-а-а-а.... Ощущение, что в черепную коробку засунули гантелю, и она [коробка] стала очень тяжёлой... 
16 Переезд метода Draw 00:11:54
146 чел. ★ 4.9 Done
  На этом уроке мы начнём переносить функции для рисования фигур из основной программы в классы.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 20 мин. [Показать отчёт]
Научился: Познакомился с понятием полиморфизм. 
Сложности: Самым сложным остаётся понять, как инициализируется графика... 
Комментарии: Продолжаем идти к самому страшному. 
17 Переезд graph в базовый класс 00:13:10
1 тест
145 чел. ★ 5 Done
  На этом уроке мы напишем функции для рисования фигур во всех остальных классах.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 30 мин. [Показать отчёт]
Научился: Еще немного познакомился с наследованием. 
Сложности: Сейчас всё боле-менее понятно. Я имею ввиду именно то, что мы сделали. Только всё становится более сложным, более высокоабстрактным.  
Комментарии: Уже сложнее воспринимать фигуру как фигуру. Где то она объявляется, где - то инициализируется, откуда-то берет информацию, например о цвете.... Я не показываю на скриншотах каждый раз одних и тех же снеговиков. Ну нет в этом смысла. Код меняется. 
18 Мощь полиморфизма 00:09:01
2 теста
141 чел. ★ 5 Done
  На этом уроке мы создадим в базовом классе функцию Draw(),
и при её вызове через механизм полиморфизма будет запускаться созвучный метод нужного класса.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Еще немного познакомился с полиморфизмом. 
Сложности: Никаких трудностей нет, потому что ничего не понял))) 
Комментарии: Ну ладно, оверрайд это непонятно (ну как бы поняяяятно но не освоено, не могу сказать, в каком случае оно будет работать, а в каком - нет) Но вот какой интересный вопрос у меня возник...  Да, допустим, базовый класс шэйп - абстрактный (по другому класс никакой фигуры и не назовешь). И функция дроу в других классах оверрайд и определяет себя по типу фигуры...  Но класс форм то от него [шэйпа] не наследуется. Как же функция дроу в форм1 узнает, что в шейпе дроу абстрактна? Это главный вопрос к уроку, а так все норм. Наверное... 
19 Спрайт для Снеговика 00:12:28
1 тест
140 чел. ★ 5 Done
  На этом уроке мы создадим новый класс - Sprite, в котором будет хранится список всех фигур, из  которых строится графический объект, чтобы в основной программе мы могли оперировать сразу спрайтами, а не их составными элементами.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 20 мин. [Показать отчёт]
Научился: Познакомился с еще одним способом использования List 
Сложности: Да вроде всё хорошо. 
Комментарии: Комментарий абстрактен. 
20 Перемещение круга 00:11:42
1 тест
139 чел. ★ 4.9 Done
  На этом уроке мы начнём реализовывать идею перемещения спрайтов.
Начнём, как обычно, с простого. Научимся перемещать один кружок.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 30 мин. [Показать отчёт]
Научился: Научился простейшему движению фигуры. 
Сложности: Понять отличие координат. 
Комментарии: Вроде бы всё хорошо. Чует моё сердце, поворачивать и изменять размер мы уже не будем. ( 
21 Перемещение других фигур 00:08:37
2 теста
137 чел. ★ 5 Done
  На этом уроке мы переделаем метод Draw() для остальных фигур - Line и Box().
Наша программа теперь по нажатию кнопочки будет перемещать сразу три фигурки.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 15 мин. [Показать отчёт]
Научился: Перемещать несколько фигур. 
Сложности: Всё просто. 
Комментарии: Нетерпится узнать, как перемещать спрайт. 
22 Перемещение Снеговиков 00:10:48
1 тест
137 чел. ★ 4.9 Done
  На этом уроке мы научим перемещаться целых снеговиков.
Для этого нам не нужно будет менять метод Draw(),
мы воспользуемся полиморфизмом!
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 20 мин. [Показать отчёт]
Научился: Познакомился с перемещением спрайта 
Сложности: На базе понятого предыдущего всё текущее понятно. 
Комментарии: Очень надеюсь, что мы продолжим, тем более что видео обещает это) 
23 ПОЛУФИНАЛЬНЫЙ УРОК. без видео
128 чел. ★ 4.9 Done
  На этом первая часть видеокурса "Теория ООП" закончилась.
Пожалуйста, напиши отзыв об этом курсе,
что тебе понравилось, что узнал нового,
что можно было бы сделать лучше,
оправдал ли курс твои ожидания.

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

(видео в этом уроке нет)
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 45 мин. [Показать отчёт]
Научился: Продолжил тренироваться делать видео-отчеты. 
Сложности: Записать нормально, без слов паразитов, без тупого гундения обо всём на свете. (конеееечно, не факт, что я всё убрал, но поверьте, это 3й вариант, и он гораздо лучше чем первый) 
Комментарии: SHOW MUST GO ON!!! 
Видеообзор: http://www.youtube.com/watch?v=uhhTl9-u4iM
24 Интерфейс. Зачем он нужен. 00:09:33
1 тест
125 чел. ★ 4.9 Done
  На этом уроке я объясню своими словами, что такое интерфейс.
Мы поговорим об игре "Голя" или "Сифа" или "Вода",
о том, кто в неё может играть, и что делать тем,
кто не знает правила игры.
В конце урока мы создадим наш интерфейс.

Правила игры, для тех, кто не знает:
Выбирается ведущий.
Его цель - догнать и дотронуться до кого-либо из участников.
Цель остальных - не допустить этого.
Когда ведущий дотронется до кого-либо (заголит) - ведущим становится новый участник.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 20 мин. [Показать отчёт]
Научился: Познакомился с понятием интерфейс на английском языке. 
Сложности: Ничего. 
Комментарии: Интерфейс это "междумордие". 
25 Интерфейс. Правила игры. 00:12:23
1 тест
123 чел. ★ 5 Done
  На этом уроке мы поговорим о правилах игры в догоняшки.
На прошлом уроке мы выясняли, что должны уметь делать игроки.
На этом уроке мы начнём писать класс, в котором
опишем конкретные правила нашей игры.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 30 мин. [Показать отчёт]
Научился: Добавлению заглушек на непрописанные методы. 
Сложности: Ничего. 
Комментарии: Даже не знаю, что тут прокомментировать... На вебинаре всё это тяжелее воспринимать... Вечером (а тем более ночью!!)). Щас вроде как даже по лучше идет. 
26 Интерфейс. Алгоритм игры. 00:07:48
122 чел. ★ 4.9 Done
  На этом уроке мы допишем класс GameCatch.
Напишем реализацию методов FindNewLeader() и SetNewLeader().
Ваша задача - подумать и написать, что нужно ещё сделать,
чтобы можно было начать играть в эту игру.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 30 мин. [Показать отчёт]
Научился: Вспомнил, в каком случае пишется return. 
Сложности: Ничего. 
Комментарии: Чтобы играть в игру надо кучу всего еще сделать. Арену. Реализовать функции на русском которые... вобщем много. 
27 Интерфейс. Создаём кружок. 00:08:36
120 чел. ★ 4.9 Done
  На этом уроке мы создадим объект для нашей игры - Кружок!
У кружочка есть координаты центра, радиус и цвет.
Цель урока - создать класс Circle.cs
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 15 мин. [Показать отчёт]
Научился: Продолжаю повторять изученное. 
Сложности: Ничего. 
Комментарии: void - это тип данных, множество значений которого пусто. Что такое "геттер" ? ( который в замен {get; private set;} ) 
28 Интерфейс. Площадка для игры. 00:11:58
1 тест
119 чел. ★ 5 Done
  На этом уроке мы начнём создавать класс Arena,
который создаст поле для игры и реализует
методы для отображения объектов на экране.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 20 мин. [Показать отчёт]
Научился: Узнал некоторые тонкости использования слова this. 
Сложности: this.picture.Image - добавление this сюда было самым сложным. (точнее говоря, понимание этого ) 
Комментарии: Арена - класс для управления нашим полем (размеры и обновление). 
29 Интерфейс. Кружок на площадке. 00:11:49
1 тест
118 чел. ★ 4.9 Done
  На этом уроке мы допишем класс Arena,
реализуем методы Show(Circle), Refresh(), static NewCircle().
Всё готово к созданию кода для отображения кружка из класса Form1.cs!

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

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

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

Какой курс ты будешь проходить следующим?
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 1 час. 15 мин. [Показать отчёт]
Научился: На примерах новых игр удалось глубже понять, что такое интерфейс. Теперь есть база для расширения своих познаний. 
Сложности: Вообще я тут стал смотреть смотреть смотреть на код код код... И вижу что я не всё понимаю. Например gamers.Add(gamer); - команда добавляет нового игрока... А какого? Как это узнать? Что изначально в переменной gamer? причем эта переменная типа "Игрок" то есть типа интерфейс. Я так подозреваю, что я не знаю какое-то универсальное свойство списка. Но если это не так, поправьте меня, то есть если где то в программе мы это оговариваем особо. 
Комментарии: Скриншотов программы не будет, потому что есть видео. 
Видеообзор: https://youtu.be/mXdsRztfQK8
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
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 30 мин. [Показать отчёт]
Научился: Добавлять новый класс с интерфейсом. 
Сложности: Найти ошибку в строке             foreach (Box obj in game.gamers)                 arena.Show(box); 
Комментарии: Как то странно конструкторы сделаны. Нафига так?         public Box(int sx, int sy)             : this(x, y, w, h)         {             this.sx = sx;             this.sy = sy;         }         public Box(int x, int y, int w, int h, int sx, int sy)         {             box = new Rectangle(x, y, w, h);             color = Color.Green;         } По моему логичнее было бы         public Box(int sx, int sy)             : this(x, y, w, h)         {             this.sx = sx;             this.sy = sy;         }         public Box(int x, int y, int w, int h)         {             box = new Rectangle(x, y, w, h);             color = Color.Green;         } 
38 Интерфейс. VIP. Пересечение прямоугольников. 00:09:47
95 чел. ★ 5 Done
  На этом уроке мы допишем метод Box.Поймал()
и запустим игру с квадратиками.
Потом попробуем подружить квадратики с кружками,
увидим, что это не так просто, да собственно и не нужно.
Но возможно.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 20 мин. [Показать отчёт]
Научился: Добавлять квадратикам способность поймать друг друга. 
Сложности: ((Box)that).box - вот это было самым сложным. 
Комментарии: (Box)that.box - почему так не работает? ((((( Вообще сейчас легче делать чем на вебинаре. Реально легче, всё с первого раза заработало. Никаких нервов.  
39 Интерфейс. VIP. Тяжёлая дружба кругов и квадратов. 00:22:25
84 чел. ★ 5 Done
  На этом уроке мы создалим "универсальный" класс Crosser,
который сможет проверять на столкновение "любых" двух Игроков.
Конечно не любых, а только двух наших Box и Circle.
Это яркий способ, чего стоит избегать в программах.
Потому что тут не добавляется универсальности,
т.к. при добавлении новых объектов придётся
дописывать кучу новых функций на сравнение.

Самостоятельное задание - записать видеообзор
своего проекта и рассказать, что такое Interface.
Отчёт отправил: 1901. Neverwinter 2 Выполнено за 1 час. 30 мин. [Показать отчёт]
Научился: Научился зомби-коду на примере сравнения слонов с конфетами!!! (пересечения кружочков и квадратиков) 
Сложности: Всё!!! 
Комментарии: Crosser crosser = new Crosser(); - что же получается? crosser - это экземпляр класса Crosser, но не объект? ( В нем ведь полей нет, одни методы - иными словами "он не существительное" ) На всякий случай прикладываю архив проекта, вдруг кому нужно. Будет храниться 30 дней ( начиная с 14.11.2015) 
Видеообзор: https://youtu.be/t2O6iCL7prM
  Итого:   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#.

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


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



Научился: Закрепил материал, реализовал новые методы
Трудности: ничего, но мне еще пока что не привычен синтаксис языка думаю со преминем это все пройдет, буду больше писать !
спасибо за эту серию уроков хочется дальнейшего продолжения!