Покерный бот

Тема в разделе "WASM.WIN32", создана пользователем Naruto, 17 янв 2011.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    А зачем нужен BitBlt? Я делал примерно так: собрал изображения всех 13 карт (для одной масти), затолкал эти картинки в ресурсы. При запуске бота создавал 13 compatibleDC и лепил в них эти картинки. Это были образцы. С экрана напрямую получал hDC, отыскивал положение флопа (это нетрудно, если размер стола фиксирован) , разбивал на 5 частей (по количеству карт на флопе) и сканировал каждую часть при помощи GetPixel, параллельно сравнивая соответствующие пиксели на образцах. Сканирование делал по диагонали карты и образца. Вполне достаточно для уверенного опознания карты (при размерах стола в четверть экрана). Колода - четырёхцветная, масть определяется также в процессе сканирования. Скорости более чем достаточно, никаких задержек для 4 столов не наблюдал (тогда у меня был старый Атлон ХР 2200). Вся хрень крутилась в отдельном потоке.

    P.S.
    Запусти диспетчер задач и посмотри количество объектов GDI, которое создается твоим процессом. Если постоянно растет - значит где-то не освобождаешь использованные GDI - объекты.
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Пардон, соврал: сканировал ту часть карты, которая содержит имя (A, K, Q, J, 10 и т.д.). по двум диагоналям.
     
  3. Naruto

    Naruto New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2010
    Сообщения:
    28
    BitBlt захват изображения и потом работаешь с массивом пикселей как с числами распознать карту или цифру можно по двум трем пикселям не необходимости все сканировать. И не опасаешся что к концу считывания изображения может быть такое что читаешь пиксили другого изображения (размеры ставок).
    Ну хотя если не разберусь с переполнением наверно воспользуюсь твоим советом использовать GetPixel. Эта вообще быстрая функция??

    Ток я не понел ты его закончил или нет, с законченной логикой и алгоритмом игры сажал за столы? за какие?
    если не секрет
     
  4. EOT

    EOT New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2010
    Сообщения:
    181
    WIN32, сами изучали протокол? :-D
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Naruto
    Бот в полностью автоматическом режиме не ставил. Он распознавал карты, имена оппонентов, размеры стеков, ставки по ходу игры, в общем все изменения за столом по ходу розыгрыша и передавал необходимые данные в калькулятор. Калькулятор считал шансы и просто выводил у себя результат. Решение по результатам расчётов я принимал уже сам. Полностью полагаться на калькулятор в принятии решения посчитал нецелесообразным. Работал бот с покерстарс. С тилтом были проблемы с чтением хода игры (карты без проблем). Насколько помню, на тилте не вся информация о ходе розыгрыша выводится в текстовую консоль. Конкретно деталей не помню, уже больше двух лет прошло.
    С BitBlt ты куда-то заехал не в ту степь. Ключевой момент в распознавании - это строго определенные размеры стола (и соответственно карт) плюс строго определенная колода карт (выбирается та, которую легче распознать) плюс определенный цвет стола. Зная размер стола и примерное расположение начала флопа на нем начинаешь сканировать стол по горизонтали, отступив влево от предполагаемого начала карт несколько пикселей, пока вместо ожидаемого фона стола не появится пиксель другого цвета. Это и будет начало карты (по Х). Ту же операцию повторяешь по вертикали, получая координату по Y. После этого ты имеешь координаты верхнего левого угла карты, и имеется фиксированный размер карты. Копировать к себе её изображение не зачем. Можно прямо с экрана брать пиксели и сравнивать с эталоном. При копировании ты всё равно получишь ровно то же изображение, что и на столе, так зачем тебе лишние операции? GetPixel не самая быстрая функция, но количество сканируемых точек невелико, поэтому можно не заморачиваться на потрошение структуры битмапа для получения доступа к массиву точек.
     
  6. Naruto

    Naruto New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2010
    Сообщения:
    28
    Создав поток с помощью Api функции CreateThread и передав ему параметр
    как можно в делфи принять или извлеч этот параметр??????????
    Кто нить знает?
    Все с этим разобрался!!!

    Скажите, как лучше всего имитировать нажатие кнопки мыши в заданной позиции
    окна если есть хэндл этого окна????????????????????????????????????????
     
  7. Naruto

    Naruto New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2010
    Сообщения:
    28
    Что вообще кто что думает: сможет бот хотя б в минус не падать на кэш столах или все же это гиблое дело?????
    Вот еще статья есть :http://www.xakep.ru/post/53647/default.asp

    Скажите свое мнение? Стоит или не стоит игра свеч???
     
  8. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    в плюс он тебя по-любому не выведет на автомате. Имхо, это только подсказчик, решения принимать должен сам. И решения принимаются не на уровне расчёта коэффициентов, а на уровне психологии оппонентов. Чтобы бот работал самостоятельно, слишком много ему надо информации (статистического плана, накопленной наблюдениями за оппонентами). И бот такой построить - задача нетривиальная.

    Стоит свеч в таком плане: чтобы он удерживал от заведомо неприемлимых ходов, когда по теории должен быть 100% фолд, и он вместо тебя должен надавить на фолд, чтобы ты не отвлекался на столы, где решение явное. Такие проги запрещены румами (которые дают явную установку на фолд). Если память не спит с другим, типа проги Nonfoldem Holdem (или как-то так).
     
  9. trash_master

    trash_master New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2006
    Сообщения:
    319
    Адрес:
    Україна
    +
    =
    хаха, да я просто уверен что у тя все получицца
     
  10. Naruto

    Naruto New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2010
    Сообщения:
    28
    На а если вмести с теорией вероятностью и статистикой использовать какую нить стратегию игры, к примеру
    вот здесь моя ссылка говорится о каких http://ru.pokerstrategy.com/u73K1T!
    С какими картами входить в игру скажем и при каких условия и с каких позиций это не проблема, эти стратегии совершенно точно описывают такие ситуации, т.е. программирование игры на префлопе не составит особых проблем.
    Настоящая возня начнется на флопе! Ну эт я так думаю
     
  11. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Стратегии разрабатываются не для того, чтобы ты что-то выиграл. На этом же сайте прямо объясняется, что приводимые стратегии призваны помочь продержаться на плаву и не профукать деньги, пока научишься играть. И не более того. Это костыли, пока не научишься ходить. А чемпионом по бегу костыли тебе стать не помогут.
    Стратегии - это просто базовые понятия. Необходимое, но не достаточное условие успеха. Чтобы играть в плюс, нужно постоянно балансировать на грани. Где проходит грань, никакой калькулятор не подскажет. Это вообще не математическая игра, а скорее психологическая. Главное - понять соперников, предсказать их поведение. А поведенческих калькуляторов пока что я не видел, может ты напишешь? :)

    Судя по этому выражению, ты пока не играл. Сделай депозит баксов 100, и просто поиграй. Чтобы почувствовать атмосферу. Может тогда и раздумаешь делать бота :)
     
  12. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    в PokerStars сморел когда-то файлы изображений карт и еще там всякого лежат где-то в раб. папке, в итоге мы знаем названия файлов для всех видов карт. Думаю что надёжней всего будет перехватить опен фаел + криейт битмап = мы имеем DC в котором находиться каждая карта(надо смореть как оно там организовано дабы понять какие конкретно функи надо хучить) Потом при BitBlt мы смотрим какую карту(какой DC) и куда оно размещает. Единственное что надо разобраться с сайзами стола и размещением игроков и т.п. = без сравнений битмапов мы железобетонно будем знать что и куда размещаеться.
    Это как альтернатива GetPixel, т.к. она тормознутая функа сама по себе + сравнивание карт по битмапам не самый совершенный способ.
     
  13. Naruto

    Naruto New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2010
    Сообщения:
    28
    1 Играл и на Покерстарс и на Фуллтилт и в кэш и турнирах и места занимал за финальными столами в больших турнирах. Игру на префлопе можно вполне возложить полагаясь на "чарты стартовых рух" далее да костыли мало помогут согласен.

    2 Работать с изображением проще (не требует особых знаний и врем...) и считывание и распознание всей инфы со стола проходит нормально вплоть до вычисления времени скоко игроку потребовалось на обдумывание хода;
    хотя конечно вариант с "опен фаел + криейт битмап = мы имеем DC" будет и лучше, главная проблема сам алгоритм игры.

    наверно все таки пока не напишу не успакоюсь))) засела идея зараза:))))
     
  14. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Ну писал я для покера (покерстарс - сам не играю в азартку). ц от 2к$ + нафига NtDeviceIoControl ака send/recv?
    Всё делается проще :)
     
  15. Naruto

    Naruto New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2010
    Сообщения:
    28
    Не понял что эт значит?
     
  16. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    da, а что ? Был реализована серверная часть, с биллингом и админ панелью.
     
  17. Naruto

    Naruto New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2010
    Сообщения:
    28
    Знает кто нить как сделать задержку в 1/10000 секунды ???
    Есть чтонить вроде Sleep()- задает точность 1/1000 ф надо 1/10000?????
     
  18. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Naruto
    Была тут такая темя... ищите.
     
  19. vova01

    vova01 Вова

    Публикаций:
    0
    Регистрация:
    9 фев 2011
    Сообщения:
    1
    Адрес:
    Винница
    смотря какой бот, и куда, на некоторые румы он не действует
     
  20. Naruto

    Naruto New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2010
    Сообщения:
    28
    Создав битмап с помощью CreateCompatibleBitmap,

    как можно найти указатель на массив пикселей????????????????????????????????

    CreateCompatibleBitmap возврщает дескриптор совместимого точечного рисунка, и что с ним сожно сделать?
    ПОМОГИТЕ пожалуйста !!!!!!!!!