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

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

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

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

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

После взноса 512 256 руб. вы получите подписку
в Клуб Формулистов на 30 дней и 256 байт для быстрого старта.
Байты используются для открытия более одного урока в день, по 50 байт за урок.

Стоимость 1 дня за первый месяц: всего 8 рублей.

Первый взнос - 256 руб./30 дней.

Через 30 дней будет списано 3,000 2,400 руб.
за продление подписки в Клуб на 30 дней + подарок 512 байт.

Так будет продолжаться каждые 30 дней, пока вы не отмените подписку.
Средства будет автоматически считываться с вашей карты.
Вы в любой момент сможете отказаться от продления Клуба.

Только ДО КОНЦА НЕДЕЛИ -
-50% скидка на первый взнос, всего 256 рублей!
-20% скидка на ЕЖЕМЕСЯЧНЫЙ платёж!
Всего 2400 руб/месяц (вместо 3000 руб/месяц), или 80 руб./день - цена чашки кофе.


Стоимость 1 дня: 80 руб.

Хочу вступить!

Также есть другие варианты оплаты участия в КФ:

Билет в клуб формулистов на ...
30+ дней | 60 дней | 150 дней | 380 дней | 1000 дней

Внимание!
Стоимость участия в Клубе формулистов увеличивается 1 числа каждого месяца на 100 рублей.
При оформления подписки стоимость остаётся постоянной, пока подписка не будет отменена.







Первый взнос - 512 руб./30 дней + 512 байт.
Последующие взносы - 3,000 2400 руб./месяц + 512 байт.



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

# Название видеоурока Видео / Тесты Решило Рейтинг Доступ
1 FREE Сокобан - Вступление 00:11:09
149 чел. ★ 4.8 Done
  Я приглашаю вас на видеокурс по созданию полноценной игровой программы СОКОБАН. Я проведу вас за руку по всем этапам создания законченной интеллектуальной игры:
1. Создание редактора уровней.
2. Придумывание этих самых уровней.
3. Создание собственно игры.
4. Решение олимпиадной задачки для добавления ИИ.
5. Переделка игры в режим "на двоих".
6. Написание класса Phone для связи двух программ по сети.
7. Создание сетевой версии игры Sokoban.
Будет интересно!

В конце видео - первое задание: Научиться играть! :)
Ссылка на игру Сокобан
Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Ничего нового 
Сложности: найти время 
Комментарии: Нашёл сайт, на котором можно онлайн играть в игры ZX Spectrum, даже TRD формат 5,25'' дискетки (TR-DOS 128kb) 
2 FREE Сокобан - Подготовка - Картинки и лабиринт 00:04:56
107 чел. ★ 4.9 Done
  На этом уроке мы подготовим 6 пиктограмм и две картинки для игры,
а также придумаем свой собственный уровень, который запишем в текстовый файл.

Отчёт отправил: 10558. Иван Воронин Выполнено за 30 мин. [Показать отчёт]
Научился: Ничему новому 
Сложности: найти время 
Комментарии: Состряпал пока что абстрактные картинки начального меню и окна поздравления, в будущем будет изменено (добавлены новые элементы). Подготовил текстуры игровых объектов 32х32 (для персонажа их несколько на каждое направления движения). Уровень нарисовал самый первый, но в своём стиле символов. 
3 Сокобан - Редактор - Загрузка 00:33:25
102 чел. ★ 5 Done
  Мы начинаем создавать редактор уровней
для известной логической игры Sokoban.

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

Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Как видно на скриншоте, строки в уровнях разной длинны для оптимизации размера файла. Добавил проверку в цикле загрузки уровней для поддержки строк разной длинны. 
4 Сокобан - Редактор - Интерфейс 00:40:37
87 чел. ★ 5 Done
  На этом уроке мы создадим интерфейс программы
и сделаем отображение загруженного уровня на экране.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: ToolStrip впервые использовал 
Сложности: найти время, стараться не внедрять свои фишки, чтобы было чем заняться на след. уроках. 
Комментарии: Отличный урок, добавил заготовки для кнопок загрузки/сохранения и переключение уровней влево/вправо, пока без текстур. 
5 Сокобан - Редактор - Редактирование 00:38:33
80 чел. ★ 5 Done
  На третьем уроке мы сделаем наконец-таки редактирование поля.
