Кибор » Кибор - Интегрированная среда разработки ботов » Учебник Кибор » Считывание данных с окна игры Покер и передача их в реальном времени Покерному калькулятору PioSOLVER и получение ответа от него

Страниц (1): [1]
 

1. Kibor - 03 Сентября, 2023 - 06:17:37 - перейти к сообщению


Ссылки по теме
readtext - Сканирует указанную область экрана, окна или файла изображения, чистит изображение от шума и распознает текст и записывает его в string или char(для просмотра ссылки Вам необходимо авторизоваться)
findimage- Искать изображение на экране по маске изображения загруженного в память Кибор(для просмотра ссылки Вам необходимо авторизоваться)
regexreplace- Ищет в тексте участок по шаблону регулярного выражения и заменяет его на указанный текст(для просмотра ссылки Вам необходимо авторизоваться)
createpipeprocess- Запускает процесс и создает Pipe канал(для просмотра ссылки Вам необходимо авторизоваться)
kiborlog - Позволяет указать в любом месте скрипта вывести в Лог какой нибудь текст с возможностью приостановке выполнения скрипта после вывода строки. Текст выводится в появляющееся диалоговое окно(для просмотра ссылки Вам необходимо авторизоваться)
Изображение по которому ищем уголки карт (увеличенное)
image

CODE:
/*
D - Бубы
H - Черви
C - Трефы
S - Пики

j - Валет
q - Дама
k - Король
a - Туз
*/

win w=window ("Poker Academy", "SunAwtFrame", -1);

string path_PioSOLVER="E:\poker_bot\PioSOLVER2-free.exe";

int SCREEN[1500][1000];//Выделяем память. Выделить можно больше, с запасом, но не меньше. Если выделить меньше размеров скрина вернет ошибку.


