C# обучение для чайников

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

основатель — Волосатов Евгений Витольдович

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

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

После взноса  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:11:09
4 теста
158 чел. ★ 4.8 Done
  Я приглашаю вас на видеокурс по созданию полноценной игровой программы СОКОБАН. Я проведу вас за руку по всем этапам создания законченной интеллектуальной игры:
1. Создание редактора уровней.
2. Придумывание этих самых уровней.
3. Создание собственно игры.
4. Решение олимпиадной задачки для добавления ИИ.
5. Переделка игры в режим "на двоих".
6. Написание класса Phone для связи двух программ по сети.
7. Создание сетевой версии игры Sokoban.
Будет интересно!

В конце видео - первое задание: Научиться играть! :)
Ссылка на игру Сокобан
Отчёт отправил: 11589. Yefim Выполнено за 2 час. 12 мин. [Показать отчёт]
Научился: Играть в Сокобан 
Сложности: Скрыть от начальства, что в рабочее время занимаюсь игрушкой. 
Комментарии: Прошел 22 кровня на своем Андроиде. Я обратил внимание, что сложность уровней не всегда зависит от номера уровня. Существует ли объективный критерий оценки сложности уровня уровня? 
2 FREE Сокобан - Подготовка - Картинки и лабиринт 00:04:56
1 тест
116 чел. ★ 4.9 Done
  На этом уроке мы подготовим 6 пиктограмм и две картинки для игры,
а также придумаем свой собственный уровень, который запишем в текстовый файл.

Отчёт отправил: 11589. Yefim Выполнено за 10 мин. [Показать отчёт]
Научился: Строить стены  
Сложности: Начать 
Комментарии: Нет замечаний 
3 Сокобан - Редактор - Загрузка 00:33:25
110 чел. ★ 5 Done
  Мы начинаем создавать редактор уровней
для известной логической игры Sokoban.

Редактор будет создан за четыре урока.
На первом уроке мы создадим класс для загрузки
уровня с текстового файла и протестируем его работу.

Отчёт отправил: 11589. Yefim Выполнено за 3 час. 10 мин. [Показать отчёт]
Научился: Узнал о функциях CS для работы с файлами 
Сложности: Не столько сложным сколько трудоемким 
Комментарии: Хочу поделиться полезным приемом при написании кода. Не многие знают, что копировать или переносить можно не только строки целиком, но прямоугольные блоки. В частности в этом уроке, когда была написана функция CharToCell(char x) и возникла необходимость в написании функции CellToChar(Cell x), то очень удобно выделить и перенести  прямоугольные блоки (см. скриншот)  Это делается с помощью мышки и нажатой клавиши Alt 
4 Сокобан - Редактор - Интерфейс 00:40:37
95 чел. ★ 5 Done
  На этом уроке мы создадим интерфейс программы
и сделаем отображение загруженного уровня на экране.
Отчёт отправил: 11589. Yefim Выполнено за 3 час. 40 мин. [Показать отчёт]
Научился: Ознакомился с основами работы с файлом ресурсов 
Сложности: Непонятно, почему иконка на форме выглядит не так как предполагалось.  
Комментарии: Небольшое замечание относительно применения метода SokobanEditor_Resize. Как было отмечено в видео уроке этот метод требует немалых затрат ресурсов компа. Для мощных компов это не так критично, а вот для слабеньких это существенно заметно. Предлгаю в этих случаях использовать метод SokobanEditor_ResizeEnd. Метот сработает один раз, когда кнопка мышки освободится окончательный эффект будет тот же.  
5 Сокобан - Редактор - Редактирование 00:38:33
88 чел. ★ 5 Done
  На третьем уроке мы сделаем наконец-таки редактирование поля.