Также реализуем возможность изменения размера лабиринта.
В конце напишем функцию для проверки корректности составленного уровня.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Закрепил пройденное 
Сложности: найти время 
Комментарии: Отличный урок, стараюсь пока особо не модифицировать код, будет ещё такая возможность =) 
6 Сокобан - Редактор - Сохранение 00:44:47
77 чел. ★ 4.9 Done
  На четвёртом уроке мы закончим создание редактора уровней.
Напишем самую главную функцию для сохранения сделанных изменений в файл.
Затем добавим кнопки перехода к следующему и предыдущему уровню.
Останется только немного облагородить интерфейс программы.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Закрепил пройденное 
Сложности: найти время 
Комментарии: Сделал и добавил все необходимые картинки для сохранения уровня, переключения между уровнями и кнопка ресайза уровня. так же добавил статусбар, где сообщает всё ок или какие либо ошибки, которые были найдены после загрузки уровня или при попытке его сохранить. Добавил проверку, чтобы добавлялся только один новый файл в конец файла уровней, пока он не будет без ошибок, следующий новый уровень добавить нельзя. 
7 Сокобан - Редактор - Улучшение 00:29:00
74 чел. ★ 5 Done
  Допиливаем и дорабатываем редактор до товарного вида.
Реализуем ещё несколько фишек.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Событию MouseWheel 
Сложности: найти время 
Комментарии: Разделил установку ширины и высоты уровня по разным TextBox, при установке вручную размеров и нажатии на Enter обновляется размер поля, если же размер поля уже таковой, обновления поля не будет, смысла нет =) При наведения на окошки ширины и высоты уровня курсора мыши, можно роликом мышки устанавливаться размеры (уменьшая/увеличивая) учитываются лимиты =) Если количество ящиков и мест для них не равны друг другу, они подсвечиваются красным. Алгоритм заливки поля выбранным объектом сделал по своему, потом посмотрел реализацию на видео и понял, что моя версия веселее =) Подсчёт ящиков и мест для них тоже реализовал по своему, использовав ранее созданный CountItems(), после чего посмотрел далее видео и понял, что про этот метод забыли видимо =) Заменил событие подгонки размера поля уровня только при отпускании мыши после изменения размеров формы. При обновлении количества ящиков и мест для них так же проверяется уровень на корректность, если имеется ошибка, она отображается в статусбаре. 
8 Сокобан - Редактор - Классика уровней 00:03:16
1 тест
23 чел. ★ 5 Done
  На этом уроке вам нужно выбрать любых два классических уровня
и создать их в нашей программе-редакторе.

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

Редактор можно скачать здесь:
https://www.videosharp.info/data/soft/SokobanEditor.zip
Отчёт отправил: 10558. Иван Воронин Выполнено за 5 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Так как я изначально добавлял классические уровни, только из версии ремейка, то у меня тут и травка и ящики белые, это аналог стен, только внутри помещения, они не проходим и не движимы. Поэтому просто сопоставил уровни из классики с аналогами, которые я уже реализовал ранее, при прохождении курса. Отличный сайт, просмотрю все уровни и добавлю недостающие, скорее всего тут они имеются. 
9 Сокобан - Создаём свои уровни 00:08:05
1 тест
72 чел. ★ 4.9 Done
  Твоя задача - подготовить базу уровней для игры Сокобан.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Ничему новому 
Сложности: найти время 
Комментарии: Сделал пока 14 уровней, все рисовал сам, честно!!! А вот придумывал не все сам =) 
10 Сокобан - Игра - Интерфейс 00:43:45
1 тест
73 чел. ★ 5 Done
  Мы начинаем создание интеллектуальной игры СОКОБАН.
