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

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

Боты Сапёра

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



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

Хочу купить!

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

Цена: 2000 p.


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

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

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

Отчёт отправил: 10558. Иван Воронин Выполнено за 30 мин. [Показать отчёт]
Научился: повторение пройденного 
Сложности: ничего 
Комментарии: Отлично, идём дальше 
4 ИГРА - Матрица картинок 00:25:08 22 чел. ★ 5 Done
  На этом уроке мы сделаем вывод картинок на экран.
Для этого мы напишем функцию PlaceBox(),
которая будет создавать катинки и размещать их на панель.
Потом мы создадим матрицу картинок.
В конце урока мы сделаем автоматическое
изменение картинок при ресайзинге формы.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: динамически размещать панель, а на ней объекты так же 
Сложности: ничего 
Комментарии: панель и боксики на панели добавляются динамически добавил метод ресайза при максимайзе формы, при возврате из максимайза обратно ресайз при изменении размера формы происходит в конце ресайза (т.е. тянешь форму, ничего не происходит, отпустил мышь, ресайзунлось) 
5 ИГРА - Карта минного поля 00:19:35 21 чел. ★ 5 Done
  На этом уроке мы отобразим минное поле.
Для это нам потребуется функция
private Bitmap ShowPicture (int number) и
private void ShowBox (int x, int y, int number)
а также делегаты для их вызова из класса Mines.
Отчёт отправил: 10558. Иван Воронин Выполнено за 40 мин. [Показать отчёт]
Научился: повторение пройденного 
Сложности: найти время 
Комментарии: для отображения данных из map[,] использовал .BackgroundImage, а для top[,] использовал .Image, для этого добавил в ShowBox() доп параметр (соответственно в делегат тоже) и разделил ShowPicture() на ShowMap() и ShowTop() з.ы. ну и все сопутствующие изменения в коде для работоспособности данного метода формирования картинки поля =) всё супер, идём дальше =)  
6 ИГРА - Зелёный флаг 00:17:40 21 чел. ★ 5 Done
  На этом уроке мы сделаем обработку клика
правой кнопкой мышки для установки флага.
Для этого нам потребуется сохранять и считывать
координаты клетки в поле Tag каждого PictureBox.
Отчёт отправил: 10558. Иван Воронин Выполнено за 40 мин. [Показать отчёт]
Научился: повторение старого 
Сложности: найти время 
Комментарии: при клике правой клавишей мыши добавил возможность ставить вопросик если там мина, то открывается взорвавшаяся (на красном фоне) 
7 ИГРА - Алгоритмический подход 00:13:27 21 чел. ★ 5 Done
  На этом уроке мы напишем основную часть
алгоритма обработки левой кнопки мышки.
Мы разделим эту задачу на несколько
вспомогательных функций, которые
вы можете реализовать самтостоятельно.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: повторение старого 
Сложности: найти время 
Комментарии: добавил метод отображения всех мин, если подорвался на одной 
8 ИГРА - Бомбовые алгоритмы 00:29:29 20 чел. ★ 5 Done
  На этом уроке мы допишем остальные функции и поиграем в созданную игру.
Вам останется довести программу до ума,
сделать сообщение об окончании игры и
все остальные элементы игры,
по желанию и по фантазии.
Отчёт отправил: 10558. Иван Воронин Выполнено за 4 час. 00 мин. [Показать отчёт]
Научился: повторение старого 
Сложности: ничего 
Комментарии: заменил gameOver на gamePhase, так как 3 игровых фазы и bool было маловато неверно проставленные флажки превращаются в ложные мины (перечёркнутые) при подрыве на настоящей в тайтле приложения после начала игры отображается статистика: сколько осталось открыть безопасных клеток до победы и сколько осталось флажков, если флажки кончились, вместо них ставятся только вопросики (если флажки ещё есть, можно перебирать вопросик или флажок) добавил сообщение о победе/проигрыше, после чего игра начинается с нуля рефакторинг кода (повторяющиеся действия вынес в общий метод/функцию) 
9 ТРЕТЬФИНАЛЬНЫЙ УРОК 20 чел. ★ 5 Done
  Поздравляю с завершением курса по созданию игры Сапёр.
Однако создание игры на этом ещё не закончено.
Твоя задача - придумать, что ещё можно/нужно
добавить в игру и реализовать это.
Запиши видеообзор своей игры и расскажи,
что ты добавил в неё самостоятельно.
Отчёт отправил: 10558. Иван Воронин Выполнено за 24 час. 00 мин. [Показать отчёт]
Научился: закрепил полученные ранее знания 
Сложности: перестать добавлять фишки (идеи ещё есть) ну и найти время на всё это =) 
Комментарии: Список нововведений относительно базовой версии из курса “Сапёр на C#”: Как обычно создал уникальную иконку для бинарника и форм. Нарисовал текстуры в цветовой палитре ZX Spectrum. Добавлена возможность выбора сложности игры. При выборе сложности, динамически изменяется размер поля. Отображается галочка напротив выбранной сложности. Добавлены ограничения по количеству мин относительно размеров поля. Ограничение клеток по высоте и ширине, для удобства восприятия. Добавлена форма настроек “Особой...” игры. Количество мин трёхзначное. Ограничение по минимальной высоте и ширине поля в зависимости от размера поля. Добавлена форма отображения “Чемпионов” и соответствующий пункт меню. Добавлен счётчик игрового времени независимый для каждой сложности. “Чемпионы” хранятся в отдельном файле. Добавлена система сохранения текущей игры в соответствующий файл. Если при выборе сложности найдено сохранение для неё, то загружается карта поля и можно продолжить игру, если же файл не найден, повреждён или параметры отличаются от выбранных, файл удаляется, а игровое поле генерируется с нуля. Добавлена возможность сохранять текущие параметры игры. При закрытии и открытии игра запускается с последними выбранными параметрами и загружает сохранение игры если оно найдено и корректно. В начале игры или при загрузке сохранения игра становится на паузу до первого клика, в тайтле отображается текущее время, потраченное на данную карту. Как только игра закончена (победили/проиграли), то сохранение текущей игры удаляется. Добавлена форма ввода “Имени рекордсмена” для сохранения в списке “Чемпионов”. Добавлена поддержка формата mp3. Добавлены 4 мелодии формата ZX Spectrum с оригинальных дискет для окна «О игре». При открытии окна «О игре», треки чередуются по очереди (музыка играет по кругу пока не закрыть окно, при этом сама игра становится на паузу, таким образом можно подумать над очередным ходом под ностальгические мелодии). Добавлены звуки: тиканье таймера и взрыв бомбы. В папке “data” файлы расположены по типу: “save” и “sound”. Если побит рекорд, открывается окно ввода “Имени рекордсмена”, после чего открывается список “Чемпионов”. Оптимизирован размер сохранений игры (теперь они весят в 4 раза меньше). Добавлено отображение версии и билда игры в окне «О игре». 
Видеообзор: https://youtu.be/gzJXIH3nWLU
10 ИИ - Как пройти игру 00:03:38 19 чел. ★ 4.9 Done
  Мы начинаем создание Искусственного Интеллекта для игры Сапёр,
для чего нам потребуется несколько этапов.
1. Описание и понимание идеи алгоритма.
2. Ручная проработка алгоритма на практике.
3. Создание класса для логики ИИ.
4. Внедрение его в наш проект для тестирования.
5. Создание бота для чужой игры Сапёр.
Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: повторение пройденного материала 
Сложности: найти время 
Комментарии: по поводу внутри игрового алгоритма: пробегать по всему полю в поиске цифр, если нашли клетку с цифрой, то считаем сколько вокруг неё флажков и не открытых клеток, потом отнимаем от этой цифры количество флажков и если это равно 0, то кликаем по цифре, если же не равно 0, смотрим сравниваем полученное число с количеством не открытых клеток, если оно совпало, то ставим флажки на неоткрытых клетках вокруг цифры и так до тех пор, пока не кончатся клетки для обработки подобным образом. по поводу считывания данных с чужого сапёра, вариантов несколько, самый простой это анализ клеток поля по цвету который присутствует в них. обычно в сапёрах цифры разноцветные, если же такой способ сложен, можно использовать матрицы пикселов для сравнения типо топологии клеток, подобный способ проблем обычно не имеет, есть ещё один способ, написать хук код, чтобы внедрится в код приложения и получить доступ к массиву данных а там уже дело техники =) 
11 ИИ - Очевидные шаги 00:09:00 19 чел. ★ 5 Done
  На этом уроке мы отработаем базовый,
самый очевидный алгоритм разминирования,
который основан на открытии очевидных клеток.
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: закрепление пройденного материала 
Сложности: ничего 
Комментарии: вроде больше нет 100%, проверил несколько раз =) з.ы. в углу единичка, это я по углам кликал, пока не наткнулся на угол, в котором открылось больше клеток и подходил очевидный алгоритм 
12 ИИ - Пересечение множеств 00:34:53 17 чел. ★ 5 Done
  На этом уроке у нас будет матчасть, логика ИИ.
