Как сделать бота для игры
Где создать своего бота и соревноваться по сети: подборка площадок
- Подборки, 5 апреля 2018 в 15:40
- Никита Прияцелюк
Хотите написать свой Скайнет, но не знаете, с чего начать? Начните с малого! Представляем вашему вниманию подборку онлайн-площадок, на которых можно создавать своих ботов и сталкивать их с ботами других людей.
The AI Games
Покер, крестики-нолики, четыре в ряд, го — создавайте ботов для этих и других игр, побеждайте своих соперников и выигрывайте призы! The AI Games поддерживает более 20 языков программирования, среди которых есть C, Python и Java.
Halite
Halite — игра-соревнование, в которой игроки создают ботов на выбранном языке. В этом году у Halite космическая тематика: боты игроков контролируют корабли, которые добывают ресурсы на планетах, чтобы увеличить свой флот и победить противников. Доступно множество языков, среди которых есть Java, C++, Python и другие. Важно знать, что онлайн-битвы можно устраивать только пока идёт соревновательный сезон, по его окончании вам придётся довольствоваться оффлайн-режимом и ждать следующего сезона.
CodinGame
На CodinGame вы можете найти множество соревнований в игровой форме. Как всегда, ваша задача — создать бота, который превзойдёт всех остальных. На выбор доступно множество языков — от C++ и Java до PHP и Perl.
AI Cups
Русскоязычные соревнования по искуственному интеллекту. 28 февраля стартовал Mini Ai Cup 2, где нужно запрограммировать бота для игры, похожей на Agar.io. Соревнование продлится до 26 апреля, но даже после его окончания будет доступна песочница, в которой можно будет по-прежнему сражаться с другими игроками.
Core Wars
Вы находитесь в компьютерной симуляции и ваша главная цель — оставаться в живых как можно дольше. Звучит интригующе? Тогда Core Wars для вас. Язык всего один, зато какой — ассемблерный!
Robocode
Robocode — игра, в которой нужно запрограммировать танк на уничтожение танков других игроков. Для этого вы можете использовать Java или .Net.
FightCode
Как и на Robocode, на FightCode вы создаёте свой танк-убийцу. Разница в том, что из языков тут доступен только JavaScript.
HackerRank
На HackerRank можно найти множество задачек, в том числе и программирование ботов. Здесь их можно создавать для решения какой-либо проблемы вроде поиска кратчайшего пути или же для игры. Для поддержания интереса присутствует система достижений. Среди языков на выбор можно найти Python, C++, Swift и другие.
NOMAD BoT
Итак в этой статье я продемонстрирую как создать простого бота основанного на визуальном поиске объектов на экране. Преимуществом данного метода является «незаметность» для различных систем защиты от ботов. Для написания бота мы естественно будем использовать специализированную среду для разработки ботов NOMAD BoT. Если боты создаются для того чтобы сэкономить ваше время на совершение однообразных рутинных действий, то NOMAD создан для того, чтобы сэкономить ваше время при написании бота. В сравнении с написанием ботов на неспециализированных средах программирования или на не очень специализированных разработка на NOMAD может происходить в десятки, а то и в сотни раз быстрее. (т.к. для начала вам еще придется разработать инструменты обнаружения объектов, которые в NOMAD уже встроены готовые). Скачать дистрибутив NOMAD с уже установленным ботом из этой статьи вы можете по этой ссылке (внимание! настройки программы в дистрибутиве рассчитаны на установку его в папку по умолчанию, если вы устанавливаете его в другое место, то измените пути к базе и конструктору с проигрывателем!)
Управлять многими — то же, что управлять немногими. Дело в организации.
Нашей задачей сейчас является демонстрация того, как делается бот программа, а потому для автоматизации мы выберем что-нибудь простое и в то же время всем доступное, например, Калькулятор. Конечно это не онлайн игра, но поверьте, создание бота для онлайн игры ничем не отличается. (внимание пример работает в Windows 8 и Windows 7, причем калькулятор должен выглядеть как на скриншоте, который есть ниже по тексту, т.е. например, в Windows XP калькулятор называется и выглядит иначе, и потому там бот работать не будет)
Для того чтобы начать играть «автоматически» в что нибудь нам необходимо пройти следующие этапы:
- Сформулировать для себя задачу. Каких целей должен достигать наш бот.
- Какие действия он должен выполнять для этого?
- Исходя из задачи определить какие объекты он должен видеть, и каким образом, и на какие события реагировать для достижения целей описанных в пункте 1.
- Создание алгоритма.
- Программирование.
Задачей нашего бота будет бесконечно складывать на калькуляторе 2 числа 59 и 3.
Для достижения нашей цели нам необходимо, чтобы наша программа нажимала на кнопки 5 и 9 калькулятора, а в случае успеха на кнопку + и кнопку 3 и затем кнопку =
Следовательно эти объекты мы и должны будем искать на изображении, а затем тыкать в них мышью. Также мы будем анализировать число 59 и число 0 в поле результата, а также кнопку CE, для того чтобы сбросить вычисления на 0 перед началом очередной итерации.
Итак, наш алгоритм: В бесконечном цикле сначала ищем и жмем мышью на кнопку 5, и на кнопку 9. В случае успеха делаем паузу 3 секунды (чтобы успеть насладиться результатом). Затем проверяем есть ли у нас изображение числа 59, если есть то находим и кликаем мышью на кнопки + и 3 калькулятора, если эти операции также выполнены успешно, то находим и кликаем по кнопке = калькулятора. После чего спим 5 секунд. Затем проверяем, если в поле результата нет картинки 0, значит необходимо нажать кнопку CE, чтобы сбросить результаты предыдущих вычислений. После чего итерация повторяется. При нажатии кнопки Esc программа останавливается.
Продемонстрируем код программы которая у нас получилась:
Тут мы забежали немного вперед, написав сразу код, т.к. в NOMAD сначала необходимо создать шаблоны изображений которые мы будем искать. Так если посмотреть в код, то можно увидеть следующие записи: five,nine,fiftynine,plus,three,equal,zero,CE — что это? а это собственно и есть те шаблоны, в NOMAD с ними можно работать из кода как с объектами, т.е. пишем имя объекта в коде и вызываем его метод, например: FindPicture — найти изображение шаблона, MouseClick(‘l’) — найти изображение шаблона и кликнуть левой кнопкой мыши по нему. Для того чтобы подробно изучить возможности и функции NOMAD рекомендую обратиться к документации. А сейчас я в кратце опишу как нам создать недостающие шаблоны:
Во первых создадим базу данных, для этого в Launcher нажмем кнопку ADD, в открывшимся окне заполним в первом поле имя базы данных (например Калькулятор), и во втором поле укажем каталог где мы хотим хранить все что мы напрограммировали. Т.е. собственно исходник нашей программы, или иными словами базу данных. Далее жмем кнопку Save и в списке у нас должна появится запись. Выбираем ее и жмем кнопку Constructor.
Во вторых нужно создать и настроить это конвеер скриншотов, объект который отвечает за фотографирование окна в нашем случае окна калькулятора. Итак, открываем программу в режиме Constructor, в открывшемся окне справа мы должны увидеть такую картину:
На пункте выделенном на картинке голубым цветом жмем правой кнопкой мыши и выбираем пункт меню «добавить конвеер скриншотов». В появившемся окошке указываем его имя — «Calc». И нажимаем кнопку Input. После чего объект с таким именем должен появиться в дереве объектов в разделе ScreenShotPipe. Найдем его там и кликнем на нем левой кнопкой мыши. В левой части программы появится окошко следующего вида (свойства могут идти в другом порядке):
Я уже заполнил его так как оно должно выглядеть у вас. Фактически все уже указанно необходимо только в поле WindName написать слово Калькулятор. Все конвеер готов и мы можем приступать к созданию шаблонов, где я и расскажу зачем вообще мы делали этот конвеер.
В третьих запустим калькулятор и сделаем его снимок, для того чтобы сделать снимок необходимо нажать кнопку ScreenShot в левом верхнем углу Конструктора. После этого у нас появится окно TV со снимком экрана. Теперь нам необходимо нажать кнопку Cut и выделить в окне TV наш калькулятор, результатом этих действий должно быть окно TV с изображением калькулятора.
Нажимаем кнопку Borders ( примечание. с момента написания этой статьи в программе появился режим FixBorders (кнопка черный мониторчик с луной), рекомендую использовать именно его. Используется он точно также как Borders, но работает на динамических изображениях гораздо стабильнее ) и начинаем делать шаблоны. Объясню как это делается на примере шаблона для кнопки «+» — мы должны выбрать на изображении самый характерный его участок, который не повторяется в других местах. Собственно и выбираем сам символ +, нажимаем на кнопку Select, и выделяем этот знак в квадратик:
Кликаем правой кнопкой мыши внутри пунктирного квадратика и у нас появляется окно:
в поле имя которого мы пишем «plus» (так как этот объект у нас в коде был написан) и жмем Input. В разделе Templates дерева объектов у нас появился объект с таким именем. Нажмем на него и слева появится уже знакомое нам окошко:
Тут нам нужно поменять свойство ConnectedScreen в нем мы должны выбрать конвеер скриншотов который мы создавали вначале, т.к. по умолчанию тут выбран глобальный конвеер, который фотографирует весь рабочий стол целиком, а не только наш калькулятор. На этом минимальная настройка шаблона закончена и думаю нам этого будет достаточно. Более подробно об этом можно узнать в документации. Вам лишь осталось поступить аналогичным образом со всеми остальными объектами, которые мы должны добавить в шаблоны. После добавления всех шаблонов дерево объектов должно выглядеть следующим образом:
Очень важно, чтобы наименования в точности включая регистр ввода соответствовали тому, что вы видите на картинке. В примере шаблоны five и nine сделаны другим способом, в режиме ColMap, за подробностями того как это делается предлагаю обратиться к документации. На работу кода программы это не окажет особого влияния и вы можете сделать все шаблоны тем же образом как и шаблон кнопки +. А можете ничего не делать, и скачать готовый дистрибутив с примером
Для того чтобы создать шаблоны fiftynine и zero необходимо делать шаблон участка калькулятора выделенного на картинке:
По шаблонам все.
3) Еще нам необходимо создать графический интерфейс программы через который она будет общаться с пользователем. Для этого необходимо в Конструкторе программы войти в меню «Окна» и выбрать пункт «Дизайнер Формы»
Откроется окно с формой, на которой нужно дважды щелкнуть и из открывшегося окна добавить объект Button в обоих полях формы пишем Start. Жмем ОК и выходим из формы, а на главной форме у нас появилась кнопка Start, нажимаем на нее и появляется опять меню свойств, жмем на закладку Events и видим следующее:
В колонке Value на против события OnClick дважды щелкаем мышью, и в Value автоматически заполняется значение на картинке выше. А в центральном окне появляется текстовый редактор:
Вот этот текст мы и должны заменить кодом, который я привел в начале статьи. Все теперь программа готова. Для запуска необходимо сохранить программу нажав кнопку с изображением двух дискет, затем откомпилировать программу нажав кнопку с картинкой перекрещенных отвертки и ключа, а затем нажать кнопку Launch, или запустить ее из лаунчера. Из конструктора программа всегда запускается в отладочном режиме, поэтому будут показываться отладочные сообщения. Если мы все сделали верно то должны увидеть окно с кнопкой которое мы создали:
Запускаем калькулятор, делаем его видимым на рабочем столе и жмем кнопку старт. Когда надоест жмем кнопку Esc, и ждем сообщения о том что программа закончена.
Вот и все. Сложно? Делать это на обычном языке программирования сложнее в разы. Лично у меня написание этого бота заняло не более получаса, чего не могу сказать об этой статье.
Другие примеры ботов можно поискать на форуме http://nomadbot.com/forum/index.php например, тут
Как сделать (создать) бот программу(кликер)?: 19 комментариев
Приветствую, отличная статья!
Все получилось, но есть несколько вопросов.
Как заставить мышку двигаться на много быстрее, а то
все очень медленно происходит?
Возможно ли с вами связаться лично?
1) Вы скачали обновление? В новых версиях мышка двигается быстро. В Launcher нажать кнопку Update.
2) Зарегистрироваться на форуме и отправить мне личное сообщение.
Как сделать так, чтобы бот кликал только при 100% распозновании
Свойство «к» в итеме шаблона должно быть = 1, тогда будет при 100%. На динамически меняющихся изображениях 100% достигнуть сложно.
Я пытался создать бота для сайта, но заметил странную вещь, на красивых тяжелых сайтах с движущимися элементами на скриншотах в режиме borders границы становятся толще, а если сначала сохранить этот же скриншот сайта в паинте, а потом заскринить в программе, то в borders все по другому, или если закрыть вкладку с сайтом и потом заскринить то тоже все нормально.
Еще хотелось бы узнать какой код нужно написать чтобы программа одновремено нажимала несколько кнопок, ну или по очереди нажимала и удерживала, а потом по очереди отпускала. Например вызывала диспетчер задач.
1) В режиме borders результат зависит от общей яркости изображения. Поэтому если она существенно меняется, то меняются и формы границ. Т.е. данный фильтр существенно снижает чувствительность к изменению цветов, но не исключает ее полностью.
2) функции KeyDown, KeyUp шаблона. или WinApi функции.
Может ли программа двигать курсором удерживая при этом лкм?
Среда для разработки игровых ботов бесплатно и с открытым кодом
Многие браузерные и сетевые игры, игры в соц.сетях отличаются скучностью и однообразием «фарма». Игрок ставится перед выбором — «фармить» или заплатить. И так получается не только из-за желания разработчиков заработать.
Немного лирики
Проблема в балансе. Если добыть игровые ресурсы, развить своего персонажа — просто, то ценность такого развития не велика. Потому «ценный лут» выпадает из поверженных монстров редко, а каждый следующий шаг в развитии стоит намного дороже, чем предыдущий.
В определенный момент все сводится к тому, чтобы потратить много времени на добычу игровых ресурсов, которые потом можно будет обратить в какие то преимущества в сражениях против игроков (купив/добыв артефакты, прокачав персонажа, развив недостающие навыки и т.п.). Время, потраченное на «скучный фарм», занимает бòльшую часть игры.
Пишем ботов
В большинстве случаев фарм можно автоматизировать. Пусть компьютер, робот сам делает всю скучную работу.
Я не однократно писал роботов для игр.
Первая серьезная поделка была сделана, когда я ещё играл в Ultima Onlne — тогда был создан проект UO Shra pilot. Программа позволяла составлять скрипты для управления персонажем в UO, имитируя нажатия мыши и клавиатуры. С помощью этой программы, например, я записывал специальные скрипты, которые позволяли моему персонажу «летать» по лесу в Ultima Online и рубить лес, собирая бревна. Этот ресурс был довольно ходовым, легко продавался.
В Ogame требовалась другая задача — защитить флот от нападения высоразвитых противников. Разбитые флоты перерабатывались на ресурсы. За «небольшими» и «средними» флотами велась настоящая охота. Стоило уйти в оффлайн, и вы рисковали потерять все ваши корабли. Игроки прибегали к разным тактикам сохранения флота. Например, отправляли корабли в дальний многочасовой поход, где их нельзя было перехватить. Я же написал скрипт-няньку.
Нянька может работать как на локальном компьютере с выходом в интернет, так и на веб-сервере у провайдера, т.к. написана на PHP. Скрипт периодически запускаясь, проверял угрозы нападения на мои колонии. За 5-10 минут до момента атаки флоты поднимались с планеты, а потом возвращались назад, если угроза нападения миновала. Так удавалось сохранять и преумножать свои флоты, несмотря на происки врагов. 🙂
До тех пор, конечно, пока меня не забанили за мою находчивость.
Инструментарий для написания ботов
Я пробовал и сторонние инструментальные средства. Часть из них условно-бесплатна, т.е. в итоге потребует покупки. Другие — очень глючные и нестабильные. Некоторые применимы только для игр с определенной архитектрурой (к примеру только для браузерных HTML игр).
Чаще всего требуется выстроить логику бота в виде директив — найди картинку на экране, кликни/перетащи элемент, введи какие то значения в поля ввода, нажми кнопку и т.п.
Совсем недавно я нашел очень подходящий IDE для реализации подобной логики. Он разработан на JAVA, поэтому установлен может быть куда угодно — на MAC, WIN или UNIX.
Рассказывать что то более подробно, чем изложено на www.sikulix.com — нет надобности. IDE имеет открытый код и распространяется бесплатно.
SikuliX использует синтаксис Phyton или Rubi (выбираете при установке), предоставляя для работы свои объекты и классы. Для людей, далеких от программирования, это прозвучит устрашающе. Но вы сами решаете на сколько глубоко залазить в эту кроличью нору. 🙂
Данная запись опубликована в 06.06.2016 19:14 и размещена в Наша жизнь – игра!, Программирование. Вы можете перейти в конец страницы и оставить ваш комментарий.
Мало букафф? Читайте есчо !
Основы программирования ботов на SikuliX
SikuliX имеет ряд особенностей, о которых я расскажу далее. Этот IDE разработан с целью автоматизации рутины, т.е. для создания роботов, в том числе и для игр. Скрипт не вмешивается в обмен данными по сети или работу игрового клиента. Он действует .
Источники:
http://tproger.ru/digest/bot-games/
Среда для разработки игровых ботов бесплатно и с открытым кодом