А зачем нужен BitBlt? Я делал примерно так: собрал изображения всех 13 карт (для одной масти), затолкал эти картинки в ресурсы. При запуске бота создавал 13 compatibleDC и лепил в них эти картинки. Это были образцы. С экрана напрямую получал hDC, отыскивал положение флопа (это нетрудно, если размер стола фиксирован) , разбивал на 5 частей (по количеству карт на флопе) и сканировал каждую часть при помощи GetPixel, параллельно сравнивая соответствующие пиксели на образцах. Сканирование делал по диагонали карты и образца. Вполне достаточно для уверенного опознания карты (при размерах стола в четверть экрана). Колода - четырёхцветная, масть определяется также в процессе сканирования. Скорости более чем достаточно, никаких задержек для 4 столов не наблюдал (тогда у меня был старый Атлон ХР 2200). Вся хрень крутилась в отдельном потоке. P.S. Запусти диспетчер задач и посмотри количество объектов GDI, которое создается твоим процессом. Если постоянно растет - значит где-то не освобождаешь использованные GDI - объекты.
Пардон, соврал: сканировал ту часть карты, которая содержит имя (A, K, Q, J, 10 и т.д.). по двум диагоналям.
BitBlt захват изображения и потом работаешь с массивом пикселей как с числами распознать карту или цифру можно по двум трем пикселям не необходимости все сканировать. И не опасаешся что к концу считывания изображения может быть такое что читаешь пиксили другого изображения (размеры ставок). Ну хотя если не разберусь с переполнением наверно воспользуюсь твоим советом использовать GetPixel. Эта вообще быстрая функция?? Ток я не понел ты его закончил или нет, с законченной логикой и алгоритмом игры сажал за столы? за какие? если не секрет
Naruto Бот в полностью автоматическом режиме не ставил. Он распознавал карты, имена оппонентов, размеры стеков, ставки по ходу игры, в общем все изменения за столом по ходу розыгрыша и передавал необходимые данные в калькулятор. Калькулятор считал шансы и просто выводил у себя результат. Решение по результатам расчётов я принимал уже сам. Полностью полагаться на калькулятор в принятии решения посчитал нецелесообразным. Работал бот с покерстарс. С тилтом были проблемы с чтением хода игры (карты без проблем). Насколько помню, на тилте не вся информация о ходе розыгрыша выводится в текстовую консоль. Конкретно деталей не помню, уже больше двух лет прошло. С BitBlt ты куда-то заехал не в ту степь. Ключевой момент в распознавании - это строго определенные размеры стола (и соответственно карт) плюс строго определенная колода карт (выбирается та, которую легче распознать) плюс определенный цвет стола. Зная размер стола и примерное расположение начала флопа на нем начинаешь сканировать стол по горизонтали, отступив влево от предполагаемого начала карт несколько пикселей, пока вместо ожидаемого фона стола не появится пиксель другого цвета. Это и будет начало карты (по Х). Ту же операцию повторяешь по вертикали, получая координату по Y. После этого ты имеешь координаты верхнего левого угла карты, и имеется фиксированный размер карты. Копировать к себе её изображение не зачем. Можно прямо с экрана брать пиксели и сравнивать с эталоном. При копировании ты всё равно получишь ровно то же изображение, что и на столе, так зачем тебе лишние операции? GetPixel не самая быстрая функция, но количество сканируемых точек невелико, поэтому можно не заморачиваться на потрошение структуры битмапа для получения доступа к массиву точек.
Создав поток с помощью Api функции CreateThread и передав ему параметр как можно в делфи принять или извлеч этот параметр?????????? Кто нить знает? Все с этим разобрался!!! Скажите, как лучше всего имитировать нажатие кнопки мыши в заданной позиции окна если есть хэндл этого окна????????????????????????????????????????
Что вообще кто что думает: сможет бот хотя б в минус не падать на кэш столах или все же это гиблое дело????? Вот еще статья есть :http://www.xakep.ru/post/53647/default.asp Скажите свое мнение? Стоит или не стоит игра свеч???
в плюс он тебя по-любому не выведет на автомате. Имхо, это только подсказчик, решения принимать должен сам. И решения принимаются не на уровне расчёта коэффициентов, а на уровне психологии оппонентов. Чтобы бот работал самостоятельно, слишком много ему надо информации (статистического плана, накопленной наблюдениями за оппонентами). И бот такой построить - задача нетривиальная. Стоит свеч в таком плане: чтобы он удерживал от заведомо неприемлимых ходов, когда по теории должен быть 100% фолд, и он вместо тебя должен надавить на фолд, чтобы ты не отвлекался на столы, где решение явное. Такие проги запрещены румами (которые дают явную установку на фолд). Если память не спит с другим, типа проги Nonfoldem Holdem (или как-то так).
На а если вмести с теорией вероятностью и статистикой использовать какую нить стратегию игры, к примеру вот здесь моя ссылка говорится о каких http://ru.pokerstrategy.com/u73K1T! С какими картами входить в игру скажем и при каких условия и с каких позиций это не проблема, эти стратегии совершенно точно описывают такие ситуации, т.е. программирование игры на префлопе не составит особых проблем. Настоящая возня начнется на флопе! Ну эт я так думаю
Стратегии разрабатываются не для того, чтобы ты что-то выиграл. На этом же сайте прямо объясняется, что приводимые стратегии призваны помочь продержаться на плаву и не профукать деньги, пока научишься играть. И не более того. Это костыли, пока не научишься ходить. А чемпионом по бегу костыли тебе стать не помогут. Стратегии - это просто базовые понятия. Необходимое, но не достаточное условие успеха. Чтобы играть в плюс, нужно постоянно балансировать на грани. Где проходит грань, никакой калькулятор не подскажет. Это вообще не математическая игра, а скорее психологическая. Главное - понять соперников, предсказать их поведение. А поведенческих калькуляторов пока что я не видел, может ты напишешь? Судя по этому выражению, ты пока не играл. Сделай депозит баксов 100, и просто поиграй. Чтобы почувствовать атмосферу. Может тогда и раздумаешь делать бота
в PokerStars сморел когда-то файлы изображений карт и еще там всякого лежат где-то в раб. папке, в итоге мы знаем названия файлов для всех видов карт. Думаю что надёжней всего будет перехватить опен фаел + криейт битмап = мы имеем DC в котором находиться каждая карта(надо смореть как оно там организовано дабы понять какие конкретно функи надо хучить) Потом при BitBlt мы смотрим какую карту(какой DC) и куда оно размещает. Единственное что надо разобраться с сайзами стола и размещением игроков и т.п. = без сравнений битмапов мы железобетонно будем знать что и куда размещаеться. Это как альтернатива GetPixel, т.к. она тормознутая функа сама по себе + сравнивание карт по битмапам не самый совершенный способ.
1 Играл и на Покерстарс и на Фуллтилт и в кэш и турнирах и места занимал за финальными столами в больших турнирах. Игру на префлопе можно вполне возложить полагаясь на "чарты стартовых рух" далее да костыли мало помогут согласен. 2 Работать с изображением проще (не требует особых знаний и врем...) и считывание и распознание всей инфы со стола проходит нормально вплоть до вычисления времени скоко игроку потребовалось на обдумывание хода; хотя конечно вариант с "опен фаел + криейт битмап = мы имеем DC" будет и лучше, главная проблема сам алгоритм игры. наверно все таки пока не напишу не успакоюсь))) засела идея зараза)))
Ну писал я для покера (покерстарс - сам не играю в азартку). ц от 2к$ + нафига NtDeviceIoControl ака send/recv? Всё делается проще
Знает кто нить как сделать задержку в 1/10000 секунды ??? Есть чтонить вроде Sleep()- задает точность 1/1000 ф надо 1/10000?????
Создав битмап с помощью CreateCompatibleBitmap, как можно найти указатель на массив пикселей???????????????????????????????? CreateCompatibleBitmap возврщает дескриптор совместимого точечного рисунка, и что с ним сожно сделать? ПОМОГИТЕ пожалуйста !!!!!!!!!