Мы решим задачу с пересекающимися множествами
через систему неравенств. Узнаем, в каком
случае может быть единственный ответ,
и как его просчитать простой формулой,
чтобы разделить два пересекающихся
множества на три непересекающихся.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: поиску мин путём пересекающихся множеств 
Сложности: найти время 
Комментарии: на втором скриншоте прошёл Любителя, из прошлого урока, данным методом =)  
13 ИИ - Класс группы 00:17:28 18 чел. ★ 4.9 Done
  На этом уроке мы начнём создание проекта
логики бота сапёра. Мы создадим структуру
с координатами клеток и опишем поля и
методы класса Group, в котором будут
храниться логические группы минного поля.
Отчёт отправил: 10558. Иван Воронин Выполнено за 20 мин. [Показать отчёт]
Научился: закрепление пройденного материала 
Сложности: ничего 
Комментарии: назвал табуляторы ячейками, а вместо SortedSet использовал HashSet, идём дальше 
14 ИИ - Элементарные алгоритмы 00:10:03 16 чел. ★ 5 Done
  На этом уроке мы реализуем два элементарных
алгоритма определения пустых клеток и клеток
с минами, а также проверим, как это работает.
Отчёт отправил: 10558. Иван Воронин Выполнено за 30 мин. [Показать отчёт]
Научился: закрепил пройденный материал 
Сложности: ничего 
Комментарии: отличное начало реализации помощника для игры "Сапёр" =) идём дальше 
15 ИИ - Жучкин алгоритм 00:39:05 16 чел. ★ 4.9 Done
  На этом уроке мы внедрим наш элементарный
алгоритм в рабочую программу и создадим
кнопочку, по нажатию которой будут
отмечаться все явные мины и пустые клетки.
Минут 15 в уроке ушло на поиск ошибки.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 30 мин. [Показать отчёт]
Научился: повторил пройденный материал 
Сложности: ничего 
Комментарии: При переключении между режимами игры, пауза не ставится, если была найдено и успешно загружено сохранение. При активации паузы через окно "О игре" игры переносится в режим "Особые...", в этом режиме уже не попасть в таблицу Чемпионов. Добавлена логика игры для реализации "Подсказки" - аналогия Бота, который открывает и помечает поле если уверен на 100% Активация "Подсказки" осуществляется через пункт меню: "Справка - Подсказка", либо нажатием на горячую клавишу: F9 
Видеообзор: https://youtu.be/pgH9ZwDKS64
16 ИИ - Вспомнить всё 00:23:17 16 чел. ★ 5 Done
  На этом уроке мы вспомним и повторим, что было на прошлых уроках.
Для чего нужен класс Group и как он используется для поиска мин на карте.
В этом уроке мы почти ничего писать не будем, просто освежим всё в памяти.
Отчёт отправил: 10558. Иван Воронин Выполнено за 30 мин. [Показать отчёт]
Научился: повторение пройденного 
Сложности: найти время 
Комментарии: Очень интересный курс, спасибо за продолжение =) 
17 ИИ - Операции со множествами 00:15:19 16 чел. ★ 5 Done
  На этом уроке мы напишем основные методы для работы со множествами:
сравнение, пересечение и вычитание множеств.
Отчёт отправил: 10558. Иван Воронин Выполнено за 45 мин. [Показать отчёт]
Научился: повторение пройденного 
Сложности: ничего 
Комментарии: отличная идея реализовать данный алгоритм вручную для наглядности, а реализовать при помощи методов HashSet можно будет потом, как домашнее задание =) 
18 ИИ - Множественное тестирование 00:06:46 16 чел. ★ 4.9 Done
  На этом уроке мы проведём тестирование
созданных методов операций над множествами.
Отчёт отправил: 10558. Иван Воронин Выполнено за 30 мин. [Показать отчёт]
Научился: повторение пройденного 
Сложности: ничего 
Комментарии: Данное тестирование выявило ошибки при копипасте, при спешке такое бывает =) 
19 ИИ - Ботовый алгоритм InterMines 00:17:38 16 чел. ★ 4.9 Done
  На этом уроке мы наконец-таки напишем код алгоритма,
о котором мы так много говорили в предыдущих уроках.
Отчёт отправил: 10558. Иван Воронин Выполнено за 40 мин. [Показать отчёт]
Научился: повторение пройденного 
Сложности: ничего 
Комментарии: отличный урок, так же добавил проверку в виде всплывающего окошка, где для наглядности отобразил итоговое содержимое групп A, B и C. 
20 ИИ - Открыть всё! 00:21:34 16 чел. ★ 5 Done
  На этом уроке мы перепишем по новому
алгоритм открытия всех клеток с
использованием класса Group.
Ура! Открываемость минного поля значительно возросла!
Это успех :)
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 40 мин. [Показать отчёт]
Научился: повторение пройденного 
Сложности: ничего 
Комментарии: Добавил проверку первого клика перед сохранением игры (чтобы не сохранялись пустые поля). Обновлено условие проверки "побит рекорд или нет". Обновлена система генерации окна поздравления с Рекордом в текущей сложности. В тайтле помимо названия игры и текущего времени игры, теперь отображается текущая сложность. Старый алгоритм сохранил в функции: StartBot1() и деативировал. Новый алгоритм бота добавлен в функции: StartBot2() и активирован. Проверка победы/проигрыша добавлена после завершения работы бота (ранее проверка была в процессе его работы). 
21 ВТОРОЙ ТРЕТЬФИНАЛЬНЫЙ УРОК 15 чел. ★ 5 Done
  Поздравляю с завершением создания Искуственного Интеллекта для решения Сапёра!

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

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

Впереди внедрение ИИ Бота для сторонней игры.
Отчёт отправил: 10558. Иван Воронин Выполнено за 3 час. 00 мин. [Показать отчёт]
Научился: замедлять процесс работы циклов при этом чтобы видна была текущая стадия каждой итерации =) 
Сложности: ничего 
Комментарии: При открытии окна "О игре" теперь чередуются 3 трека (“about3.mp3” переименовал в “bot.mp3”, а “about4.mp3” соответственно в “about3.mp3”). “bot.mp3” добавлен как мелодия(индикатор) работы бота. Теперь во время работы бота видно, как он открывает поле и ставит/снимает флажки. з.ы. самый прикольный момент это установка/снятие флажков, как будто бот не уверен в этом, имитация ИИ, не стал убирать у него эту “не уверенность”, выглядит как фишка =) 
Видеообзор: https://youtu.be/FAFi9MG_SrQ
22 БОТ - Отмычка сапёра 00:31:45 15 чел. ★ 4.9 Done
  На этом уроке мы начнём создавать настоящего бота,
который будет проходить сапёра из Windows XP.
Мы найдём указатель на программу,
вычислим координаты окна игры,
запрограммируем несколько
щелчков мышкой по ней.

Для работы нам потребуется именно XP версия сапёра, её можно скачать здесь:
www.videosharp.info/data/docs/winmine.exe.
Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 15 мин. [Показать отчёт]
Научился: рисовать флажками и вопросиками пиксель-арт на поле Сапёра =) 
Сложности: найти время 
Комментарии: Отличный урок, намного интереснее писать кликер на C#, чем на ActionScript, хотя на нём много чего удобно делать =) 
23 БОТ - Пиксельный металлоискатель 00:25:10 14 чел. ★ 5 Done
  На этом уроке мы начнём создавать пиксельный металлоискатель.
По цвету пикселей на экране мы будем восстанавливать значение открытой карты.
Ваша задача - довести его создание до логического завершения.
Отчёт отправил: 10558. Иван Воронин Выполнено за 7 час. 00 мин. [Показать отчёт]
Научился: Повторение пройденного 
Сложности: найти время 
Комментарии: Создал в фотошопе иконку для форм и бинарника. Добавил метод определения цвета пикселя на экране. Метод определения наличия запущенного процесса игры Сапёр вынесен в отдельную функцию (так как надо не только для начала работы, но и для проверки наличия процесса окна игры Сапёр в циклах бота). Добавлен метод определения объектов на игровом поле игры Сапёр. Добавлен progressBar для визуализации процесса выполнения циклов. Внедрена игра Жизнь для демонстрации на игровом поле Сапёра. Добавлена кнопка запуска с данными о скорости циклов и времени между ними для игры Жизнь. Добавлены trackBars для настройки скорости и времени между циклами игры Жизнь. При изменении скорость и времени циклов, информация о текущих значениях отображается на кнопке запуска игры Жизнь. Теперь бот заглядывает в меню игры для проверки: установлена возможность ставить Вопросики или нет. Если нужно нарисовать картинку, то бот проверяет возможность устанавливать Вопросики, если данная возможность отключена, он её включает. Если запущена игра Жизнь, бот проверяет возможность установки Вопросиков, если возможность активна, то он её отключает. Если в процессе анализа и подготовки игрового поля Сапёр, для запуска игры Жизнь, бот находит Вопросики, он их убирает. Теперь размеры рисунка относительны размеров игрового поля Сапёр, чтобы ромбик вписывался и был всегда по центру. Добавлены textBoxes для сбора данных об игровых объектах на поле Сапёра. Добавлена анимация заполнения textBoxes. Игра жизнь использует динамическое программирование (не зря выпит литр кофе в своё время). з.ы. Что меня с подвигло на сие деяние? Пунктик с тремя звёздочками в задании к этому уроку =) Я, понимая, что это тривиальная задача, не мог не решить её, оставалось за малым, найти время, в течении дня несколько раз отвлекался по делам, но всё же успел доделать к концу дня. 
Видеообзор: https://youtu.be/ODYr6nRgIt4
24 БОТ - Совместное фото 00:31:34 13 чел. ★ 5 Done
  Считывание пикселя с экрана работает крайне медленно.
Вместо этого было решено сделать скриншот всей программы.
Чтобы дальнейшую обработку производить напрямую,
а не через медленные вызовы WinAPI методов.

Цель урока - создание "Совместного фото",
на котором будут все возможные варианты клеток в игре.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 30 мин. [Показать отчёт]
Научился: делать скриншот выделенной области на экране 
Сложности: найти время 
Комментарии: Новичок: 00:00:00.0103542 - Создание и сохранение скриншота окна процесса. 00:00:00.0343467 - Создание скриншота рабочего стола. 00:00:00.4376924 - Анализ игрового поля по скриншоту. 00:00:03.0741300 - Анализ игрового поля используя функцию GetPixel() библиотеки gdi32.dll. Любитель: 00:00:00.0138548 - Создание и сохранение скриншота окна процесса. 00:00:00.0316497 - Создание скриншота рабочего стола. 00:00:01.5693508 - Анализ игрового поля по скриншоту. 00:00:10.0371520 - Анализ игрового поля используя функцию GetPixel() библиотеки gdi32.dll. Профессионал: 00:00:00.0149438 - Создание и сохранение скриншота окна процесса. 00:00:00.0336072 - Создание скриншота рабочего стола. 00:00:02.9528080 - Анализ игрового поля по скриншоту. 00:00:19.7216873 - Анализ игрового поля используя функцию GetPixel() библиотеки gdi32.dll. 
25 БОТ - Гадание по фото 00:39:50 13 чел. ★ 5 Done
  На этом уроке мы проанализируем созданную фотографию,
на предмет определения координат пикселей,
по цвету которых можно будет однозначно
определить значение в клетке сапёра.

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

Запиши видеообзор своих программ.
Какой видеокурс ты будешь проходить следующим?
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Ничему новому 
Сложности: найти время 
Комментарии: Добавил интерактивную легенду найденных уникальных объектов игрового поля при парсинге эталонного скриншота. остальные нововведения, которые добавлялись в процессе разработок на каждом уроке см. видео =) з.ы. плюс недокументированные изменения и оптимизации. 
Видеообзор: https://youtu.be/e7GKl7HkZYM
31 VIP - Хакерский подход 00:19:57 12 чел. ★ 5 Done
  На этом уроке мы напишем хакерскую программу для вскрытия Сапёрного поля.
Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 00 мин. [Показать отчёт]
Научился: Работать с процессом напрямую через память 
Сложности: найти время 
Комментарии: Замечательное завершение не менее замечательного курса, спасибо огромное. 
Видеообзор: https://youtu.be/iGEqLHpzo4c
32 VIP - Жизнь у Сапёра 01:22:45 4 чел. ★ 5 Done
  Напишите Игру жизнь.
Отобразите её на поле игры "Сапёр".
Для переключения клеток используйте клики ПКМ по клеткам.

Отчёт отправил: 10558. Иван Воронин Выполнено за 2 час. 00 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Потраченное время в основном ушло на создание, подготовку и обработку видео в редакторе, так как что игру Жизнь, что Жизнь на поле Сапёра реализовал ранее. 
Видеообзор: https://youtu.be/Ut6wtKaxltQ
  Итого:   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 работает безупречно. Вероятно, где-то закралась ошибка. Пока я ее не нашел. Решил запустить программу на другом компьютере, рассчитывая получить аналогичный результат. Но и тут меня ожидал сюрприз: Программа не генерирует Клики. Т.е никак не реагирует на сапера. Чем это можно объяснить? Не смотря ни на что, курс получился шикарный. Мои ожидания вполне оправдались. Огромное СПАСИБО Евгнению Витольдовичу! А я продолжу поиск ошибки. Моим следующим курсом будет Морской флот.



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