ss11ukr |
Отправлено: 07 Декабря, 2013 - 16:24:51
|
Прохожий
Покинул форум
Сообщений всего: 10
Дата рег-ции: Нояб. 2013
Репутация: 0
|
Kibor Спасибо за подсказки и помощь. Я все снова перечитав решил, что понял принципы, подкорректировал код, но он не работает. Возможно я опять что-то упустил.
Посмотрите пожалуйста при возможности и укажите на ошибки.
Код ниже:
(Добавление)
////
CODE:win w;
int x, y;
if (messageboxyn("Нажмите ДА. Наведите мышь на игру браузере и нажмите Ё. Для отмены нажмите НЕТ.")==-1)goto er;
r: if (getkeystate(192)!=1){sleep(50); goto r;}
getmouse(x, y);
w=getwindow(1, x, y);//win w=getwindow(0, X, Y);//(0 получает указатель главного окна или если 1 получает контролла который по этим координатам.координата x y);
//textout(4, x+20, y+20, "Название: "+w.name+"Класс: "+w.class+" Размер X: "+format (w.widthclient)+" Размер Y: "+format (w.heightclient), 1);
//activate(w);
sleep(5000);
er:;
////
int color, xe, ye;//xe, ye - разрешение экрана всего
getdisplay(color, xe, ye);//Узнать разрешение экрана
//Масив для хранения расунка Image_* загруженного с файла в память
int Image_0[16][18];
int Image_1[16][15];
int Image_2[27][25];
int Image_3[28][25];
////
//activate(w);//sleep(500);
loadimage (#Image_0[0][0], "C:\megapolis\Image_0.bmp");
loadimage (#Image_1[0][0], "C:\megapolis\Image_1.bmp");
loadimage (#Image_2[0][0], "C:\megapolis\Image_2.bmp");
loadimage (#Image_3[0][0], "C:\megapolis\Image_3.bmp");
////
int PosX_0[1];int PosY_0[1];
int PosX_1[1];int PosY_1[1];
int PosX_2[1];int PosY_2[1];
int PosX_3[1];int PosY_3[1];
////
//
//// Условия и переходы: if (1==1) если 1 равно 1 то нашли.Если не нашли будет if (0==1)
a: if (poisk_Image_0()==1)//если Image_0 - найдена, то искать остальные картинки (1,2,3) и перейти далее на a1.
{
poisk_Image_1();
poisk_Image_2();
poisk_Image_3();
}
goto a1;
a1: if (poisk_Image_0()==0)//если Image_0 - НЕ найдена, то искать остальные картинки (1,2,3) и вернуться назад на a.
{
poisk_Image_1();
poisk_Image_2();
poisk_Image_3();
}
goto a;
//// 0 //
function poisk_Image_0()
{
z0: if (findimage(1, #Image_0[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==1)
{
sleep(50);
goto z0;
}
sendmouse(LEFT, PosX_0[0]+8, PosY_0[0]+9, w);
sleep(rand(200,500));
//return 1;
}
//return 0;
//}
//// 1 //
function poisk_Image_1()
{
z1: if (findimage(1, #Image_1[0][0], 255, #PosX_1[0], #PosY_1[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==1)
{
sleep(50);
goto z1;
}
sendmouse(LEFT, PosX_1[0]+8, PosY_1[0]+8, w);
sleep(rand(200,500));
}
//// 2 //
function poisk_Image_2()
{
z2: if (findimage(1, #Image_2[0][0], 255, #PosX_2[0], #PosY_2[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==1)
{
sleep(50);
goto z2;}
sendmouse(LEFT, PosX_2[0]+14, PosY_2[0]+14, w);
sleep(rand(200,500));
}
//// 3 //
function poisk_Image_3()
{
z3: if (findimage(Я1, #Image_3[0][0], 255, #PosX_3[0], #PosY_3[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==1)
{
sleep(50);
goto z3;}
sendmouse(LEFT, PosX_3[0]+14, PosY_3[0]+14, w);
sleep(rand(200,500));
}
////
(Добавление)
Архив- скрипт и картинки:
http://yadi.sk/d/lWVXCEcFDv4Nx |
|
|
Kibor |
Отправлено: 07 Декабря, 2013 - 17:04:56
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
1. Логика в
Цитата: a: if (poisk_Image_0()==1)//если Image_0 - найдена, то искать остальные картинки (1,2,3) и перейти далее на a1.
{
poisk_Image_1();
poisk_Image_2();
poisk_Image_3();
}
goto a1;
a1: if (poisk_Image_0()==0)//если Image_0 - НЕ найдена, то искать остальные картинки (1,2,3) и вернуться назад на a.
{
poisk_Image_1();
poisk_Image_2();
poisk_Image_3();
}
goto a;
отсутствует.
2. poisk_Image_0() вообще сейчас нельзя сравнивать, так как она ничего не возвращает. return закоментирован.
3.
Цитата: z0: if (findimage(1, #Image_0[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==1)
{
sleep(50);
goto z0;
}
sendmouse(LEFT, PosX_0[0]+8, PosY_0[0]+9, w);
означает уйти в замкнутый цикл пока на экране есть картинка Image_0 и как только она исчезнет кликнуть по неизвестно каким координатам, так как картинки нет уже...
Быстрее всего эта функция вгоняет программу в цикл с которого она не выходит.
Я короче отредактирую скрипт что бы работало, так как мне кажется быть должно.. логики в нынешнем я не вижу.
Ну а как должна быть логика сами думайте. Я не знаю что там надо именно делать... Внимательно изучите отрывок 1 и проанализируйте его действия.
CODE:win w;
int x, y;
if (messageboxyn("Нажмите ДА. Наведите мышь на игру браузере и нажмите Ё. Для отмены нажмите НЕТ.")==-1)goto er;
r: if (getkeystate(192)!=1){sleep(50); goto r;}
getmouse(x, y);
w=getwindow(1, x, y);//win w=getwindow(0, X, Y);//(0 получает указатель главного окна или если 1 получает контролла который по этим координатам.координата x y);
//textout(4, x+20, y+20, "Название: "+w.name+"Класс: "+w.class+" Размер X: "+format (w.widthclient)+" Размер Y: "+format (w.heightclient), 1);
//activate(w);
sleep(5000);
////
//Масив для хранения расунка Image_* загруженного с файла в память
int Image_0[16][18];
int Image_1[16][15];
int Image_2[27][25];
int Image_3[28][25];
////
//activate(w);//sleep(500);
loadimage (#Image_0[0][0], "C:\megapolis\Image_0.bmp");
loadimage (#Image_1[0][0], "C:\megapolis\Image_1.bmp");
loadimage (#Image_2[0][0], "C:\megapolis\Image_2.bmp");
loadimage (#Image_3[0][0], "C:\megapolis\Image_3.bmp");
////
int PosX_0[1];int PosY_0[1];
int PosX_1[1];int PosY_1[1];
int PosX_2[1];int PosY_2[1];
int PosX_3[1];int PosY_3[1];
////
//
//// Условия и переходы: if (1==1) если 1 равно 1 то нашли.Если не нашли будет if (0==1)
a: poisk_Image_0();
poisk_Image_1();
poisk_Image_2();
poisk_Image_3();
goto a;
er:;
//// 0 //
function poisk_Image_0()
{
z0: if (findimage(1, #Image_0[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
{
sleep(50);
goto z0;
}
sendmouse(LEFT, PosX_0[0]+8, PosY_0[0]+9, w);
sleep(rand(200,500));
//return 1;
}
//return 0;
//}
//// 1 //
function poisk_Image_1()
{
z1: if (findimage(1, #Image_1[0][0], 255, #PosX_1[0], #PosY_1[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
{
sleep(50);
goto z1;
}
sendmouse(LEFT, PosX_1[0]+8, PosY_1[0]+8, w);
sleep(rand(200,500));
}
//// 2 //
function poisk_Image_2()
{
z2: if (findimage(1, #Image_2[0][0], 255, #PosX_2[0], #PosY_2[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
{
sleep(50);
goto z2;}
sendmouse(LEFT, PosX_2[0]+14, PosY_2[0]+14, w);
sleep(rand(200,500));
}
//// 3 //
function poisk_Image_3()
{
z3: if (findimage(Я1, #Image_3[0][0], 255, #PosX_3[0], #PosY_3[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
{
sleep(50);
goto z3;}
sendmouse(LEFT, PosX_3[0]+14, PosY_3[0]+14, w);
sleep(rand(200,500));
}
//// |
|
|
ss11ukr |
Отправлено: 07 Декабря, 2013 - 19:59:02
|
Прохожий
Покинул форум
Сообщений всего: 10
Дата рег-ции: Нояб. 2013
Репутация: 0
|
Спасибо.
Становится все более ясным, а именно:
Для создания правильной логики, там, где ищутся конкретные картинки с функцией
"poisk_Image_*" , должен быть оператор "return",
, который возвращает кудато 0 или 1 . Или 1 и 0 - куда и как я пока не разобрался.
Исходя из этого, мне видимо надо заменить везде:
CODE:
function poisk_Image_№*()
{
z0: if (findimage(1, #Image_№*[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
{
sleep(50);
goto z0;
}
sendmouse(LEFT, PosX_0[0]+8, PosY_0[0]+9, w);
sleep(rand(200,500));
}
на:
CODE:
function poisk_Image_№*()
{
{
z0: if (findimage(1, #Image_№*[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
{
sleep(50);
goto z0;
}
sendmouse(LEFT, PosX_0[0]+8, PosY_0[0]+9, w);
sleep(rand(200,500));
return 1;//Выход с функции и вернуть 1. //- это видимо выход из функции нажатия левой кнопки мыши.
}
return 0;//Выход с функции и вернуть 0. //- это видимо выход из функции poisk_Image_№*.
}
Как учебный пример на базе отредактированного скрипта, где:
Картинки 0,1 есть на экране, но после кликов по ним исчезают и примерно через 3-5 минут появляются на игровом поле.
Картинка 2 - элемент интерфейса игры и ее можно скрыть, при клике по ней показывает анимацию.
Картинка 3 - элемент интерфейса, при клике по ней показывает анимацию.
А как можно реализовать в замкнутом цикле такую логику:
искать: 2
если 2 не найдено, то искать 3 и клик по 3
если 2 найдено, то искать 0,1 и если 0,1 найдено клик по 0,1
CODE:
a: if (poisk_Image_2()==-1)
{
poisk_Image_3();
}
goto a1;
a1: if (poisk_Image_2()==1)
{
poisk_Image_0();
poisk_Image_1();
}
goto a;
Но тут у меня видимо тоже есть ошибка, потому как не кликает по рис 3, когда 2 скрыта.
Поправите пожалуйста. |
|
|
Kibor |
Отправлено: 07 Декабря, 2013 - 20:27:37
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
ss11ukr пишет: как можно реализовать в замкнутом цикле такую логику:
искать: 2
если 2 не найдено, то искать 3 и клик по 3
если 2 найдено, то искать 0,1 и если 0,1 найдено клик по 0,1
CODE:a:
if (poisk_Image_2()==1)
{
poisk_Image_0();
poisk_Image_1();
}
else
{
poisk_Image_3();
}
goto a;
er:;
//// 0 //
function poisk_Image_0()
{
if (findimage(1, #Image_0[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)return;
sendmouse(LEFT, PosX_0[0]+8, PosY_0[0]+9, w);
sleep(rand(200,500));
}
function poisk_Image_1()
{
if (findimage(1, #Image_1[0][0], 255, #PosX_1[0], #PosY_1[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)return;
sendmouse(LEFT, PosX_1[0]+8, PosY_1[0]+8, w);
sleep(rand(200,500));
}
//// 2 //
function poisk_Image_2()
{
if (findimage(1, #Image_2[0][0], 255, #PosX_2[0], #PosY_2[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)return 0;
sendmouse(LEFT, PosX_2[0]+14, PosY_2[0]+14, w);
sleep(rand(200,500));
return 1;
}
//// 3 //
function poisk_Image_3()
{
if (findimage(ß1, #Image_3[0][0], 255, #PosX_3[0], #PosY_3[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)return;
sendmouse(LEFT, PosX_3[0]+14, PosY_3[0]+14, w);
sleep(rand(200,500));
}
////
ss11ukr пишет: Для создания правильной логики, там, где ищутся конкретные картинки с функцией
"poisk_Image_*" , должен быть оператор "return",
, который возвращает кудато 0 или 1 . Или 1 и 0 - куда и как я пока не разобрался.
для работы с программой надо обязательно разобраться в этом. это намного проще все чем кажется. Может эти помогут темы...
Читать с поста этого и дальше
создание функций - поэксперементировать с примерами |
|
|
ss11ukr |
Отправлено: 10 Декабря, 2013 - 00:43:00
|
Прохожий
Покинул форум
Сообщений всего: 10
Дата рег-ции: Нояб. 2013
Репутация: 0
|
Спасибо Кибор, становится более понятно, но если можно, еще вопрос.
Исходя из Вашего кода в предыдущем посте, по выполнению логики:
Цитата: А как можно реализовать в замкнутом цикле такую логику:
искать: 2
если 2 не найдено, то искать 3 и клик по 3
если 2 найдено, то искать 0,1 и если 0,1 найдено клик по 0,1
Я попробовал сделать небольшой пример - тренажер, с которым можно поиграться меняя значения и операторы. Чисто гипотетически, чтоб понять как работает логика и переходы и далее отрабатывать различные варианты логики. Подставляя 0 или 1. Без привязки к каким либо рисункам или внешним программам, Все выполняется в Кибор.
Но этот скрипт почему-то не работает, поправьте пожалуйста.
CODE:////////////////////
int poisk_Image_0=0;// Подставить 0 или 1, 0-нет картинки, 1-есть картинка
int poisk_Image_1=1;//Подставить 0 или 1, 0-нет картинки, 1-есть картинка
int poisk_Image_2=1;//Подставить 0 или 1, 0-нет картинки, 1-есть картинка
int poisk_Image_3=1;//Подставить 0 или 1, 0-нет картинки, 1-есть картинка
////////////////////
///Тут пробуем разные варианты реализации логики
a:
if (poisk_Image_2()==1)
{
poisk_Image_0();
poisk_Image_1();
}
else
{
poisk_Image_3();
}
goto a;
er:;
/////////////////////
//Тут играемся с return в разных вариантах
function poisk_Image_0()
{
if ((poisk_Image_0)==0)
return;
messagebox (Image_0);
pause 1000; sleep 1000;
}
///
function poisk_Image_1()
{
if ((poisk_Image_1)==0)
return;
messagebox (Image_1);
pause 1000; sleep 1000;
}
///
function poisk_Image_2()
{
if ((poisk_Image_2)==0)
return 0;
messagebox (Image_2);
pause 1000; sleep 1000;
return 1;
}
///
function poisk_Image_3()
{
if ((poisk_Image_3)==0)
return;
messagebox (Image_3);
pause 1000; sleep 1000;
}
///////////////////////
(Добавление)
То-есть это как эмулятор, который выдает текст по ходу выполнения скрипта. В тексте название найденного рисунка.
(Добавление)
Извиняюсь разобрался:
CODE:////////////////////
int Image_0=1;
int Image_1=1;
int Image_2=1;
int Image_3=1;
////////////////////
//a:
if (poisk_Image_2()==1)
{
poisk_Image_0();
poisk_Image_1();
}
else
{
poisk_Image_3();
}
//goto a;
er:;
/////////////////////
function poisk_Image_0()
{
if ((Image_0)==0)
return;
messagebox ("Image_0");
pause 1000; sleep 1000;
}
///
function poisk_Image_1()
{
if ((Image_1)==0)
return;
messagebox ("Image_1");
pause 1000; sleep 1000;
}
///
function poisk_Image_2()
{
if ((Image_2)==0)
return 0;
messagebox ("Image_2");
pause 1000; sleep 1000;
return 1;
}
///
function poisk_Image_3()
{
if ((Image_3)==0)
return;
messagebox ("Image_3");
pause 1000; sleep 1000;
}
/////////////////////// |
|
|
ss11ukr |
Отправлено: 13 Декабря, 2013 - 17:30:12
|
Прохожий
Покинул форум
Сообщений всего: 10
Дата рег-ции: Нояб. 2013
Репутация: 0
|
Спасибо.
Только я снова прошу Ваших подсказок.
Собравшись с силами, написал очень большой скрипт, на эту игру, но в итоге он к сожалению не работает. Кликает мышкой куда попало.
Пришлось вернуться к началу. Я все упростил до 4 картинок, и добавил в скрипт textout, чтоб видеть - куда именно будет клик мышки. Но почему-то, текст на экран выводится не по координатам клика, а намного выше.
Как можно сделать чтоб текст по textout был на месте клика в картинке?
Спасибо.
Код ниже:
CODE:///////
win w;
int x, y;
if (messageboxyn("Нажмите ДА. Наведите мышь на игру браузере и нажмите Ё. Для отмены нажмите НЕТ.")==-1)goto er;
r: if (getkeystate(192)!=1){sleep(50); goto r;}
getmouse(x, y);
w=getwindow(1, x, y);//win w=getwindow(0, X, Y);//(0 получает указатель главного окна или если 1 получает контролла который по этим координатам.координата x y);
//textout(4, x+20, y+20, "Название: "+w.name+"Класс: "+w.class+" Размер X: "+format (w.widthclient)+" Размер Y: "+format (w.heightclient), 1);
activate(w);
textbkcolor (255,0);
sleep(5000);
////
//Масив для хранения расунка Image_* загруженного с файла в память
int Image_0[16][18];
int Image_1[16][15];
int Image_2[27][25];
int Image_3[28][25];
////
//activate(w);//sleep(500);
loadimage (#Image_0[0][0], "C:\megapolis\Image_000.bmp");
loadimage (#Image_1[0][0], "C:\megapolis\Image_001.bmp");
loadimage (#Image_2[0][0], "C:\megapolis\Image_002.bmp");
loadimage (#Image_3[0][0], "C:\megapolis\Image_003.bmp");
////
int PosX_0[1];int PosY_0[1];
int PosX_1[1];int PosY_1[1];
int PosX_2[1];int PosY_2[1];
int PosX_3[1];int PosY_3[1];
////
//// Условия и переходы: if (1==1) если 1 равно 1 то нашли.Если не нашли будет if (0==1)
////
a:
if (poisk_Image_2()==1)
{
poisk_Image_0();
poisk_Image_1();
}
else
{
poisk_Image_3();
}
goto a;
er:;
(Добавление)
CODE://// 0 //
function poisk_Image_0()
{
if (findimage(1, #Image_0[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, w.widthclient, w.heightclient, 10, 10, 10, 10, 10, 10, 90, 1, w)==0)
return;textout(4, PosX_0[0]+8, PosY_0[0]+8, "0 ", 1);sleep 1300;
//sendmousedown(LEFT, PosX_0[0]+8, PosY_0[0]+9, w);
pause 900;
mouse(LEFT, PosX_0[0]+8, PosY_0[0]+9, w);
//pause 900;
//sendmouseup(LEFT, PosX_0[0]+8, PosY_0[0]+9, w);
sleep 900;
}
//// 1 //
function poisk_Image_1()
{
if (findimage(1, #Image_1[0][0], 255, #PosX_1[0], #PosY_1[0], 0, 0, w.widthclient, w.heightclient, 10, 10, 10, 10, 10, 10, 90, 1, w)==0)
return;textout(4, PosX_1[0]+8, PosY_1[0]+8, "1 ", 1);sleep 1300;
//sendmousedown(LEFT, PosX_1[0]+8, PosY_1[0]+9, w);
pause 900;
mouse(LEFT, PosX_1[0]+8, PosY_1[0]+9, w);
//pause 900;
//sendmouseup(LEFT, PosX_1[0]+8, PosY_1[0]+9, w);
sleep 900;
}
//// 2 //
function poisk_Image_2()
{
if (findimage(1, #Image_2[0][0], 255, #PosX_2[0], #PosY_2[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
return 0;textout(4, PosX_2[0]+8, PosY_2[0]+8, "2 ", 1);sleep 1300;
mouse(LEFT, PosX_2[0]+14, PosY_2[0]+14, w);
pause 600;
return 1;
}
//// 3 //
function poisk_Image_3()
{
if (findimage(1, #Image_3[0][0], 255, #PosX_3[0], #PosY_3[0], 0, 0, w.widthclient, w.heightclient, 50, 50, 50, 50, 50, 50, 80, 1, w)==0)
return;textout(4, PosX_3[0]+8, PosY_3[0]+8, "3 ", 1);sleep 1300;
mouse(LEFT, PosX_3[0]+14, PosY_3[0]+14, w);
pause 600;
}
////
// |
|
|
Kibor |
Отправлено: 13 Декабря, 2013 - 20:35:02
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Потому что textout работает с экранными координатами. С левого верхнего уга на экране.
Как findimage(...... w) работает с оконными по указателю w.
Для него 0 координат левый и верхний угол окна.
Надо так:
Цитата: function poisk_Image_0()
{
if (findimage(1, #Image_0[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, w.widthclient, w.heightclient, 10, 10, 10, 10, 10, 10, 90, 1, w)==0)
return;textout(4, PosX_0[0]+8+w.leftclient, PosY_0[0]+8+w.topclient, "0 ", 1);sleep 1300;
//sendmousedown(LEFT, PosX_0[0]+8, PosY_0[0]+9, w);
pause 900;
mouse(LEFT, PosX_0[0]+8, PosY_0[0]+9, w);
//pause 900;
//sendmouseup(LEFT, PosX_0[0]+8, PosY_0[0]+9, w);
sleep 900;
}
w.leftclient и w.topclient это координаты окна. левый и верхний угол. |
|
|
|