Изучение c# на примерах

Формула программиста
основатель — Волосатов Евгений Витольдович

Боты Сапёра

Сначала мы напишем игру Сапёр.
Потом напишем алгоритм ИИ поиска мин.
И наконец создадим Бота для прохождения
программы MineSweeper от Microsoft.
На вип-уроке будет хакерский бот.



32 урока
10 часов 56 минут.

Хочу купить!

Купить в рассрочку за мегахеши

Цена: 2000 p.


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

# Название видеоурока Решило Рейтинг Доступ
1 ИГРА - Счастливый сапёр 00:10:45 28 чел. ★ 4.9 Done
  Мы начинаем создание популярной игры сапёр.
Эта игра - отличное урпажнение для начинающего программиста.

Отчёт отправил: 10670. Сергей Соколов Выполнено за 25 мин. [Показать отчёт]
Научился: Играть в сапёра, рисовать блок-схему =) 
Сложности: =) 
Комментарии: =) 
2 ИГРА - Минная картотека 00:11:57 24 чел. ★ 5 Done
  На этом уроке мы проанализируем блок-схему проекта
подготовим форму для проекта, загрузим все картинки.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 25 мин. [Показать отчёт]
Научился: особо ничему =) 
Сложности: все просто 
Комментарии: =) 
3 ИГРА - Классные мины 00:20:47 22 чел. ★ 5 Done
  На этом уроке мы создадим класс Mines,
в котором опишем все необходимые константы
и напишем функции Init(), PlaceMines(), PlaceCounter().

Отчёт отправил: 10670. Сергей Соколов Выполнено за 25 мин. [Показать отчёт]
Научился: Научился создавать класс Mines на C#. 
Сложности: все просто 
Комментарии: =) 
4 ИГРА - Матрица картинок 00:25:08 22 чел. ★ 5 Done
  На этом уроке мы сделаем вывод картинок на экран.
Для этого мы напишем функцию PlaceBox(),
которая будет создавать катинки и размещать их на панель.
Потом мы создадим матрицу картинок.
В конце урока мы сделаем автоматическое
изменение картинок при ресайзинге формы.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 25 мин. [Показать отчёт]
Научился: Размещать плашки на форме 
Сложности: все просто=) 
Комментарии: =) 
5 ИГРА - Карта минного поля 00:19:35 21 чел. ★ 5 Done
  На этом уроке мы отобразим минное поле.
Для это нам потребуется функция
private Bitmap ShowPicture (int number) и
private void ShowBox (int x, int y, int number)
а также делегаты для их вызова из класса Mines.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 25 мин. [Показать отчёт]
Научился: Выводить картинки с минами и цифрами на форму =) 
Сложности: все просто 
Комментарии: =) 
6 ИГРА - Зелёный флаг 00:17:40 21 чел. ★ 5 Done
  На этом уроке мы сделаем обработку клика
правой кнопкой мышки для установки флага.
Для этого нам потребуется сохранять и считывать
координаты клетки в поле Tag каждого PictureBox.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 35 мин. [Показать отчёт]
Научился: Обрабатывать нажатие мыши на боксиках. Рисовать флаг по правой кнопке мыши, и открывать поле по левой. 
Сложности: затруднений не возникло 
Комментарии: =) 
7 ИГРА - Алгоритмический подход 00:13:27 21 чел. ★ 5 Done
  На этом уроке мы напишем основную часть
алгоритма обработки левой кнопки мышки.
Мы разделим эту задачу на несколько
вспомогательных функций, которые
вы можете реализовать самтостоятельно.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 30 мин. [Показать отчёт]
Научился: Писать алгоритм OpenBox() 
Сложности: С такими видео уроками что может быть сложным? 
Комментарии: =) 
8 ИГРА - Бомбовые алгоритмы 00:29:29 20 чел. ★ 5 Done
  На этом уроке мы допишем остальные функции и поиграем в созданную игру.
Вам останется довести программу до ума,
сделать сообщение об окончании игры и
все остальные элементы игры,
по желанию и по фантазии.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 35 мин. [Показать отчёт]
Научился: Дописал оставшиеся функции. Уже можно играть!  
Сложности: все просто 
Комментарии: =) 
9 ТРЕТЬФИНАЛЬНЫЙ УРОК 20 чел. ★ 5 Done
  Поздравляю с завершением курса по созданию игры Сапёр.