У нас уже есть все необходимые классы и уровни для создания полноценной игры.
На этом уроке мы создадим форму и настроим интерфейс окна лабиринта.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 30 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: На основном меню добавлено 3 пункта: 1 - Редактор (при клике открывается созданный ранее редактор карт, см. скриншот). 2 - Играть (при клике открывается форма с началом игры, см. скриншот). 3 - Выход (при наведении иконка двери как бы открывается, при клике выход из меню и закрытие приложения). При наведении мыши на пункты меню, они подсвечиваются инверсированно аля спекки. Так же можно выбирать пункты меню при помощи стрелок на клавиатуре и клавиши Enter для активации пункта. При движении стрелками в какую либо из сторон, курсор выбора пунктов меню бегает по кругу. 
11 Сокобан - Игра - Управление 01:06:38
2 теста
64 чел. ★ 5 Done
  Теперь мы создадим класс логики игры Game,
используя который, мы реализуем управление человечком
курсорными клавишами клавиатуры.
А также сделаем переход на следующий уровень.
Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 00 мин. [Показать отчёт]
Научился: Логике сдвигания объектов персонажем 
Сложности: найти время 
Комментарии: Старался делать вначале сам, потом снимал видео с паузы, по поводу того, как советовал Orange увеличивать доступный для прохождения уровень, я так же сделал, потом смотрел видео. Добавил вначале поворот человечка в направлении движения, для того, чтобы он как будто бы пытался толкать то, что не может, стены или ещё что. Добавил отображение сообщения с поздравлениями о всех пройденных уровнях. Отображение объектов на игровом поле реализовал по своему, как и ранее в других играх, при этом объекты из матрицы top реально находятся поверх объектов из матрицы map, так под ногами человечка видно то, по чему он ходит =) 
12 Сокобан - Решалка - Тестер 00:59:55
1 тест
59 чел. ★ 5 Done
  На этом уроке мы напишем программу, которая будет
проверять правильность алгоритма поиска решения лабиринта.
http://www.videosharp.info/console/task/level=1178
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Движению объекта по заданному пути, влияя на движимые объекты. 
Сложности: найти время 
Комментарии: Отличный урок, но это видимо только обкатка работа на основе заранее известного маршрута, далее будем писать алгоритм поиска всех возможных маршрутов для решения задачи. 
13 Сокобан - Решалка - Мышка 00:53:02
1 тест
58 чел. ★ 5 Done
  Мы начинаем решать задачу по решению игры Сокобан с одним ящиком.
Эта задача олимпиадного уровня на применение алгоритма поиска вширь.
Главный герой - мышка Альфа, которая желает затолкать яблочко к себе в норку.
Программу мы напишем за два урока.
На первом уроке мы создадим вспомогательную функцию MoveAlfa(),
которая подскажет мышке как попасть из одной клетки лабиринта в другую кратчайшим путём.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Уже делали такое в курсе "Комбинаторика" на этом проекте, на уроке "Динамика. Выход из Лабиринта" 
14 Сокобан - Решалка - Яблоко 00:44:23
2 теста
56 чел. ★ 5 Done
  На втором уроке мы переделываем написанный алгоритм поиска маршрута мышки.
Теперь мы разрешаем мышке толкать яблоко, и записываем все изменения их расположений.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Поиску пути для мышки с яблоком до норки. 
Сложности: найти время 
Комментарии: На скриншоте видно, что яблок 5, мышка 1, найден путь для ближайшего ящика 
15 Сокобан - Решалка - Оптимизация 00:11:37
1 тест
56 чел. ★ 5 Done
  На этом коротком уроке мы рассмотрим два способа оптимизации нашей программы, в результате которых работать она станет просто молниеносно!!!
Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 00 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Изначально я переписал уровень 32х32 с видео, повторил его символ в символ, чтобы проверить скорость на нём, но это было так долго, что я просто не дождался и взял один из своих уровней, модифицировал его и оставил только 1 ящик и 1 место куда его поставить надо, результаты на скриншоте и они внушительны (4 метода, Dictionary по скорости почти как HashSet). 
16 Сокобан - Игра - Автоходы 00:42:22
1 тест
53 чел. ★ 5 Done
  Поздравляю, программа уже создана: можно играть, можно ею хвастаться.
