Это восьмой выпуск моей серии «Автоматизация игр с помощью Python».

Часть 1: Как я создал бота на питоне для автоматизации тактической MMORPG. Это объясняет мою мотивацию и игру, которую я автоматизирую.

Часть 2: Как управлять мышью и клавиатурой с помощью Python для автоматизации. В ней подробно рассматриваются основные функции, необходимые для автоматизации.

Часть 3: Обертка, которую я сделал, чтобы легко реализовать поиск изображений в вашей программе на Python и как ее использовать: Простое распознавание изображений для автоматизации с помощью Python

Часть 4: Почему мне пришлось использовать машинное обучение для обхода защиты от ботов объясняет, почему мне понадобилось машинное обучение и как простого распознавания изображений было недостаточно.

Часть 5: Как я создал собственный набор данных для машинного обучения говорит сама за себя.

Часть 6: Теория распознавания изображений с помощью машинного обучения: Ускоренный курс по распознаванию изображений с помощью машинного обучения

часть 7: Практика Распознавание изображений с машинным обучением на python и tensorflow

"источник"

Я показал вам почти все, что я использовал для создания своего бота, но я хочу поделиться некоторыми знаниями и некоторыми статистическими данными о боте:

Как автоматизировать программу, в которой есть случайные ошибки?

Одна из самых больших проблем, с которыми я сталкиваюсь, заключается в том, что в игре есть ошибки:

Иногда щелчок не регистрируется, иногда персонаж не двигается, иногда какая-то часть персонажа не отображается и т. Д. Это очень редко, но если вы протыкаете игру достаточно долго, ошибки покажут свои уродливые лица.

Это сложно, потому что бот должен быть очень устойчивым, чтобы справляться с этими проблемами, и поскольку он обычно смотрит на экран, чтобы получить информацию о том, что происходит, если дисплей неисправен, мы не можем ни на что полагаться. Поэтому нам нужно принять ошибки и ожидать их.

Но как узнать, что привело к сбою вашей программы 5 часов назад? Простого скриншота при падении может быть недостаточно. Следовательно, решение было просто записать мой экран, когда бот работает. Это может показаться излишним, но это действительно очень помогло мне в процессе разработки:

код - ›запускать в течение x часов -› сбой - ›посмотрите видео -› исправление ошибок - ›запустить в течение x часов…

Повторяйте, пока не устраните все ошибки.

Что касается записи моего экрана, мне нужно было что-то, что не потребляет так много ресурсов и может сжиматься в реальном времени, поэтому это не будет слишком утомительно для моего жесткого диска. В итоге я остановился на Open Broadcaster Software или OBS. Это хорошо, бесплатно, работает безупречно, с открытым исходным кодом, чего еще можно желать?

Еще одно преимущество видеозаписи:

Когда у меня есть видео, я могу запустить тесты на фактической записи, поэтому предположим, что внезапно появляется окно, которое я должен закрыть, я могу запустить видео, чтобы проверить, что я могу правильно определить поле и закрыть его (я обычно просто перемещайте мышь, не нажимая, чтобы не испортить видеоплеер).

Как протестировать ваш код на Python

Мне посчастливилось иметь лицензионный pycharm, который дает мне доступ к инструменту профилирования с очень подробным отчетом о том, сколько занимает каждая функция и т. Д. Если он у вас есть, вы можете проверить это руководство, чтобы начать работу: Оптимизация вашего кода Использование профайлеров ». Это очень полезно для поиска узких мест, но также является излишним, если я хочу просто рассчитать время для своих функций.

Например, я хотел знать, сколько времени в среднем уходит на один бой. Во-первых, потому что статистика крутая, а во-вторых, чтобы увидеть, насколько я улучшился с помощью своей оптимизации. В среднем у меня 2 минуты на бой, поэтому нет необходимости в таких вещах, как пикосекундная точность или что-то в этом роде. Идея очень проста:

Возьмите время t1, выполните весь процесс, а затем вычтите время t2 и преобразуйте его в секунды:

time1 = time.clock()
do_stuff()
time_fight = time.clock() - time1
print(str(time_fight))

Это безумно просто и очень приятно иметь.

Окончательный вывод и результаты:

"источник"

И это все ! Как я уже сказал, я вам почти все показал. Код этого проекта занял у меня очень много времени из-за всех проблем, которые я задокументировал до сих пор, и очевидного времени, необходимого для того, чтобы сделать снимки, убедиться, что он правильно обнаружен и т. Д. Но теперь он работает ОЧЕНЬ хорошо.

Чтобы дать вам чувство масштаба, чтобы перейти от уровня 1 до максимального уровня (200). Это может занять около 5–6 месяцев. Если вы только что повышаете уровень силы персонажем и без того высокого уровня, это может занять у вас около месяца.

С помощью своего бота я могу выполнить 0– ›200 за 3 дня

Так что я действительно доволен результатами и тем, что я сделал, это был определенно интересный проект для программирования. Я все еще использую его, поэтому время от времени делаю несколько исправлений, но в целом это почти готово.

Если вам интересно, почему я не открываю исходный код бота, чтобы каждый мог извлечь из него выгоду, это потому, что я уже сделал это несколько лет назад, и компания, которая делает игру, пригрозила мне нападать на меня в суде, если я не отреагирую . И я действительно не хочу снова идти по тому же пути.

Спасибо, что прочитали меня и следили за мной через эту серию, надеюсь, вам она показалась такой же интересной, как и мне. Если у вас нет красного, то все остальное - это список всех серий в начале статьи.

Еще раз спасибо и увидимся в следующий раз.

Если вам понравилась моя статья, загляните в мой блог, чтобы узнать больше на https://brokencode.io/ :)