Однако создание игры на этом ещё не закончено.
Твоя задача - придумать, что ещё можно/нужно
добавить в игру и реализовать это.
Запиши видеообзор своей игры и расскажи,
что ты добавил в неё самостоятельно.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 45 мин. [Показать отчёт]
Научился: Писать программу сапёр на С# и реализовывать те вещи которых на мой взгляд не хватало. 
Сложности: Все трудности которые встречались удавалось достаточно быстро решить. =) 
Комментарии: отличный курс получился, спасибо! 
Видеообзор: https://youtu.be/7n0KdZHPU8I
10 ИИ - Как пройти игру 00:03:38 19 чел. ★ 4.9 Done
  Мы начинаем создание Искусственного Интеллекта для игры Сапёр,
для чего нам потребуется несколько этапов.
1. Описание и понимание идеи алгоритма.
2. Ручная проработка алгоритма на практике.
3. Создание класса для логики ИИ.
4. Внедрение его в наш проект для тестирования.
5. Создание бота для чужой игры Сапёр.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 21 мин. [Показать отчёт]
Научился: ничему 
Сложности: придумать алгоритм  
Комментарии: Я на знаю как можно получить данные от игры сапёр, но в общем нужно каким-то образом считывать те цифры которые видны во время игры и исходя из них рассчитывать где точно есть мины, а где их точно нет. 
11 ИИ - Очевидные шаги 00:09:00 19 чел. ★ 5 Done
  На этом уроке мы отработаем базовый,
самый очевидный алгоритм разминирования,
который основан на открытии очевидных клеток.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 55 мин. [Показать отчёт]
Научился: Искать и отмечать очевидные клетки с минами 
Сложности: Искать и отмечать очевидные клетки с минами 
Комментарии: =) 
12 ИИ - Пересечение множеств 00:34:53 17 чел. ★ 5 Done
  На этом уроке у нас будет матчасть, логика ИИ.
Мы решим задачу с пересекающимися множествами
через систему неравенств. Узнаем, в каком
случае может быть единственный ответ,
и как его просчитать простой формулой,
чтобы разделить два пересекающихся
множества на три непересекающихся.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 2 час. 35 мин. [Показать отчёт]
Научился: Проходить сапёра с помощью двух методов вычисления мин: поиском очевидных мин и методом который описан в видео уроке.  
Сложности: проходить сапёра и делать урок  
Комментарии: =) 
13 ИИ - Класс группы 00:17:28 18 чел. ★ 4.9 Done
  На этом уроке мы начнём создание проекта
логики бота сапёра. Мы создадим структуру
с координатами клеток и опишем поля и
методы класса Group, в котором будут
храниться логические группы минного поля.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 24 мин. [Показать отчёт]
Научился: Создавать структуру Coord и класс Group Узнал что если ввести три "/" то автоматически будет создана удобная структура для комментариев 
Сложности: все просто 
Комментарии: =) 
14 ИИ - Элементарные алгоритмы 00:10:03 16 чел. ★ 5 Done
  На этом уроке мы реализуем два элементарных
алгоритма определения пустых клеток и клеток
с минами, а также проверим, как это работает.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 14 мин. [Показать отчёт]
Научился: Создал методы GetFlags(), GetEmpty() и AddTab()  
Сложности: все просто =) 
Комментарии: =) 
15 ИИ - Жучкин алгоритм 00:39:05 16 чел. ★ 4.9 Done
  На этом уроке мы внедрим наш элементарный
алгоритм в рабочую программу и создадим
кнопочку, по нажатию которой будут
отмечаться все явные мины и пустые клетки.
Минут 15 в уроке ушло на поиск ошибки.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 40 мин. [Показать отчёт]
Научился: Сделал кнопку Hint, выделена на скриншоте Реализовал алгоритм формирования групп Клетки открыты, флаги отмечены =) 
Сложности: в уроке всё рассказано =) 
Комментарии: =) 
16 ИИ - Вспомнить всё 00:23:17 16 чел. ★ 5 Done
  На этом уроке мы вспомним и повторим, что было на прошлых уроках.
Для чего нужен класс Group и как он используется для поиска мин на карте.
В этом уроке мы почти ничего писать не будем, просто освежим всё в памяти.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 30 мин. [Показать отчёт]
Научился: Еще раз вспомнил алгоритм пересечения множеств.  
Сложности: играть в сапёра =) 
Комментарии: =) 
17 ИИ - Операции со множествами 00:15:19 16 чел. ★ 5 Done
  На этом уроке мы напишем основные методы для работы со множествами:
сравнение, пересечение и вычитание множеств.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 20 мин. [Показать отчёт]
Научился: Писать функцию SameTabs() Intersect() и Minus() 
Сложности: ничего 
Комментарии: =) 
18 ИИ - Множественное тестирование 00:06:46 16 чел. ★ 4.9 Done
  На этом уроке мы проведём тестирование
созданных методов операций над множествами.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 25 мин. [Показать отчёт]
Научился: Проводить тестирование функций которые были написаны на предыдущем уроке. 
Сложности: ничего 
Комментарии: =) 
19 ИИ - Ботовый алгоритм InterMines 00:17:38 16 чел. ★ 4.9 Done
  На этом уроке мы наконец-таки напишем код алгоритма,
о котором мы так много говорили в предыдущих уроках.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 24 мин. [Показать отчёт]
Научился: Написал функцию InterMines() и протестировал её 
Сложности: ничего 
Комментарии: =) 
20 ИИ - Открыть всё! 00:21:34 16 чел. ★ 5 Done
  На этом уроке мы перепишем по новому
алгоритм открытия всех клеток с
использованием класса Group.
Ура! Открываемость минного поля значительно возросла!
Это успех :)
Отчёт отправил: 10670. Сергей Соколов Выполнено за 30 мин. [Показать отчёт]
Научился: Переписал алгоритм который запускался при нажатии кнопки hint. Теперь он выделен в отдельную функцию StartBot(). Отличный алгоритм получился, и сапёр теперь проходится за секунды =) 
Сложности: ничего 
Комментарии: =) 
21 ВТОРОЙ ТРЕТЬФИНАЛЬНЫЙ УРОК 15 чел. ★ 5 Done
  Поздравляю с завершением создания Искуственного Интеллекта для решения Сапёра!

Ты молодец, написал искуственный интеллект,
и круто прокачал навыки алгоритмического мышления,
которое так важно для программиста, молодец!

Запиши видеообзор созданного бота и своей программы.

Впереди внедрение ИИ Бота для сторонней игры.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 1 час. 45 мин. [Показать отчёт]
Научился: Ура, бот готов! Это было не просто, но безумно интересно. Спасибо за такой отличный опыт. На этом видеокурсе я сначала научился создавать игру Сапёр, а потом её проходить. Ну а бот это отличный финал для всего. Еще я подглядел идею у Ивана и тоже попробовал замедлить работу бота, чтобы было наглядно видно как это работает. Вроде бы получилось! =) 
Сложности: замедлять работу бота =) 
Комментарии: Еще раз спасибо за такой отличный опыт! 
Видеообзор: https://youtu.be/9Y6E_5dWCiI
22 БОТ - Отмычка сапёра 00:31:45 15 чел. ★ 4.9 Done
  На этом уроке мы начнём создавать настоящего бота,
который будет проходить сапёра из Windows XP.
Мы найдём указатель на программу,
вычислим координаты окна игры,
запрограммируем несколько
щелчков мышкой по ней.

Для работы нам потребуется именно XP версия сапёра, её можно скачать здесь:
www.videosharp.info/data/docs/winmine.exe.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 25 мин. [Показать отчёт]
Научился: Получать ссылку на запущенное приложение и размеры окна приложения. Вычислять остальные необходимые координаты =) Проставлять по всему минному полю влажки 
Сложности: ничего 
Комментарии: =) 
23 БОТ - Пиксельный металлоискатель 00:25:10 14 чел. ★ 5 Done
  На этом уроке мы начнём создавать пиксельный металлоискатель.
По цвету пикселей на экране мы будем восстанавливать значение открытой карты.
Ваша задача - довести его создание до логического завершения.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 1 час. 40 мин. [Показать отчёт]
Научился: Сканировать пиксели в указанных координатах для определения их цвета.  
Сложности: Игру Жизнь не проходил :-( поэтому не сделал 
Комментарии: все отлично 
24 БОТ - Совместное фото 00:31:34 13 чел. ★ 5 Done
  Считывание пикселя с экрана работает крайне медленно.
Вместо этого было решено сделать скриншот всей программы.
Чтобы дальнейшую обработку производить напрямую,
а не через медленные вызовы WinAPI методов.

Цель урока - создание "Совместного фото",
на котором будут все возможные варианты клеток в игре.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 40 мин. [Показать отчёт]
Научился: Делать скриншот окна сапёра. Дорисовывать нужные цифры в Paint. 
Сложности: следить за ходом мысли Игромистра 
Комментарии: =) 
25 БОТ - Гадание по фото 00:39:50 13 чел. ★ 5 Done
  На этом уроке мы проанализируем созданную фотографию,