На этом уроке мы добавим в игру автоходы, чтобы можно было
управлять нашим человечком с помощью мышки - указать, куда идти,
и даже указать, какой ящик куда нужно поставить.
Для этого нам потребуются два класса по решению лабиринта.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 30 мин. [Показать отчёт]
Научился: Автоматизации ходов 
Сложности: найти время 
Комментарии: Отличный урок, реализовал недокументированные изменения в данном уроке, так же внёс свои оптимизации в движение носильщика на базе массива. Так же помимо исследования направления движения с ящиком, убрал проверку стоящего носильщика на пути, такое может быть если хотим передвинуть ящик куда-то, а на пути в данный момент стоит наш персонаж, но в момент движения его ведь там не будет. Сетка теперь только в редакторе, в самой игре убрана, чтобы было посложнее и красивее =) Поменял цвет точки куда надо ставить ящики, чтобы она просвечивалась сквозь щели ящика, а не сливалась из-за одинакового цвета с ящиком, который стоит на ней. 
17 Сокобан - Редактор - На двоих 00:31:57
1 тест
50 чел. ★ 5 Done
  Переделываем редактор уровней, чтобы можно было создавать лабиринты для двоих игроков.
Создаём базу из 10 новых уровней игры в Сокобан для двоих.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Самостоятельно добавил второго игрока. Внёс необходимые изменения везде где упоминается работа с первым игроком. Добавил иконку второго игрока рядом с первым. Добавил счётчик/выбор количества игроков роликом мыши или вручную введя число (огрничил лимитами от 1 до 2). При смене количества игроков, автоматически подгружается нужный файл уровней (не поднялась рука удалить уровни для одиночной игры). При сохранении уровня проверяется в каком режиме редактор (на двоих или нет) и на основе этого делаются проверки на второго игрока или нет. Так же уровни для одного и для двоих теперь хранятся в отдельных файлах (загрузка/сохранение происходит относительно того, в каком режиме редактор). 
18 Сокобан - Игра - На двоих 00:15:40
50 чел. ★ 5 Done
  Переделать игру, чтобы в неё можно было играть вдвоём на одной клавиатуре.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 30 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Игра запускается в режиме на двоих (в будущем в меню появится пункт выбора режима игры). В зависимости от того, в каком режиме игра запустилась, тот файл с уровнями она и подгружает. Управление реализовано как на клавиатуре, так и при помощи мыши (вначале выбираю кем ходить, потом говорю что ему делать как и ранее, двойной по ящику или обычный куда идти). Второй игрок так же поворачивается в сторону движения. Как видно на скриншоте, реализован реально два слоя объектов (человечек ходит поверх травки и ящики тоже могут на травке лежать). 
19 Сокобан - Телефон - TCP/IP протокол 00:47:44
1 тест
61 чел. ★ 5 Done
  На этом видеоуроке мы создадим три класса, которые удобно
использовать для передачи данных между двумя компьютерами.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Созданию Client-Server приложения 
Сложности: найти время 
Комментарии: Запустил сервер и клиент на разных ПК (см. скриншот). Как видно из скриншота, добавил установку адрес/порта для настройки подключения. 
20 Сокобан - Игра - На двоих по сети 00:56:59
1 тест
48 чел. ★ 5 Done
  На этом уроке мы наконец-таки сделаем сетевую версию программы Sokoban для двоих.
Мы будем использовать телефонный класс Phone с прошлого урока.