Также реализуем возможность изменения размера лабиринта.
В конце напишем функцию для проверки корректности составленного уровня.
Отчёт отправил: 11589. Yefim Выполнено за 5 час. 17 мин. [Показать отчёт]
Научился: Убирать "мусор"  
Сложности: Выполняя это задание, решил не просто копировать код, а, по возможности, предложить свою реализацию. В основном получилось, но кое-где были проблемы. Например, я заметил, что при выборе элемнта для редактирования, сам элемент выделяется "неубедительно". В статическом режиме мне это удалось, а в динамическом почему-то нет. Я пытался это сделать при написании функции SetCurrentCell() (см. скрин) Если кто знает, в чем моя ошибка подскажите.  
Комментарии: Честно говоря, я не понял почему в функции IsGoodLevel() для вычесления числа мест для ящиков используется элемент Cell.done, а не Cell.here? И почему число мест для ящиков не может быть больше числа самих ящиков? Хотя это вопрос определения правил, но ведь эта игра - модель жизненой ситуации. При редактровании уровня до того, как юзер выберет, какой Селл будет активным нужно определиться: либо установить что-то по умолчанию, либо механизм редактирования должен быть заблокирован. На данный момент Cell.none является активным в начале, хотя объект toolNone никак не выделен.  
6 Сокобан - Редактор - Сохранение 00:44:47
84 чел. ★ 4.9 Done
  На четвёртом уроке мы закончим создание редактора уровней.
Напишем самую главную функцию для сохранения сделанных изменений в файл.
Затем добавим кнопки перехода к следующему и предыдущему уровню.
Останется только немного облагородить интерфейс программы.
Отчёт отправил: 11589. Yefim Выполнено за 4 час. 13 мин. [Показать отчёт]
Научился: Изменять и сохранять  уровни 
Сложности: Самое трудное было понять (может быть в будущем это прояснится) зачем все уровни мы записываем в один файл? Хотя с точки зрения приобретения навыков программирования сложных алгоритмов это оправдано. 
Комментарии: Не проще ли каждому уровню выделить отдельный файл с именем LevelNNN.txt? где NNN = 001 для первого, 002 для -2го т.д. Тогда многое при кодировании упростится.  
7 Сокобан - Редактор - Улучшение 00:29:00
81 чел. ★ 5 Done
  Допиливаем и дорабатываем редактор до товарного вида.
Реализуем ещё несколько фишек.
Отчёт отправил: 11589. Yefim Выполнено за 2 час. 05 мин. [Показать отчёт]
Научился:   Дeлать измeнение рaзмеpов лaбиpинта чeрез текстовое поле.   Дeлать пpямоугольнoе зaполнeниe лабиpинта выбранным объектом.   Дeлать cчётчик ящиков и паркoвочныx меcт для ниx.   Дeлать Тултипы для контролов  
Сложности: Возникли вопросы: при использовании текстового поля со свойством BorderStyle = Fixed3D, я надеялся увидеть "объёмный вариант", а на самом деле оно выглядит как Label. Хотелось бы подробнее узнать как программно перехватывать ошибки с помощью try - catch.  
Комментарии: Возникли вопросы: при использовании текстового поля со свойством BorderStyle = Fixed3D, я надеялся увидеть "объёмный вариант", а на самом деле оно выглядит как Label. Хотелось бы подробнее узнать как программно перехватывать ошибки с помощью try - catch. Замечаний, практически, нет. Особенно понравилась реализация пpямоугольнoго зaполнeния лабиpинта выбранным объектом. Хочу предложить более простой способ использования функции Split(x) с разделителем, отличным от пробела:   char dl = 'x';   string[] wh = toolStripTextBoxLabirintSize.Text.Split(dl);  
8 Сокобан - Редактор - Классика уровней 00:03:16
1 тест
31 чел. ★ 5 Open
  На этом уроке вам нужно выбрать любых два классических уровня
и создать их в нашей программе-редакторе.

Ссылка на классические уровни:
https://logic-games.spb.ru/sokoban/

Редактор можно скачать здесь:
https://www.videosharp.info/data/soft/SokobanEditor.zip
9 Сокобан - Создаём свои уровни 00:08:05
1 тест
79 чел. ★ 4.9 Done
  Твоя задача - подготовить базу уровней для игры Сокобан.