int Card[3][3];
loadimage (#Card[0][0], "E:\poker_bot\images\Карта.bmp");

loadsymbolbase ("E:\poker_bot\base.sib");

int r=20;
int p=100;

int Card_Stol_X[5], Card_Stol_Y[5];//Координаты открытых карт на столе
int Kml_Card_Stol;//Найденное количество открытых карт на столе
int t_Kml_Card_Stol=0;
int Z_Stol[4]={270, 290, 530, 310}//Координаты сканирования зоны карт на столе

int Card_Igrok_X[2], Card_Igrok_Y[2];//Координаты открытых карт у нас
int Kml_Card_Igrok;//Найденное количество открытых карт у нас
int t_Kml_Card_Igrok=0;
int Z_Igrok[4]={330, 450, 490, 480}//Координаты сканирования зоны карт у нас

int Z_Text[4];//Координаты распознавания крты с помощью функции OCR

string Text;//Переменная в которой будет текст распознанной карты
int n;
string Card_Stol;//Полный список просканированных открытых карт на столе
string Card_Igrok;//Полный список просканированных открытых карт у нас

int KL=0;

if (createpipeprocess(path_PioSOLVER))
{
SendGetPioSOLVER("is_ready", 1);

loop()
{
screen (#SCREEN[0][0], 0, 0, w.widthclient, w.heightclient, w);

Kml_Card_Stol=findimage(5, #Card[0][0], 255, #Card_Stol_X[0], #Card_Stol_Y[0], Z_Stol[0], Z_Stol[1], Z_Stol[2], Z_Stol[3], r, r, r, r, r, r, p, 1, #SCREEN[0][0]);
Kml_Card_Igrok=findimage(2, #Card[0][0], 255, #Card_Igrok_X[0], #Card_Igrok_Y[0], Z_Igrok[0], Z_Igrok[1], Z_Igrok[2], Z_Igrok[3], r, r, r, r, r, r, p, 1, #SCREEN[0][0]);

if (Kml_Card_Igrok==0){t_Kml_Card_Stol=0; t_Kml_Card_Igrok=0;}
else
{
if (Kml_Card_Stol!=t_Kml_Card_Stol || Kml_Card_Igrok!=t_Kml_Card_Igrok)
{
sleep(500);
screen (#SCREEN[0][0], 0, 0, w.widthclient, w.heightclient, w);
Kml_Card_Stol=findimage(5, #Card[0][0], 255, #Card_Stol_X[0], #Card_Stol_Y[0], Z_Stol[0], Z_Stol[1], Z_Stol[2], Z_Stol[3], r, r, r, r, r, r, p, 1, #SCREEN[0][0]);
Kml_Card_Igrok=findimage(2, #Card[0][0], 255, #Card_Igrok_X[0], #Card_Igrok_Y[0], Z_Igrok[0], Z_Igrok[1], Z_Igrok[2], Z_Igrok[3], r, r, r, r, r, r, p, 1, #SCREEN[0][0]);

if ((Kml_Card_Stol!=0 && Kml_Card_Igrok!=0) && (Kml_Card_Stol!=t_Kml_Card_Stol || Kml_Card_Igrok!=t_Kml_Card_Igrok))
{
t_Kml_Card_Stol=Kml_Card_Stol;
t_Kml_Card_Igrok=Kml_Card_Igrok;
/*
messagebox (Kml_Card_Stol);
messagebox (Kml_Card_Igrok);
*/
Card_Stol="";
for (n=0; n<Kml_Card_Stol; n++)
{
Z_Text[0]=Z_Stol[0]+Card_Stol_X[n]+3;
Z_Text[1]=Z_Stol[1]+Card_Stol_Y[n]+3;
Z_Text[2]=Z_Text[0]+13;
Z_Text[3]=Z_Text[1]+29;
//saveimage(#SCREEN[0][0], "E:\11111.bmp", Z_Text[0], Z_Text[1], Z_Text[2], Z_Text[3]);
//break;
//Распознаем карту с помощью OCR
readtext (NUM | EN, #Text, 5, 1, 50, -1, -1, -1, -1, 0, -1, Z_Text[0], Z_Text[1], Z_Text[2], Z_Text[3], #SCREEN[0][0]);
//messagebox (Text);//тест
regexreplace(-1, #Text, Text, " |^r|^n", "");
regexreplace(-1, #Text, Text, "10", "T");
//messagebox (Text);//тест
Card_Stol=Card_Stol+Text;
}
Card_Igrok="";
for (n=0; n<Kml_Card_Igrok; n++)
{
Z_Text[0]=Z_Igrok[0]+Card_Igrok_X[n]+3;
Z_Text[1]=Z_Igrok[1]+Card_Igrok_Y[n]+3;
Z_Text[2]=Z_Text[0]+13;
Z_Text[3]=Z_Text[1]+29;
//saveimage(#SCREEN[0][0], "E:\11111.bmp", Z_Text[0], Z_Text[1], Z_Text[2], Z_Text[3]);
//break;
//Распознаем карту с помощью OCR
readtext (NUM | EN, #Text, 5, 1, 50, -1, -1, -1, -1, 0, -1, Z_Text[0], Z_Text[1], Z_Text[2], Z_Text[3], #SCREEN[0][0]);
//messagebox (Text);//тест
regexreplace(-1, #Text, Text, " |^r|^n", "");
regexreplace(-1, #Text, Text, "10", "T");
//messagebox (Text);//тест
Card_Igrok=Card_Igrok+Text;
}
kiborlog (KL, "Карты на столе "+Card_Stol+" - У меня "+Card_Igrok, 1050, 5, 500, 550);
if (Kml_Card_Stol==3)
{
kiborlog (KL, "===========^r^nТРИ КАРТЫ^r^n", 1050, 5, 500, 550);
SendGetPioSOLVER("set_board "+Card_Stol, 1);
SendGetPioSOLVER("set_bet_sizes 10 30 90", 1);
SendGetPioSOLVER("set_pot 0 0 20", 1);
SendGetPioSOLVER("set_donk_bet 1", 1);
SendGetPioSOLVER("show_settings", 1);
}

if (Kml_Card_Stol==5)
{
kiborlog (KL, "===========^r^nПЯТЬ КАРТ^r^n", 1050, 5, 500, 550);
SendGetPioSOLVER("set_board "+Card_Stol, 1);
SendGetPioSOLVER("set_bet_sizes 10 30 90", 1);
SendGetPioSOLVER("set_pot 0 0 20", 1);
SendGetPioSOLVER("set_donk_bet 1", 1);
SendGetPioSOLVER("show_settings", 1);
}
}
}
}
sleep(100);
}
closepipeprocess();
}

function SendGetPioSOLVER(string s, int vivod_log)
{
string rez="";
if (vivod_log) kiborlog (KL, s, 1050, 5, 500, 550);
char G[9999999];
sendpipe(s+"^n");//Отправить команду и ентер
waitpipe();//Ждать пока появится ответ
while (getpipe(#G[0], size(#G[0]))) rez=rez+format(#G[0]);//Считываем весь ответ пока он идет
if (vivod_log) kiborlog (KL, "> "+rez, 1050, 5, 500, 550);
}

Powered by ExBB FM 1.0 Final