Написание покерного бота / Geektimes. Внимание материал носит чисто ознакомительный характер, и автор не несет ответственности за закрытие аккаунтов покерными румами. По законам стран создание и использование ботов не запрещено, однако по правилам покерных румов они запрещены. В данной статье полных исходных кодов не будет, только теоретически что и как можно использовать, и некоторые куски функций. Если ты интересуешься этим, тебе не составит собрать все в единую картину и написать свое. Так же не буду учить стратегиям игры, про термины или стратегии а так же правила можно в интернете найти много информации. Немного истории. Начал играть около 5 лет назад, за это время отыграно более 1 миллиона рук.
У кого-нибудь было подобное и с чем это может быть связано. Хотя, в ближайшее время бот=рыба. С этим покер-румы ничего не смогут сделать. Боты могут убить игру. Покерная экономика строится вокруг любителей. Единственной защитой от них на данный момент является закон. Что такое «покерный бот»? Poker bot — это программа, играющая в покер без человеческого участия. ПокерСтарс может дать полную гарантию, что мы пользуемся всеми механизмами, чтобы обеспечивать оптимальную защиту от ботов. Уверен, скоро весь онлайновый покер станет миром ботов, как и торги на бирже. Несмотря на заявления румов, боты им выгодны. Пока что самый эффективный метод защиты бота от обнаружение система из 2 компьютеров (один может быть виртуальным), на одном из которых. Как работают Покер боты? Покер является игрой с неполной информацией, в отличие например от шахмат. По этой причине, чтобы Покер бот мог сделать каждый следующий шаг, используется моделирование искусственного интеллекта. А поскольку покер клиент запускается напрямую с компьютера пользователя – фактически невозможно остановить ботов от вторжения в информационную среду покер-рума: авторы всегда найдут способ обойти защиту. А ведь закон мог бы стать вполне эффективным средством защиты от ботов. Но проблема в том, что во многих странах онлайн-покер не регулируется государством, да и румы пока не стремятся влезать в эту юридическую возню.
Практически во всех покер румах есть та или иная защита и система обнаружения покерных ботов. Схему можно разделить на 3 части: Блок 1 — блок взаимодействия с клиентом для игры в покер. Итак: Предложение касается безопасности (скрытности) бота: Всего за 100$ Я могу предложить технологию защиты и необходимый софт для скрытия покер-ботов (и любых других программ) от покер-румов (и любых других.
В основном это No Limit Holdem (нелимитированный холдем) за короткими столами (от 2 до 6 человек за столом), есть опыт игры в Омаху, HU NL Holdem. Игра вроде как хобби и отдых. И вот как то с друзьями появилась идея написать бота, первая идея была написать под лимит холдем, и когда наполовину бот был написан, приняли закон запрещающий играть американцам в покер, в итоге с лимитом закинули бота. Первая версия была написано на нейронной сети с распознаванием образов, что это значит – обучили бота распознавать по снимкам с экрана карты, но это сами понимаете неточный метод, но при достаточно хорошем обучении распознавал с точностью 9.
Далее версии ботов уже работали на прямую с окнами румов, используя их ресурсы., а так же в тандеме с программами для анализа и сбора статистики игры. Покер румы не спят.
Практически во всех покер румах есть та или иная защита и система обнаружения покерных ботов. Рассмотрим часть из них. Долгая игра – когда человек слишком долго играет, становится подозрительным, поэтому в некоторых румах могут появляться окошки с вопросами. Как защита не делать долгих сессий игры.
Действия за столом – нажатие кнопок, выбор окон, действий не должно происходить не передвигая мышь, в свернутом окне. Траектории мыши лучше задать немного нелинейно, нажатия в разные места кнопок, скорость движения тоже не моментальная.
Сканы запущенных процессов и скриншоты экрана – защита как говорил выше, не играть в свернутых окнах, процесс бота называть не покер- бот, и тому подобное, не оставлять окно бота развернутым на экране, имя процесса менять спустя какое то время (например через х минут перезапустить бота с новым именем процесса). Схема покер бота. Схему можно разделить на 3 части: Блок 1 — блок взаимодействия с клиентом для игры в покер. Блок 2 — блок принятия решения. Блок 3 — блок сбора статистики, на мой взгляд лучше использовать сторонний софт, например Poker.
Tracker. 3, отключив при этом вывод статистики на экран. Далее рассмотрим каждый блок более подробно.
Блок 1 — блок взаимодействия с клиентом для игры в покер. Этот блок служит для сбора информации на игровом столе и передачи в блок принятия решения, а так же получив ответ с решением выполнить то или иное действие как Fold, Raise, Call или All- In. Теперь рассмотрим этот блок. Часть этой части это взаимодействие с главным окном программы, это такие действия как выбор лимита, выбор стола за которым будем играть, это тоже большая часть, но на ней не будем останавливаться.
Рассмотрим более подробно часть уже со столом. Сначала нам нужно найти хэндлы всех игровых открытых столов (окон), можно это сделать при помощи функции Enum. Windows. Функция Enum. Windows перечисляет все окна верхнего уровня на экране, передавая дескриптор каждого окна, в свою очередь, в определяемую программой функцию повторного вызова. Enum. Windows действует до тех пор, пока последнее окно верхнего уровня не будет перечислено, или пока функция повторного вызова не возвратит значение ЛОЖЬ (FALSE). Синтаксис: BOOL Enum.
Windows. WNDENUMPROC lp. Enum. Func, // указатель на функцию обратного вызова. LPARAM l. Param // определяемое программой значение.
Эти методы являются частью сверхсовременной системы защиты: >Безопасность клиентской программы PokerStars - Защищенный онлайн-покер >>Мы просим >Вас предоставить эту информацию только один раз.
Enum. Func — указывает на определяемую программой функцию повторного вызова. Для получения дополнительной информации, см. Если функция потерпела неудачу, возвращаемое значение — ноль.
Если функция отработала успешно, мы можем получить имя окна Get. Window. Text, и проанализировав его понять нужное или нет окно, обычно в заголовке окна присутствует ваш ник, название покер рума и лимит. Далее не мешало бы хэндлы всех найденных окон сохранить, для дальнейшего использования, без повторного поиска, поиск нужно будет делать лишь в случае открытия нового окна. Теперь когда мы имеем хэндл игрового окна мы можем вытягивать информацию о столе. Большая часть информации хранится в дилерском окне.
Из него мы можем узнать все участников за столом, кто зашел, кто вышел со стола, кто сделал какое действие, карты на столе и свои карты. Для этого нам понадобится парсер текста, как его писать рассказывать не буду, это отдельная тема, главное что идея ясна J. Но перед парсером нам нужно сначала найти элементы окна, и среди них найти дилерское окошко.
Очень часто дилерское окно это класс производный от Internet Explorer. Функция Enum. Child.
Windows работает до тех пор, пока не будет перечислено последнее дочернее окно или функция повторного вызова не возвратит значение ЛОЖЬ (FALSE). Синтаксис. BOOL Enum. Child. Windows. HWND h. Wnd. Parent, // дескриптор родительского окна.
WNDENUMPROC lp. Enum. Func, // указатель на функцию обратного вызова. LPARAM l. Param // значение, определяемое программой. Параметры: h. Wnd. Parent — идентифицирует родительское окно, чьи дочерние окна должны перечисляться. Enum. Func — указывает на определяемую программой функцию повторного вызова.
Для получения дополнительной информации относительно функции повторного вызова, см. Если функция потерпела неудачу, возвращаемое значение — ноль. Теперь можно приступать и к парсингу текста. Наш ход или нет можно анализировать исходя из того какие кнопки доступны нам в данный момент. Это можно сделать как через ресурсы так и и просто по точкам на экране в этом окне.
Далее если наш ход то передаем известные данные в блок принятия решения. При получении ответа делаем соответствующее действие. В этой части еще не рассмотрено как нажимать на кнопки, но это думаю и сами осилите. Блок 2 — блок принятия решения. Этот блок, сердце всего бота, т.
В журнале Хакер 1. Чтобы играть достаточно уверенно против противника мы должны знать его диапазон и как он играет(это кусок привязан к статистике), так же есть определенные стратегии игры, зависящие от количества денег у вас, от количества игроков за столом, и самой стратегии игры. От всего этого зависит стартовый диапазон рук, и действия на последующих улицах, например человек играющий по стратегии коротких стеков (SSS) редко делает какие то ходы на ривере (когда выложена 5 карта на стол), т. Оценка ситуаций так же идет в подсчете аутов, ауты это количество карт, которое улучшит наше положение на последующих улицах, отсюда вытекаю такие комбинации как стрит дро, стрит в дырку, флэшь дро и т. Дро это тоже комбинация и в зависимости от количества аутов имеет цену.
И имея определенную комбинацию, даже в данный момент не победную, мы уже строим линию игры. Благодаря этим дополнительным данным мы уже можем принимать решения в зависимости от выбранной стратегии, если добавить поверх еще статистику игрока они будут еще точнее, а при добавлении полного просчета эту выборку еще можно дополнить. Надеюсь донес свою мысль о сокращении выборок и принятия решений, все это складывается на личном опыте игры и принятия решения, т. Вот пример кода определения комбинации(переписал более понятно, но может не оптимально): // функция для заполнения массива карт, вовращает порядковый номер карты. Card. To. Number(char Card). При чем заметьте понятия как фул хауз нету, это производная из пара и трипс или сет.
Тут еще нужен кусок который определяет готовность руки, т. Я опишу пример запроса к Poker. Tracker. 3, программа для сбора и анализа статистики игры, параметров в программе более 1. В Poker. Tracker. Postges базе. Пример запроса: SELECT. Эти параметры в основном используются при расширенной стратегии коротких стеков, для полных стеков этих параметров мало, но в качестве примера как их получить хватит. Для чего все эти параметры нужны и как их использовать советую почитать соответствующие ресурсы.
После того как мы получили дополнительную статистику переходим ко второму блоку и корректируем наше решение об игре. В заключение. На написание этой статьи подвинули статьи из журнала Хакер 1. Натягиваем сетевые poker room’ы» и Хакер 1.
Симуляция покерного оргазма». Так как с автором я не полностью согласен и тему считаю полностью не раскрытой и хотелось поделиться своим мнением. Вот немного скриншотов с того что может получится у тебя.