Limbaugh |
Отправлено: 11 Мая, 2019 - 00:17:29
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Сначала надо подобрать параметры чтобы всё нормально находилось, а уже потом использовать в основном коде. Если картинки находятся через раз, то никогда не будет нормально работать.
Ок, сейчас снова буду делать, когда подбирал, то нормально было, хм, ладно, отпишу как сделаю )
(Добавление)
Zireael пишет: В архиве видео https://drive.google.com/open?id...ZqtG1aCtzo2ZJlQp. Когда шарик у полоски вместо ---- показываются ++++.
Скрипт из видео (Отобразить)CODE:int Image_0[9][8];
loadimage (#Image_0[0][0], "D:\Kibor2\Image_0.bmp");
int coord2[4]={1152, 737, 1319, 758} // область поиска
int r1=40; // разбежность для шарика
int Image_1[1][14];
loadimage (#Image_1[0][0], "D:\Kibor2\Image_1.bmp");
int r2=70; // разбежность для полоски
Я взял твою разбежность как тут на видео и в коде для шара . и для полоски, изменил массивы, у тебя видно на видео, что он прям в центре полоске находит и пишет ++ , у меня же за полоской, когда шар уже вышел за неё, а почему у тебя у шара массивы 9 и 8 ? и у полоски 1 14, хотя у меня на полоске всегда получается 1 23 и на шаре 23 21
int PosX1, PosX2, PosY;
loop()
{
if(findimage(1, #Image_1[0][0], -1, #PosX1, #PosY, coord2[0], coord2[1], coord2[2], coord2[3], r2,r2,r2,r2,r2,r2,100,1, -1))
{
//mousemove();
if(findimage(1, #Image_0[0][0], -1, #PosX2, #PosY, coord2[0], coord2[1], coord2[2], coord2[3], r1,r1,r1,r1,r1,r1,100,1, -1))
{
if(PosX2+15>PosX1)
{
textbkcolor(255, 65280);
textout(1, coord2[0]+PosX1, coord2[1]-15, "++++", 1);
}
else
{
textbkcolor(65280, 255);
textout(1, coord2[0]+PosX1, coord2[1]-15, "----", 1);
}
}
}
}
Картинка полоски сохранена при разбежности 130 в фильтре динамики.
(Добавление)
Zireael пишет: В архиве видео https://drive.google.com/open?id...ZqtG1aCtzo2ZJlQp. Когда шарик у полоски вместо ---- показываются ++++.
Скрипт из видео (Отобразить)CODE:int Image_0[9][8];
loadimage (#Image_0[0][0], "D:\Kibor2\Image_0.bmp");
int coord2[4]={1152, 737, 1319, 758} // область поиска
int r1=40; // разбежность для шарика
int Image_1[1][14];
loadimage (#Image_1[0][0], "D:\Kibor2\Image_1.bmp");
int r2=70; // разбежность для полоски
int PosX1, PosX2, PosY;
loop()
{
if(findimage(1, #Image_1[0][0], -1, #PosX1, #PosY, coord2[0], coord2[1], coord2[2], coord2[3], r2,r2,r2,r2,r2,r2,100,1, -1))
{
//mousemove();
if(findimage(1, #Image_0[0][0], -1, #PosX2, #PosY, coord2[0], coord2[1], coord2[2], coord2[3], r1,r1,r1,r1,r1,r1,100,1, -1))
{
if(PosX2+15>PosX1)
{
textbkcolor(255, 65280);
textout(1, coord2[0]+PosX1, coord2[1]-15, "++++", 1);
}
else
{
textbkcolor(65280, 255);
textout(1, coord2[0]+PosX1, coord2[1]-15, "----", 1);
}
}
}
}
Картинка полоски сохранена при разбежности 130 в фильтре динамики.
Я взял твою разбежность как тут на видео и в коде для шара . и для полоски, изменил массивы, у тебя видно на видео, что он прям в центре полоске находит и пишет ++ , у меня же за полоской, когда шар уже вышел за неё, а почему у тебя у шара массивы 9 и 8 ? и у полоски 1 14, хотя у меня на полоске всегда получается 1 23 и на шаре 23 21 |
|
|
Limbaugh |
Отправлено: 11 Мая, 2019 - 02:08:55
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Цитата: почему у тебя у шара массивы 9 и 8 ? и у полоски 1 14, хотя у меня на полоске всегда получается 1 23 и на шаре 23 21
А кто сказал что искать нужно всю полоску, длиной 14 или 10 это тоже полоска.
Тоже самое с шаром, можно искать только часть.
Ясно, Я сейчас что то натыкал )) Для полоски р-40 для шара-130 и оценка идеально была 10 раз подряд, правда он бывает тупит и не нажимает пробел, но за танец 1 или 2 раза, почему не пойму, когда такое происходит, то +++ стоят сначало до полоски , даже когда шар не рядом с ней и потом мисс
(Добавление)
Может паузы определенной после нажатия пробела не хватает? Как и говорил он жмет подряд раз 6-10 без разницы на какую оценку и после +++ с самого начала и до конца стоит, хотя шар в самом начале и так пока не промахнешься, потом оно как бы сбивается и опять нормально становится, то есть опять раз 10 нажмет и снова так же |
|
|
Limbaugh |
Отправлено: 11 Мая, 2019 - 13:48:58
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Цитата: Для полоски р-40 для шара-130
Скорее наоборот, шар и так нормально находится.
На скрипте из видео тестили? Нормально ++++ ставит?
Ставил ++ за полоской почему то, а так не идеально как то, может скините те изображения, что у вас, Я наверное чего то не понимаю
(Добавление)
В динамики перепробовал с 10 до 230 , в любом случае полоска закрывается всегда, может через 7 запусков, но закроется |
|
|
Limbaugh |
Отправлено: 11 Мая, 2019 - 22:04:30
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Цитата: Для полоски р-40 для шара-130
Скорее наоборот, шар и так нормально находится.
На скрипте из видео тестили? Нормально ++++ ставит?
Это скорей всего не в обнаружении дело, поскольку находит спокойно все, как будто где то проблема в скрипте, Я на счет того, что он жмет 9 раз и потом +++ с начало и до конца, пока он мисс не сделает
(Добавление)
Zireael пишет: Цитата: Для полоски р-40 для шара-130
Скорее наоборот, шар и так нормально находится.
На скрипте из видео тестили? Нормально ++++ ставит?
Вот код -
Code (Отобразить)CODE:int Image_0[8][8]; // массив для картинки шарика (исправить размеры массива на нужный)
loadimage (#Image_0[0][0], "C:\Users\Limbaugh\Desktop\Au2RLBOT\Image_ball.bmp" ); // указать путь
int coord2[4]={953, 759, 1170, 784} // область поиска
int r1=40; // разбежность для шарика
int Image_1[1][15];
loadimage (#Image_1[0][0], "C:\Users\Limbaugh\Desktop\Au2RLBOT\Image_poloska.bmp" );
int r2=130; // разбежность для полоски
int PosX1, PosX2, PosY;
int color_text_KIB_5[1]={16777215} // цвет текста
int coord[4]={750, 787, 1171, 839} // зона поиска
int deltaX=46; // расстояние между стрелками
int pause_=1; // пауза между поиском стрелок
loadsymbolbase("C:\Users\Limbaugh\Desktop\Au2RLBOT\Arrows.sib"); // база для readtext
int color_red=2302945; // цвет красной стрелки
int color_red_min=80; // сколько нужно минимум пикселей найти
int r=10; // разбежность
int fcolorX[999], fcolorY[999]; // массивы для findcolor
int script=0, i, posX;
char text_KIB; // сюда распознаётся текст, 1 символ
enabletimer(0);
loop()
{
textbkcolor (65280, 255);
textout(0, 300, 300, "Запуск/остановка скрипта Ctrl+Z", 1);
while(script)
{
textbkcolor (255, 65280);
textout(0, 300, 300, "Скрипт работает", 1);
// ожидание появления стрелок
loop()
{
if(readtext(RU, #text_KIB, 8, 1, -1, -1, -1, #color_text_KIB_5[0], 1, 5, -1, coord[0], coord[1], coord[2], coord[3], -1))
{
if(symbolcorrect(0)>0.8)
{
posX=coord[0]+symbolxpos(0)-10; break;
}
}
sleep(10);
}
/////////
i=0;
while(posX < coord[2]) // пока не проверили все стрелки
{
if(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))
{
func(text_KIB, i); // вызов функции, которая проверяет корректность символа и нажимает клавиши
posX=posX+deltaX; i++; // смещаем область поиска для readtext
sleep(pause_);
}
else break; // если все стрелки нажаты
}
find_image(2000); // в скобках время, в течении которого ожидается когда шарик дойдёт до полоски
posX=coord[0];
sleep(10);
}
sleep(10);
}
function func(char c, int number)
{
if(symbolcorrect(0)>0.8) // если корректность символа больше 0.7
{
// поиск красных пикселей
int count_red=findcolor(sizearray(fcolorX), #fcolorX[0],#fcolorY[0], posX, coord[1], posX+deltaX, coord[3], color_red, r,r,r,r,r,r, -1);
if(count_red>color_red_min) // если найдено нужное количество красных пикселей
{
textbkcolor (65280, 255);
textout(9, 300, 380, "Красная стрелка", 1);
textbkcolor (255, 65279);
if(c=='п'){textout(10, 300, 400, format(number)+" Влево", 1); key(37); return;}
if(c=='л'){textout(10, 300, 400, format(number)+" Вправо", 1); key(39); return;}
if(c=='н'){textout(10, 300, 400, format(number)+" Вверх", 1); key(38); return;}
if(c=='в'){textout(10, 300, 400, format(number)+" Вниз", 1); key(40); return;}
}
else
{
textbkcolor (255, 16000000);
textout(9, 300, 380, "Синяя стрелка", 1);
textbkcolor (255, 65279);
if(c=='п'){textout(10, 300, 400, format(number)+" Вправо", 1); key(39); return;}
if(c=='л'){textout(10, 300, 400, format(number)+" Влево", 1); key(37); return;}
if(c=='н'){textout(10, 300, 400, format(number)+" Вниз", 1); key(40); return;}
if(c=='в'){textout(10, 300, 400, format(number)+" Вверх", 1); key(38); return;}
}
}
else
{
textbkcolor (255, 0);
textout(9, 300, 380, "Символ не распознан или некорректен", 1);
}
}
CREATE_TIMER(0, 30)
{
if(getkeystate(CONTROL) && getkeystate(90)) // Ctrl+Z включает/выключает
{
if(script)script=0;
else script=1;
while (getkeystate(CONTROL)==1 || getkeystate(90)==1)sleep(50);
}
}
function find_image(int timeout)
{
if(findimage(1, #Image_1[0][0], -1, #PosX2, #PosY, coord2[0], coord2[1], coord2[2], coord2[3], r2,r2,r2,r2,r2,r2,100,1, -1)) // поиск полоски
{
looptime(timeout) // ждём когда шарик дойдёт до полоски
{
if(findimage(1, #Image_0[0][0], -1, #PosX1, #PosY, coord2[0], coord2[1], coord2[2], coord2[3], r1,r1,r1,r1,r1,r1,100,1, -1)) // поиск шарика
{
if(PosX1+15>PosX2) //
{
textbkcolor(255, 65280); // можно убрать
textout(1, coord2[0]+PosX2, coord2[1]-16, "++++", 1); // можно убрать
key(32);
break;
}
else // можно убрать
{ // можно убрать
textbkcolor(65280, 255); // можно убрать
textout(1, coord2[0]+PosX2, coord2[1]-16, "----", 1); // можно убрать
} // можно убрать
}
}
}
} |
|
|
|