Отчёт отправил: 11589. Yefim Выполнено за 1 час. 03 мин. [Показать отчёт]
Научился: Создавать и редактировать уровни 
Сложности: Оценить сложность уровня  
Комментарии: Иногда при сохранении уровня возникают проблемы. Еще не разобрался в закономерности. О деталях сообщу дополнительно 
10 Сокобан - Игра - Интерфейс 00:43:45
1 тест
80 чел. ★ 5 Done
  Мы начинаем создание интеллектуальной игры СОКОБАН.
У нас уже есть все необходимые классы и уровни для создания полноценной игры.
На этом уроке мы создадим форму и настроим интерфейс окна лабиринта.
Отчёт отправил: 11589. Yefim Выполнено за 1 час. 02 мин. [Показать отчёт]
Научился: Познакомился с применением делегатов 
Сложности: Не было сложностей 
Комментарии: Нет замечаний 
11 Сокобан - Игра - Управление 01:06:38
3 теста
69 чел. ★ 5 Done
  Теперь мы создадим класс логики игры Game,
используя который, мы реализуем управление человечком
курсорными клавишами клавиатуры.
А также сделаем переход на следующий уровень.
Отчёт отправил: 11589. Yefim Выполнено за 3 час. 33 мин. [Показать отчёт]
Научился: Технологии монипулирования двумя матрицами. Гениальная идея!!! 
Сложности: Не было сложностей 
Комментарии: Не перестаю восхищаться технологией монипулирования двумя матрицами. Браво, Евгений Витольдович!!! 
12 Сокобан - Решалка - Тестер 00:59:55
1 тест
63 чел. ★ 5 Done
  На этом уроке мы напишем программу, которая будет
проверять правильность алгоритма поиска решения лабиринта.
http://www.videosharp.info/console/task/level=1178
Отчёт отправил: 11589. Yefim Выполнено за 2 час. 54 мин. [Показать отчёт]
Научился: Как избавится от static  
Сложности: По мере написания программы код в некоторых местах менялся, и это естественно. И порой трудно было отследить, что осталось в окончательном варианте.  
Комментарии: У меня есть предложение на будущее: в завершении видео показывать окнчательный вариант кода от начала до конца. Переменным следовало бы давать более осмысленые значения. 
13 Сокобан - Решалка - Мышка 00:53:02
1 тест
62 чел. ★ 5 Done
  Мы начинаем решать задачу по решению игры Сокобан с одним ящиком.
Эта задача олимпиадного уровня на применение алгоритма поиска вширь.
Главный герой - мышка Альфа, которая желает затолкать яблочко к себе в норку.
Программу мы напишем за два урока.
На первом уроке мы создадим вспомогательную функцию MoveAlfa(),
которая подскажет мышке как попасть из одной клетки лабиринта в другую кратчайшим путём.
Отчёт отправил: 11589. Yefim Выполнено за 2 час. 02 мин. [Показать отчёт]
Научился: Познакомился с "Очередями и Списками". 
Сложности: Не было сложностей 
Комментарии: Нет замечаний 
14 Сокобан - Решалка - Яблоко 00:44:23
2 теста
60 чел. ★ 5 Done
  На втором уроке мы переделываем написанный алгоритм поиска маршрута мышки.
Теперь мы разрешаем мышке толкать яблоко, и записываем все изменения их расположений.
Отчёт отправил: 11589. Yefim Выполнено за 1 час. 05 мин. [Показать отчёт]
Научился: Вынeсить фyнкцию в в отдельный клаcс  
Сложности: Не было сложностей 
Комментарии: Вопрос: Правильно ли я понимаю ? В функции MoveApple(...) записаны 3 строки: brain.mouse = mouse; brain.apple  = start; brain.path = "";                           Можно ли вместо них использовать конструктор?             Brain brain = new Brain(mouse, start, "");  
15 Сокобан - Решалка - Оптимизация 00:11:37
1 тест
60 чел. ★ 5 Done
  На этом коротком уроке мы рассмотрим два способа оптимизации нашей программы, в результате которых работать она станет просто молниеносно!!!
Отчёт отправил: 11589. Yefim Выполнено за 2 час. 02 мин. [Показать отчёт]
Научился: Научился пользоваться некоторыми элементами класса Stopwatch. Научился пользоваться директивами препроцессора. Научился оптимизиpовaть свой алгoритм. Научился рaдоваться pезyльтатy.  
Сложности: В видео уроке проблемное место в коде, где возникает торможение, преподносится в готовом виде.  Мне интересно было найти это место самому. Проблемы не возникло, но это заняло время.  
Комментарии: Попутно научился пользоваться директивами препроцессора. Это позволило не убирать старый код, а меняя только одно место в программе, легко показывать любой вариант оптимизации. 
16 Сокобан - Игра - Автоходы 00:42:22
1 тест
57 чел. ★ 5 Done
  Поздравляю, программа уже создана: можно играть, можно ею хвастаться.
На этом уроке мы добавим в игру автоходы, чтобы можно было
управлять нашим человечком с помощью мышки - указать, куда идти,
и даже указать, какой ящик куда нужно поставить.
Для этого нам потребуются два класса по решению лабиринта.
Отчёт отправил: 11589. Yefim Выполнено за 2 час. 05 мин. [Показать отчёт]
Научился: Автоходам 
Сложности: Не было сложностей 
Комментарии: Классно получилось!!! 
17 Сокобан - Редактор - На двоих 00:31:57
1 тест
54 чел. ★ 5 Done
  Переделываем редактор уровней, чтобы можно было создавать лабиринты для двоих игроков.
Создаём базу из 10 новых уровней игры в Сокобан для двоих.
Отчёт отправил: 11589. Yefim Выполнено за 1 час. 11 мин. [Показать отчёт]
Научился: Всему тому, что было в видео уроке 
Сложности: Не было сложностей 
Комментарии: В функции private void ShowCell(int x, int y, Cell C) имеется фрагмент:   if (C == Cell.user1) RemoveItem(Cell.user1);   if (C == Cell.user2) RemoveItem(Cell.user2); в свою очередь внутри функции RemoveItem(...) есть обращение к ShowCell(int x, int y, Cell C); т. е. рекурсия. Насколько это оправдано?  
18 Сокобан - Игра - На двоих 00:15:40
54 чел. ★ 5 Done
  Переделать игру, чтобы в неё можно было играть вдвоём на одной клавиатуре.
Отчёт отправил: 11589. Yefim Выполнено за 1 час. 25 мин. [Показать отчёт]
Научился: Корректировать код с помощью компилятора.  
Сложности: см. пункт 4 
Комментарии: Попытался создать программу без полного просмотра видео урока. Остановил видео, после того как Евгений Витольдович сформулировал задачу урока. При изменении поля user на user1 в структуре enum Cell запустил программу в расчете на то, компилятор как раз и укажет на те места кода, которые требуют корректировки. В основном все изменения 80% проделал сам и они совпали оригиналом. Не додумался заменить переменную mouse на mouse[] и создать функцию CellUser(... ).  
19 Сокобан - Телефон - TCP/IP протокол 00:47:44
1 тест
65 чел. ★ 5 Done
  На этом видеоуроке мы создадим три класса, которые удобно
использовать для передачи данных между двумя компьютерами.
Отчёт отправил: 11589. Yefim Выполнено за 2 час. 20 мин. [Показать отчёт]
Научился: Великолепный урок!!! Научился создавать Сервер и Клиент  
Сложности: Еще не разобался с механизмом работы делегатов. Где об этом можно почитать? Долго искал ошибку из-за того, что по невнимательности записал "127,0,0,1" вместо "127.0.0.1"  
Комментарии: Для того, чтобы различать кто, что посылает/ получает добавил в класс Phone поле name.  
20 Сокобан - Игра - На двоих по сети 00:56:59
1 тест
52 чел. ★ 5 Done
  На этом уроке мы наконец-таки сделаем сетевую версию программы Sokoban для двоих.