Отчёт отправил: 10558. Иван Воронин Выполнено за 3 час. 00 мин. [Показать отчёт]
Научился: Обмену пакетами по сети (Сервер-Клиент) 
Сложности: найти время 
Комментарии: В класс Phone добавил метод Stop() для завершения сетевой активности и разрыва связи, если выйти в игровое меню для выбора повторной сессии или поиграть одному/вдвоём на одном ПК. В меню настроек добавил чекбоксы для настройки режима игры (радиобаттон не использовал, так как хватило 3 чекбоксов и 2 окна для ввода порта и адреса сервера). В тайтле информация о том, в каком режиме запущенна игра: Одиночный, На двоих, По сети (Сервер), По сети (Клиент). Модернизировал отрисовку игрового поля, чтобы оно рисовалось быстрее и по центру формы. Так же добавил отступы со всех сторон игрового поля, эдакий бордюр аля ZX-Spectrum (идею по его использованию отложил для финального видео-отчёта). При смене уровня, ресайзе формы и т.д. динамический изменяется и само игровое поле не нарушая пропорции и центровку. Запуск режимов игры реализовал по своей, логическое продолжение наработок с прошлых уроков (не создавал доп. конструкторы). При передаче пакетов о смене уровня, сервер ожидает ответа от клиента о успешном завершении данного деяния, чтобы отправить пакет о сбросе уровня, малоли, вдруг клиент успел уже побегать, чтобы устранить рассинхрон. В связи со своими наработками так же и управление по сети реализовано по своему, дабы минимизировать изменение кода для поддержки всех игровых режимов. Добавлена проверка при отправку/получение на предмет ПРАВ: менять уровни и делать сброс может только сервер. Незначительно изменив код, активировал поддержку управления персонажами при помощи мыши с возможностью автоходов по сети (каждый игрок автоматически управлять только своим персонажем при помощи мыши). Для получения/обработки пакетов особой сложности (типо смена уровня и т.д.) реализовал с использованием буфера из которого полученные пакеты достаются в порядке добавления. 
21 Сокобан - Завершение 00:37:44
45 чел. ★ 5 Done
  Игра уже написана, но всегда можно сделать чуть-чуть лучше.
На этом уроке мы объединим оба варианта игры в одну программу
и загрузим файл с уровнями в ресурсы программы.
Теперь в одном ехешнике будет сразу всё!
Это финиш!!!
Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 30 мин. [Показать отчёт]
Научился: Ничему 
Сложности: найти время 
Комментарии: Файлы уровней в ресурсы не добавлял, так как в пункте меню присутствует редактор карт. Позже планирую переписать систему хранения уровней, после чего можно будет реализовать передачу уровней от сервера к клиенту, чтобы можно было играть в уникальные карты и пополнять свой набор карт играя по сети с другими. Режим одиночной игры и не убирал, с каждым уроком только добавлял новые режимы, чтобы работали предыдущие. Поиск маршрута так же работает как в одиночке, так и по сети, всё это реализовал на прошлых уроках. Играть вдвоём на одном ПК тоже на прошлых уроках как добавил, так и не убирал, так же в нём работает поиск пути для обоих игроков, реализовал возможность управления мышью любого из них. Курс, где создаём своё портфолио ещё не проходил, поэтому данный пункт сделать не могу, но обязательно выполню, когда пройду данный курс и у меня будет своё портфолио =) Значительно улучшил сетевой режим, так же добавил возможность переподлючения при потери связи, теперь клиент получает текущий уровень на сервере после того как подключился. Добавил индикатор ходов, если игра на двоих, то он суммирует ходы обоих, чтобы было видно, сколько же ходов сделали, чтобы пройти уровень. 
22 ФИНАЛЬНЫЙ урок. Видео-обзор проекта Сокобан 00:23:23
32 чел. ★ 5 Open
  Задание:
Записать видеообзор игры СОКОБАН.
23 VIP. Бот для игры БАЛДА 01:22:57
15 чел. ★ 5 $
  Используя текстовый файл из 27400 слов
создаём рекурсивный алгоритм подбора
слов для популярной игры Балда.
  Итого:   23 видеоурока 13 час. 51 мин.
14 тестов
11 чел. ★ 4.98  
  Финалисты:   LINKI,   Новопашин Владимир,   Tekashnik,   Алексей В.,   zhikharevav,   Evgenii Kudriavtcev,   chokayes,   Дмитрий,   Максим Лапшинов,   Domination Agenda,   Max .

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





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

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

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

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


Научился: Презентовать свой програмный продукт
Трудности: Из-за предновогодней суеты трудно было найти время для выполнения задания
Работа по видео презентации в процессе. В ближайшие дни постараюсь ее завершить.


Вот мой обзор на курс Сокобан. Надо бы поправить описание урока. А то там требуется обзор на Пасьянс домино...