Limbaugh |
Отправлено: 05 Мая, 2019 - 16:18:27
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Подбирайте параметры.
Можно корректность символов уменьшить в двух местах if(symbolcorrect(0)>0.7)
Указать цвет красного пикселя, уменьшить количество пикселей и увеличить разбежность:
Цитата: int color_red=2302945; // цвет красной стрелки
int color_red_min=80; // сколько нужно минимум пикселей найти
int r=10; // разбежность
Для начала откройте скрин в пейнте и проверьте нормально ли в нём находит стрелки.
(Добавление)
В этой строке:
Цитата: posX=coord[0]+symbolxpos(0);
Добавьте:
Цитата: posX=coord[0]+symbolxpos(0)-10; // или чуть меньше 10
Если стрелки начинаются с вверх или вниз, то некорректно потом могут определяться стрелки влево и вправо.
Сделал только вот это - posX=coord[0]+symbolxpos(0)[color=red]-10 , больше ничего не менял и все сработало, спасибо огромное )) , теперь и красные жмет и вопросы жмет, поменял еще с 50 на int pause_=20; // пауза между поиском стрелок , теперь все отлично работает, спасибо огромное тебе =)) , осталось только одна мелочь, но она как бы не сильна нужна , ну все таки раз ты помогаешь, то спрошу, а то в следующий раз может не представиться такого шанса , хотелось бы еще сделать функцию , которая будет нажимать всегда оценку - идеально, то есть ты нажал все клавиши и тебе нужно нажать ровно в центре синего луча, что бы получить идеальную оценку, так вот, как можно сделать так, что бы бот сам нажимал, вот скрин - |
|
|
Limbaugh |
Отправлено: 05 Мая, 2019 - 19:33:21
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Цитата: нужно нажать ровно в центре синего луча
Он скорее белый. А что нажать надо?
Шарик перекрывает полоску когда пересекает её?
Нажать пробел, да, он перекрывает её, то есть шарик доходит до центра или рядом с ним и ты жмешь пробел, чем точней и ближе к центру нажмешь, тем лучше оценка, центр - идеально, рядом с ним - отлично, подальше от него - круто и еще плохо и мимо , мне нужно, что бы он жал всегда идеально, но что бы это тоже можно было включать и выключать, а то палевно когда одни идеалы жмешь )) |
|
|
Zireael |
Отправлено: 07 Мая, 2019 - 02:06:24
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Если искать по картинке, то он плохо у меня ищет
Начните с простого, найти оранжевый круг:
CODE:int Image_0[6][6]; // массив для картинки 6*6
loadimage (#Image_0[0][0], "D:\Kibor2\Шарик.bmp"); // загрузка картинки
int coord2[4]={999, 524, 1121, 539} // область поиска
int r2=40; // разбежность
int PosX, PosY;
loop()
{
if(findimage(1, #Image_0[0][0], -1, #PosX, #PosY, coord2[0], coord2[1], coord2[2], coord2[3], r2,r2,r2,r2,r2,r2,100,1, -1))
textout(0, 300, 300, format(PosX), 1); // выведет координату X картинки
else textout(0, 300, 300, "---", 1); //если не нашлась картинка
sleep(100);
}
Подберите разбежность, чтобы круг всегда находился.
С полоской тоже самое. Только картинку полоски делайте шириной 1-2 пикселя.
Если сделаете, то сравнить потом координаты картинок вообще не проблема. |
|
|
Limbaugh |
Отправлено: 07 Мая, 2019 - 08:38:55
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Цитата: Если искать по картинке, то он плохо у меня ищет
Начните с простого, найти оранжевый круг:
CODE:int Image_0[6][6]; // массив для картинки 6*6
loadimage (#Image_0[0][0], "D:\Kibor2\Шарик.bmp"); // загрузка картинки
int coord2[4]={999, 524, 1121, 539} // область поиска
int r2=40; // разбежность
int PosX, PosY;
loop()
{
if(findimage(1, #Image_0[0][0], -1, #PosX, #PosY, coord2[0], coord2[1], coord2[2], coord2[3], r2,r2,r2,r2,r2,r2,100,1, -1))
textout(0, 300, 300, format(PosX), 1); // выведет координату X картинки
else textout(0, 300, 300, "---", 1); //если не нашлась картинка
sleep(100);
}
Подберите разбежность, чтобы круг всегда находился.
С полоской тоже самое. Только картинку полоски делайте шириной 1-2 пикселя.
Если сделаете, то сравнить потом координаты картинок вообще не проблема.
Как правильно подбирать разбежность, методом тестов в игре ? или же можно через сам кибор, через графику или еще как то подобрать? а так же картинка полоски должна быть без самого шарика?(Отредактировано автором: 07 Мая, 2019 - 08:42:30) |
|
|
Zireael |
Отправлено: 07 Мая, 2019 - 10:09:03
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как правильно подбирать разбежность, методом тестов в игре ?
Да, в игре.
Цитата: а так же картинка полоски должна быть без самого шарика?
Да.
Надо будет найти картинку шарика и картинку полоски, потом сравнить координату X, если шарик рядом с полоской, то нажать кнопку. Обычно надо нажимать немного заранее. |
|
|
Limbaugh |
Отправлено: 07 Мая, 2019 - 11:04:38
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Цитата: Как правильно подбирать разбежность, методом тестов в игре ?
Да, в игре.
Цитата: а так же картинка полоски должна быть без самого шарика?
Да.
Надо будет найти картинку шарика и картинку полоски, потом сравнить координату X, если шарик рядом с полоской, то нажать кнопку. Обычно надо нажимать немного заранее.
Правильно ли Я сделал для шарика? почему он его не ищет( даже не выводит координаты X и если не нашлась, то тоже ничего не пишет)
Code (Отобразить)CODE:int color_text_KIB_5[1]={16777215} // цвет текста
int coord[4]={750, 787, 1171, 839} // зона поиска
int deltaX=46; // расстояние между стрелками
int pause_=5; // пауза между поиском стрелок
loadsymbolbase("C:\Users\Limbaugh\Desktop\Arrows.sib"); // база для readtext
int color_red=2302945; // цвет красной стрелки
int color_red_min=60; // сколько нужно минимум пикселей найти
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.7)
{
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; // если все стрелки нажаты
}
posX=coord[0];
sleep(10);
}
sleep(10);
}
function func(char c, int number)
{
if(symbolcorrect(0)>0.7) // если корректность символа больше 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);
}
}
int Image_0[6][6]; // массив для картинки 6*6
loadimage (#Image_0[0][0], "C:\Users\Limbaugh\Desktop\Au2RLBOT\ball.bmp"); // загрузка картинки
int coord2[4]={954, 760, 1169, 783} // область поиска
int r2=40; // разбежность
int PosX, PosY;
loop()
{
if(findimage(1, #Image_0[0][0], -1, #PosX, #PosY, coord2[0], coord2[1], coord2[2], coord2[3], r2,r2,r2,r2,r2,r2,100,1, -1))
textout(0, 300, 300, format(PosX), 1); // выведет координату X картинки
else textout(0, 300, 300, "---", 1); //если не нашлась картинка
sleep(100);
}
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;
}
} |
|
|
|