Мы будем использовать телефонный класс Phone с прошлого урока.

Отчёт отправил: 11589. Yefim Выполнено за 2 час. 55 мин. [Показать отчёт]
Научился: Углубил знания по работе в сети 
Сложности: Не было сложностей 
Комментарии: Запуск экзэшника  в качестве одного из режимов (Сервер или Клиент) не позволяет просматривать переменные во время отладки. Мне удалось запустить два экземпляра  VS и видеть переменные Севера и Клиента. 
21 Сокобан - Завершение 00:37:44
49 чел. ★ 5 Done
  Игра уже написана, но всегда можно сделать чуть-чуть лучше.
На этом уроке мы объединим оба варианта игры в одну программу
и загрузим файл с уровнями в ресурсы программы.
Теперь в одном ехешнике будет сразу всё!
Это финиш!!!
Отчёт отправил: 11589. Yefim Выполнено за 1 час. 20 мин. [Показать отчёт]
Научился: Дoбавлять в pесуpсы фaйлы и читать из них информацию. Объединять разные режимы игры в единный игровой комплекс.  
Сложности: Не было сложностей. 
Комментарии: Внёс небольшое, но полезное дополнение: в функцию buttonStart_Click для каждого режима после Labirint = new LabirintForm(...); обновляю Labirint.Text = radioХХХХХ.Text;             if (radioSingle.Checked) {                 Labirint = new LabirintForm();                 Labirint.Text = radioSingle.Text;             } Дал режиму 2 более короткое, хотя и ироничное название:"Двойная игра"  
22 ФИНАЛЬНЫЙ урок. Видео-обзор проекта Сокобан 00:23:23
35 чел. ★ 5 Done
  Задание:
Записать видеообзор игры СОКОБАН.

Отчёт отправил: 11589. Yefim Выполнено за 1 час. 11 мин. [Показать отчёт]
Научился: Презентовать свой програмный продукт 
Сложности: Из-за предновогодней суеты трудно было найти время для выполнения задания 
Комментарии: Работа по видео презентации в процессе. В ближайшие дни постараюсь ее завершить. 
23 VIP. Бот для игры БАЛДА 01:22:57
16 чел. ★ 5 Done
  Используя текстовый файл из 27400 слов
создаём рекурсивный алгоритм подбора
слов для популярной игры Балда.
Отчёт отправил: 11589. Yefim Выполнено за 2 час. 22 мин. [Показать отчёт]
Научился: Научился пользоваться некоторыми свойствами Словаря. 
Сложности: Не все ясно в работе со словарями 
Комментарии: Бот Балда получен как подарок за окончание курса СОКОБАН. Большое Спасибо! Очень хороший приз. Однако, по Сокобану за мной остался должок в виде Заключительного видео обзора. Его пришлось отложить из-за технических проблем. Звук записывался с большими шумами. На днях удалось записать звук отдельно с помощью мобильного телефона и затем пришлось накладывать звук на видео. Приятного просмотра. 
Видеообзор: 28v8p_kPiuk
  Итого:   23 видеоурока 13 час. 51 мин.
20 тестов
12 чел. ★ 4.98  
  Финалисты:   LINKI,   Новопашин Владимир,   Tekashnik,   Алексей В.,   zhikharevav,   Evgenii Kudriavtcev,   chokayes,   Дмитрий,   Максим Лапшинов,   no name,   Max,   MaxB .

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





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

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

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

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


Научился: Сделано, Ура! Записал и сделал видеоролик.
Трудности: Создать видеоролик, но все уже пройдено. Следующие будет намного легче =)



Научился: Запись видео обзора на разработанный продукт.
Трудности: Побороть свою лень)))
ОООООООЧЕНЬ крутой, интересный курс!!!! Рекомендую всем!
Смотреть видеозапись: https://www.youtube.com/watch?v=JJWEkydnemY