на предмет определения координат пикселей,
по цвету которых можно будет однозначно
определить значение в клетке сапёра.

Отчёт отправил: 10670. Сергей Соколов Выполнено за 55 мин. [Показать отчёт]
Научился: Гадать по скриншоту =) Выводить результат гаданий в виде С# кода =) 
Сложности: успевать за полётом мысли Игромистра =) 
Комментарии: =) 
26 БОТ - Сканер минного поля 00:23:55 13 чел. ★ 5 Done
  На этом уроке мы применим результаты анализа
в полевых условиях на запущенном минёре.
Сформируем карту по скриншоту минёра.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 45 мин. [Показать отчёт]
Научился: Заполнять массив по анализу запущенного минера 
Сложности: ничего 
Комментарии: У меня все работало до написания функции сравнения двух цветов, после её добавления и применения работать перестало, поэтому откатил всё назад. 
27 БОТ - Выход на финишную прямую 00:14:38 12 чел. ★ 5 Done
  На этом уроке мы проверим функциональность частей, которые нам нужно объединить.
Доработаем функцию doMouseClick() чтобы она умела открывать
клетки и ставить флажки по указанным координатам клеток.
Посмотрим, что необходимо переносить из предыдущего проекта.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 30 мин. [Показать отчёт]
Научился: Дорабатывать функцию doMouseClick() =) 
Сложности: ничего 
Комментарии: =) 
28 БОТ - Неуправляемый Интеллект 00:16:00 12 чел. ★ 5 Done
  На этом уроке мы внесём все необходимые изменения и запустим алгоритм.
К сожалению, он зациклился, в результате чего пришлось выходить из системы.
Но первый результат обнадёживает - клики Анализатор делал верные.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 25 мин. [Показать отчёт]
Научился: Перенес из предыдущего проекта необходимые классы и фрагмент кода. Адаптировал алгоритм к новым условиям =) 
Сложности: ничего 
Комментарии: =) 
29 БОТ - Всё открыто! 00:23:23 12 чел. ★ 5 Done
  На этом уроке мы завершим создание бота и
откроем все клетки минного поля с помощью нашего алгоритма.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 40 мин. [Показать отчёт]
Научился: Доделывать сапера. =) 
Сложности: взять себя в руки и доделать =) 
Комментарии: =) 
30 ФИНАЛЬНЫЙ УРОК 12 чел. ★ 5 Done
  Поздравляю!
Ты одолел Боты Минёра.
Теперь ты заслуженный Минёр.

Запиши видеообзор своих программ.
Какой видеокурс ты будешь проходить следующим?
Отчёт отправил: 10670. Сергей Соколов Выполнено за 50 мин. [Показать отчёт]
Научился: Записывать видеообзор бота для сапёра =) 
Сложности: записать обзор всегда не просто =) 
Комментарии: =) 
Видеообзор: https://youtu.be/Fz0LlIcegEE
31 VIP - Хакерский подход 00:19:57 12 чел. ★ 5 Done
  На этом уроке мы напишем хакерскую программу для вскрытия Сапёрного поля.
Отчёт отправил: 10670. Сергей Соколов Выполнено за 40 мин. [Показать отчёт]
Научился: Выигрывать в сапёра на любом уровне за 1 секунду =) 
Сложности: ничего 
Комментарии: =) 
32 VIP - Жизнь у Сапёра 01:22:45 4 чел. ★ 5 $
  Напишите Игру жизнь.
Отобразите её на поле игры "Сапёр".
Для переключения клеток используйте клики ПКМ по клеткам.
  Итого:   32 видеоурока общей продолжительностью 10 час. 56 мин. 4 чел. ★ 4.98  
  Финалисты:   Иван Воронин,   Кирилл Шмойлов,   Tekashnik,   Yefim .

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




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

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

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

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


Научился: Быстро проходить игру сапер на любой сложности
Трудности: Осилить до конца весь курс)
Отличный видеокурс, на котором не только создали собственного сапера и его взломали, но и взломали сапера от microsoft


Научился: Курс очень интересный, деньги отданы не зря - это точно! Теперь в сапере у меня рекорд во всех уровнях - 1 сек