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

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

Боты Сапёра

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



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

Хочу купить!

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

Цена: 2000 p.


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

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

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

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

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

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

Впереди внедрение ИИ Бота для сторонней игры.
Отчёт отправил: 10673. Алексей Хонин Выполнено за 10 мин. [Показать отчёт]
Научился: Создавать бота для сапера 
Сложности: Так как между вебинарами по созданию бота были немалые перерывы, то самым сложным было все не забыть.  
Комментарии: Отличный видеокурс. Следующий видеокурс, который буду проходить это "Теория ООП" 
Видеообзор: https://youtu.be/avVFc6WMcWE
22 БОТ - Отмычка сапёра 00:31:45 15 чел. ★ 4.9 Done
  На этом уроке мы начнём создавать настоящего бота,
который будет проходить сапёра из Windows XP.
Мы найдём указатель на программу,
вычислим координаты окна игры,
запрограммируем несколько
щелчков мышкой по ней.

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

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

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

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

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




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

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

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

Ты в любой момент сможешь отписаться от рассылки.
Научился: Не все так просто, как может показаться на первый взгляд. Я честно и добросоветсно пытался сделать финальный видео-обзор, однако, столкнулся с пока непреодолимыми трудностями. Вот ссылки на мои промежутоянные видео обзоры. https://www.videosharp.info/11589/checking/sweep=1035/show=video https://youtu.be/X9Z8JqR7PIQ
Трудности: Рано или поздно мой Бот нарывается на мину, особенно при поединке с профессионалом. Интересно то, что тот же Бот в программе SharpSweeper работает безупречно. Вероятно, где-то закралась ошибка. Пока я ее не нашел. Решил запустить программу на другом компьютере, рассчитывая получить аналогичный результат. Но и тут меня ожидал сюрприз: Программа не генерирует Клики. Т.е никак не реагирует на сапера. Чем это можно объяснить? Не смотря ни на что, курс получился шикарный. Мои ожидания вполне оправдались. Огромное СПАСИБО Евгнению Витольдовичу! А я продолжу поиск ошибки. Моим следующим курсом будет Морской флот.

Добавил интерактивную легенду найденных уникальных объектов игрового поля при парсинге эталонного скриншота. остальные нововведения, которые добавлялись в процессе разработок на каждом уроке см. видео =) з.ы. плюс недокументированные изменения и оптимизации.