Zireael |
Отправлено: 04 Мая, 2019 - 11:40:52
|
Эксперт
Покинул форум
Сообщений всего: 4456
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Тогда искать стрелки по одной, смещая область поиска. Примерно так:
code (Отобразить)CODE:int color_text_KIB_5[1]={16777215} // цвет текста
int coord[4]={750, 787, 1171, 839} // зона поиска
int deltaX=46; // расстояние между стрелками
int pause_=100; // пауза между поиском стрелок
loadsymbolbase("C:\Users\Limbaugh\Desktop\Arrows.sib"); // база для readtext
int script=0, i;
string text_KIB;
int posX=coord[0];
enabletimer(0);
loop()
{
textbkcolor (65280, 255);
textout(0, 300, 300, "Запуск/остановка скрипта Ctrl+Z", 1);
while(script)
{
textbkcolor (255, 65280);
textout(0, 300, 300, "Скрипт работает", 1);
i=0;
while(posX < coord[2])
{
readtext(RU, #text_KIB, 8, 1, -1, -1, -1, #color_text_KIB_5[0], 1, 5, -1, posX, coord[1], posX+deltaX, coord[3], -1);
textout(1, 300, 320, "Распознанный текст: "+text_KIB, 1);
func(text_KIB, i); // вызов функции, которая проверяет корректность символов и нажимает клавиши
posX=posX+deltaX; i++;
sleep(pause_);
}
posX=coord[0];
sleep(10);
}
sleep(10);
}
function func(string s, int number)
{
new char c[size(s)+1];
strcpy(#c[0], s); // скопировать строку в массив
for(int i=0; i<size(s); i++) // для всех символов
{
if(symbolcorrect(i)>0.7) // если корректность символа больше 0.7
{
if(c[i]=='п'){textout(10, 300, 400, format(number)+" Вправо", 1); key(39); continue;}
if(c[i]=='л'){textout(10, 300, 400, format(number)+" Влево", 1); key(37); continue;}
if(c[i]=='н'){textout(10, 300, 400, format(number)+" Вниз", 1); key(40); continue;}
if(c[i]=='в'){textout(10, 300, 400, format(number)+" Вверх", 1); key(38); continue;}
}
}
delete c;
}
CREATE_TIMER(0, 30)
{
if(getkeystate(CONTROL) && getkeystate(90)) // Ctrl+Z включает/выключает
{
while(getkeystate(CONTROL) && getkeystate(90))sleep(10);
if(script)script=0;
else script=1;
}
} |
|
|
Limbaugh |
Отправлено: 04 Мая, 2019 - 12:57:24
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Тогда искать стрелки по одной, смещая область поиска. Примерно так:
code (Отобразить)CODE:int color_text_KIB_5[1]={16777215} // цвет текста
int coord[4]={750, 787, 1171, 839} // зона поиска
int deltaX=46; // расстояние между стрелками
int pause_=100; // пауза между поиском стрелок
loadsymbolbase("C:\Users\Limbaugh\Desktop\Arrows.sib"); // база для readtext
int script=0, i;
string text_KIB;
int posX=coord[0];
enabletimer(0);
loop()
{
textbkcolor (65280, 255);
textout(0, 300, 300, "Запуск/остановка скрипта Ctrl+Z", 1);
while(script)
{
textbkcolor (255, 65280);
textout(0, 300, 300, "Скрипт работает", 1);
i=0;
while(posX < coord[2])
{
readtext(RU, #text_KIB, 8, 1, -1, -1, -1, #color_text_KIB_5[0], 1, 5, -1, posX, coord[1], posX+deltaX, coord[3], -1);
textout(1, 300, 320, "Распознанный текст: "+text_KIB, 1);
func(text_KIB, i); // вызов функции, которая проверяет корректность символов и нажимает клавиши
posX=posX+deltaX; i++;
sleep(pause_);
}
posX=coord[0];
sleep(10);
}
sleep(10);
}
function func(string s, int number)
{
new char c[size(s)+1];
strcpy(#c[0], s); // скопировать строку в массив
for(int i=0; i<size(s); i++) // для всех символов
{
if(symbolcorrect(i)>0.7) // если корректность символа больше 0.7
{
if(c[i]=='п'){textout(10, 300, 400, format(number)+" Вправо", 1); key(39); continue;}
if(c[i]=='л'){textout(10, 300, 400, format(number)+" Влево", 1); key(37); continue;}
if(c[i]=='н'){textout(10, 300, 400, format(number)+" Вниз", 1); key(40); continue;}
if(c[i]=='в'){textout(10, 300, 400, format(number)+" Вверх", 1); key(38); continue;}
}
}
delete c;
}
CREATE_TIMER(0, 30)
{
if(getkeystate(CONTROL) && getkeystate(90)) // Ctrl+Z включает/выключает
{
while(getkeystate(CONTROL) && getkeystate(90))sleep(10);
if(script)script=0;
else script=1;
}
}
Это помогло, но при этом теперь большие проблемы с распознанием или нажатием, даже не знаю , он иногда прожимает, иногда нет, часто вообще не прожимает, или прожимает 1 или 2 и сбивается, может слишком далеко сместили область поиска ?
(Добавление)
Да он опозновать странно стал, первая клавиша левая, в боте пишет - П это правая(Отредактировано автором: 04 Мая, 2019 - 12:59:21) |
|
|
Limbaugh |
Отправлено: 04 Мая, 2019 - 13:26:13
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Добавьте mousemove и посмотрите где распознаётся текст.
Куда лучше добавить эту функцию , а то Я между распознанием текста поставил и ничего не происходит
Так сделал - mousemove(text_KIB);(Отредактировано автором: 04 Мая, 2019 - 13:29:09) |
|
|
Limbaugh |
Отправлено: 04 Мая, 2019 - 13:40:09
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Перед распознаванием:
CODE:mousemove(posX, coord[1]);
sleep(500);
mousemove(posX+deltaX, coord[3]);
sleep(500);
Нажмите для увеличения
Но Я изменил int deltaX=48 на 5 , сейчас с твоим 46 попробую(Отредактировано автором: 04 Мая, 2019 - 13:55:19) |
|
|
Limbaugh |
Отправлено: 04 Мая, 2019 - 13:53:48
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Перед распознаванием:
CODE:mousemove(posX, coord[1]);
sleep(500);
mousemove(posX+deltaX, coord[3]);
sleep(500);
Вот с
Нажмите для увеличения
int deltaX=46; // расстояние между стрелками
И он постоянно в эти две точки прыгает(Отредактировано автором: 04 Мая, 2019 - 13:58:47) |
|
|
Limbaugh |
Отправлено: 04 Мая, 2019 - 14:03:45
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Цитата: И он постоянно в эти два угла прыгает
Зону поиска указывать всю, т. е. чтобы в неё все стрелки попадали, а не одна.
Зона поиска и так вся стоит -
int coord[4]={750, 787, 1171, 839} // зона поиска
или здесь тоже нужно сделать, что бы она вся была -
int deltaX=46; // расстояние между стрелками |
|
|
|