obm пишет:
сли массив 4ех мерный, то ху картинки будут тут [0][0][x][y]?
Зачем нужен 4 мерный массив изображений? Функции поиска работают с двух и трехмерными только.
Если надо 4 мерный, то приводите расчеты к трехмерному.
obm пишет:
у Кибора есть проблема, после нажатия enter в поисковом поле, бот закрывается
Исправлю
По вопросу... Забудьте про положение позиции. Работайте с экраном как работали бы Вы.
Вы когда хотите куда нибудь щелкнуть что делаете? Смотрите куда щелкаете и если 5 секунд назад эта кнопка была в другой позиции этот не мешает Вам увидеть где она перед кликом...
Вот примерный алгоритм в работе.
Смысл - после того как установили цены запускается бот.
Он сканирует все строчки и делает скрины всех Ваших, что бы потом мог отследить их позиции. При создание скрина строки специально закрашивается черным цветом область где время. Для того что бы изменение времени не влияло на поиск этой строки. (для этого в поиске черный цвет фоновый)
В процессе работы бот находит в цикле постоянно Ваши строки (не учитывая графу время, так как там строка при создание скрина залилась черным фоновым цветом) и соответственно находит новые координаты. И нам не важно как они сдвинулись.
Относительно этих уже координат бот смотрит или был переход времени на фазу A.
Как только переход засек - запускает счетчик для этой строки. И не важно что она меняет свою позицию. Ищется по скрину.
Если что то не понятно, или не совсем точно как надо - объясню в скайпе. Думаю Вам доделать что надо не составит труда даже если что не так как должно быть.
Скачать
архив с рисунками и распаковать на C
Загрузить в Кибор этот скрипт. Расположить анимированный рисунок на странице браузера так что бы он был виден. Запустить скрипт. Следовать инструкции. Он предложит обозначить область поиска. (немного выше и левее рисунка и немного ниже правее.) Потом будет ждать первого кадра анимации с словом Старт. Это сделано так как анимация круговая и что бы скрипт начал работу с той с которой надо позиции.
Хочу заметить, что это gif анимированный, к тому же сделанный с Вашего сжатого скрина и при этом поиск и screen прекрасно работают, несмотря на то что качество очень плохое. В игре будет еще проще.
Если что не так ищет - настройте int r=25, p=90; int r1=30, p1=80; int r2=20, p2=95;
Запускайте в Мозилле. Для того что бы увидеть какие скрины делает убрать коммент с
//saveimage(#Ris[kol][0][0], "C:\test_x\s"+format(kol)+".bmp");//Тест
CODE:int r=25, p=90;
int r1=30, p1=80;
int r2=20, p2=95;
int stris[37][37];//Рамка значка.
int moya_stavka[66][9];//моя ставка
int Ris[20][631][5];//Массив рис строк с моей ставкой
int Flag[20];
int tim[20];
int kol=0;//Количество моих строк
int PosX[20], PosY[20];//Позиции строк всех
int X, Y;
int stX, stY, fX, fY;//Координаты начала - конца рисунка строки всей
int nx=260, ny=0;//Координаты начала времени в строке
int nx1=335, ny1=5;//Координаты конца времени в строке
int tx, ty;
int SX, SY, FX, FY;
int tt;
int Рисунок_Фазы_А[46][14];//(размер рисунка должен быть меньше [nx1-nx][ny1-ny])
int Xt, Yt;
int k;
int n=0;
int startscrip[81][14];
if (load_image()==-1){messagebox ("Не найдены рисунки в C:\test_x"); goto er;}
//Тут указываем область в которй надо искать
textbkcolor (65535,0);//Ставим цвет фона и текста при выводе текста на экран
textout(0, 50, 50, "Наведите мышь на левый верхний угол области поиска и нажмите Ё.", 0);
q: if (getkeystate(192)!=1){sleep(50); goto q;}//Ждем когда нажмется Ё
getmouse(SX, SY);//Запишем координаты
sleep(500);
textbkcolor (16777215,0);
textout(0, 50, 50, "Наведите мышь на на нижний правый угол области поиска и нажмите Ё.", 0);
q1: if (getkeystate(192)!=1){sleep(50); goto q1;}
getmouse(FX, FY);//Запишем координаты мышки
resettextout(1);
textbkcolor (65535,0);//Ставим цвет фона и текста при выводе текста на экран
textout(0, 50, 50, "Ждем появления надписи Старт на изображение", 2);
//Ждем надписи старт на первом кадре
hh: if (findimage(1, #startscrip[0][0], 0, #Xt, #Yt, SX, SY, FX, FY, r, r, r, r, r, r, p, 1, -1)!=1){sleep(50); goto hh;}
textout(0, 50, 50, "Бот пошел", 2);
//Находим все строки
k=findimage(-1, #stris[0][0], 0, #PosX[0], #PosY[0], SX, SY, FX, FY, r, r, r, r, r, r, p, 1, -1);
scan_image();
/*Тут имеем массив моих строк с зачернением времени. Теперь можно перебирать их в цикле
и отслеживать положение их. По их положению можем отслеживать время в месте зачернения
поиском самого времени и отследить момент когда Б->А.
В этот момент запускаем счет времени флагом Flag=1 для строки этой.
Если позиция строки изменится - скрипт ее найдет по рисунку скрина строки.
*/
textout(0, 50, 50, "Бот засек наши позиции", 0);
sleep(500);
l:
n=0;
e: if (n<kol)
{// 1
if (findimage(1, #Ris[n][0][0], 0, #X, #Y, SX, SY, FX, FY, r2, r2, r2, r2, r2, r2, p2, 1, -1)==1)//Ищем наши строки по очереди
{//2
X=X+SX; Y=Y+SY;//Корректируем относительно SX, SY - приведем к экранным координатам
//Если нашли Теперь в X, Y координаты нашей строки и нам чхать смещалась она как.
//в X+250, Y-10 - старт поиска перехода с Б->А для строки этой
//Проверка или время для этой строки не идет еще
if (Flag[n]==0)
{//3
//Проверка наличия фазы А этой строки в экранных координатах X+250, Y-10, X+340, Y+15 (там время для этой строки
if (findimage(1, #Рисунок_Фазы_А[0][0], 0, #Xt, #Yt, X+250, Y-10, X+340, Y+15, r2, r2, r2, r2, r2, r2, p2, 1, -1)==1)
{//4
Flag[n]=1;//Флаг в 1. Теперь эта строка на таймере
tim[n]=gettime();//Засекаем время
}//4
}//3
//Тут считаем таймер для строк которые имеют флаг 1
if (Flag[n]==1)
{//5
tt=(gettime()-tim[n])/1000;
textout(1, X+815, Y, "Тут таймер: "+format(tt), 1);
if (tt>10)//Для теста 10 секунд
{//Время прошло
Flag[n]=2;
textout(1, X+815, Y, "Клик", 2);
Покупаем(X, Y);
}
}//5
}//2
n++;
sleep(50);
goto e;
}//1
sleep(50);
goto l;
er:;
function Покупаем(int xx, int yy)//Покупает
{
//xx yy координаты строки
}
function screen_image()//Делать скрин всей строки если это моя ставка
{
screen(#Ris[kol][0][0], stX, stY+18, fX, stY+23, -1);//Узкая полоса для быстроты
//Зачерняем время
tx=nx; ty=ny;
s1: if (tx<nx1)
{
ty=ny;
s: if (ty<ny1)
{
Ris[kol][tx][ty]=0;
ty++;
goto s;
}
tx++;
goto s1;
}
//saveimage(#Ris[kol][0][0], "C:\test_x\s"+format(kol)+".bmp");//Тест
kol++;
}
function scan_image()//Все строки сканируем на наличие моей ставки
{
int n=0;
s: if (n<k)
{
stX=SX+PosX[n]-1; stY=SY+PosY[n]-3; fX=SX+PosX[n]+630; fY=SY+ PosY[n]+40 ;//Координаты строки
if (findimage(1, #moya_stavka[0][0], 0, #X, #Y, stX, stY, fX, fY, r1, r1, r1, r1, r1, r1, p1, 1, -1)==1)//Моя ставка?
{
screen_image();//Делае м скрин строки если моя ставка
}
n++;
goto s;
}
}
function load_image()
{
if (loadimage (#stris[0][0], "C:\test_x\stris.bmp")<1)return -1;
if (loadimage (#moya_stavka[0][0], "C:\test_x\moya_stavka.bmp")<1)return -1;
if (loadimage (#Рисунок_Фазы_А[0][0], "C:\test_x\fa.bmp")<1)return -1;
if (loadimage (#startscrip[0][0], "C:\test_x\start.bmp")<1)return -1;
int n=0;
s: if (n<20){Flag[n]=0; n++;goto s;}//Обнуление
return 1;
}
Нажмите для увеличения