Как пишут ботов для игр (или для программ с интерфейсом)?

Здравствуйте.
Интересует вопрос, как пишут ботов для игр (хоть самых простых) или для программ (у которых есть интерфейс).
Мне интересен сам принцип. Вот как заставить бота по сайтам лазить - это понятно (просто по ссылкам переходит и всё).
А как в приложениях, я вообще не понимаю (неужели просто программа мышку перемещает и щелкает по кнопкам вместо человека?)
p.s. Лучше на python-е.
Заранее спасибо!
  • Вопрос задан
  • 68536 просмотров
Решения вопроса 1
@Coderast
ты видел ботов на питоне?

https://msdn.microsoft.com/ru-ru/library/windows/d...

и Spy++
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
riky
@riky
Laravel
Инфы море на одном только хабре habrahabr.ru/search/?q=%5B%D0%B1%D0%BE%D1%82%5D&ta...

от себя добавлю что основные методы это
1) простейший понятный способ - поиск нужного элемента на экране и кликание по экрану, или клик по указанным координатам. я в основном использую этот способ, так как вмешательство в игру минимальное - ее не надо ломать, для онлайн игр - меньше шансов получить бан. Подходит для простых игр, в основном те что 2D пошаговые.
Гуглить отправку событий мыши и клавиатуры на выбранном вами ЯП (java robots например).
Минусы - игра должна быть постоянно открыта на экране и иметь фокус (можно решить - запустив игру с ботом в виртуалке).

2) для онлайн игр - изучение протокола обмена данными с сервером. нужно изучать куда отправляются/откуда получаются данные и в каком формате. пишем программу которая эмулирует клиент игры. очень хороший способ - для очень интерактивных игр - максимальная скорость. Способ довольно сложный надо реверсить протокол (гуглить wireshark) и возможно само приложение (гуглить дизассемблирование / декомпиляция). Если игра браузерная - то все может быть проще - запросы и ответы можно смотреть в консоли браузера. Очень перспективный способ - визуальный клиент не обязателен - можно делать армию ботов и размещать на серверах - скорее всего они будут потреблять немного памяти и процессора и возможности впечатляющие.

3) для десткопных игр - патчинг памяти запущенной игры. варианты от простых типа - поменять очки/деньги в игре (artmoney) это в основном для не онлайн игр, и до очень сложных - подменить адрес вызова системной функции - например функции отрисовки directx - то есть меняем адрес вызова на свою функци (недавно была серия статей на эту тему, к сожалению не нашел побыстрому). Либо как разновидность - декомпиляция игры - изменение логики - компиляция (гуглить все что связано с крекерством, создание кейгенов). Для этого варинта требуется довольно высокая квалификация, понимание того как работает игра. Также игры могут иметь защиту от этого.

Кстати понимание того как работают игры/программы - одно из главных в этом деле. Поэтому в первую очередь следует заняться тем чтобы понять как работает конкретная игра, а потом уже думать на каком этапе можно вмешаться в ее логику чтобы достичь нужного эффекта. Изучайте также средства тестирования игр/приложений - с помощью их также можно малой кровью добится хороших результатов.
Ответ написан
@Loligan
1. Рисуем пиктограмму
2. Приносим в жертву учебник по assembler
3. ...
4. PROFIT
Ответ написан
DiMithras
@DiMithras
Компьютерный энтузиаст
Юрий очень хорошо расписал как это делать правильно и, к сожалению, Python тут совсем не в помощь

Другие ответы так же дали хорошие ссылки на специализированные программы, освоить которые несложно.

Тем кто не испугался, хочется дополнить, что есть и другие способы, не требующие ультра навыков. Так, например, популярная нынче тема "Robotics process automation", практически любой софт посвященный этой теме неплохо подходит под создание ботов, пусть и не самых продвинутых и с хреновым быстродействием. Интерфейс у них обычно заточен под пользователя и навыки программирования не сильно нужны.

Другой уровень, опять же более простой способ - что-то среднее между пунктами (1) и (2), предложенных Юрий - это использование библиотек для теста и / или автоматизации. Так selenium, пусть и не слишком простой в освоении, но не такой муторный, как, например, использование wireshark. Для десктопных приложений куча библиотек по автоматизации для win32api, qt и прочих GUI. Библиотеки нужны для имплементации, различный софт вроде Spy++ для нахождения привязок в окнах и т.п.

Возвращаясь к вопросу о Python, как selenium, так и библиотеки для автоматизации десктопных приложений доступны на Python, Ruby и пр. скриптовых языках. В общем-то автоматизация доступна почти на любом языке. Ресурсы жрать будут несомненно, но зато сложность освоения и порог входа куда ниже.

И, самое главное в этом процессе - это креатив и нестандартный подход. По мере освоения будет возможность переходить к куда более сложным инструментам, а разобравшись, например, в методиках работы популярных GUI, возможно когда-нибудь дойдёте и до дизассемблирования, начинать с него точно не стоит!

Как переходный момент, например, использование ghostbrowser и node.js вместо selenium.

Надеюсь я своим ответом приободрил новичков, развеял туман непреодолимой сложности и предоставил несколько упрощённый вход в объектную область.
Ответ написан
@asd111
Пишут возможности бота и потом набор правил по которым бот принимает решения что делать в определенной ситуации.
habrahabr.ru/post/241553
Ответ написан
@KiborBot
Для этого есть специальные заточенные программы, для создания ботов.
К примеру Кибор. В нем можно программировать бот, а можно создать бот без программирования в визуальном редакторе (рисуя кубики и соединяя их линиями логическими)
Кибор имеет все необходимые, легкие в использование функции для нахождения нужных объектов в игре, эмуляции мыши и клавиатуры. Даже умеет распознавать рисованный текст и переводить его с реальный текст и числа.
Пример схемы бота в визуальном редакторе выглядит так
bot_hayday_kibor.jpg
Ответ написан
Комментировать
@ilyash89
Этот вопрос подробно разбирается в книге "Боты для компьютерных игр":
https://github.com/ellysh/video-game-bots-ru
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы