Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Территория фермеров (пытаюсь сделать скрипт) не получается - хелп!

Страниц (2): [1] 2 »
 

1. a_master - 17 Июня, 2013 - 10:52:53 - перейти к сообщению
Смысл как я понимаю ситуацию - искать на поле нужную картинку и если нашли, то обработать событие нажатие клавиши мышки. и Так в бесконечном цикле. Наваял вот такой вот код. Поиск не дает результата.
Помогите найти в чем косяк.

int honey[10][5];
int PosX_0[1], PosY_0[1];

loadimage (#honey[0][0], "C:\terfarm\honey.bmp");

int color, xe, ye;
getdisplay(color, xe, ye);//Узнать разрешение экрана

n: if (findimage(1, #honey[0][0], 16777215, #PosX_0[0], #PosY_0[0], 0, 0, xe, ye, -1)==0)
{
sleep(50);
}
else
{
mousedbl(LEFT, PosX_0[0]+imagewidth(#honey[0][0])/2, PosY_0[0]+imageheight(#honey[0][0])/2, 1, wind);
mouse(LEFT, PosX_0[0]+imagewidth(#honey[0][0])/2, PosY_0[0]+imageheight(#honey[0][0])/2);
}
goto n;

w=window ("Однокласники - Google Chrome", "Chrome_WidgetWin_1", -1)
activate(w);
sleep(500);
2. Kibor - 18 Июня, 2013 - 11:17:31 - перейти к сообщению
mousedbl(LEFT, PosX_0[0]+imagewidth(#honey[0][0])/2, PosY_0[0]+imageheight(#honey[0][0])/2, 1, wind);

w=window ("Однокласники - Google Chrome", "Chrome_WidgetWin_1", -1)

Имя указателя w. В скрипте wind.

И еще, w объявлена где то? win w.
3. a_master - 19 Июня, 2013 - 14:11:55 - перейти к сообщению
Спасибо, исправился. Это я завтыкал.

В продолжение темы: я сделал анализ игрушки по поводу искомых изображений.
Обнаружил, что одна и та же картинка каждый раз выглядит по разному.
Например беру какой-то объект. Например яблоко. Делаю картинку например 5 на 5 пикселей.

Запускаю скрипт. Он отрабатывает, находит картинку, кликает на ней. Все ок. Через минуту на этом месте появляется новое яблоко. НО! оно эта самая картинка 5 на 5 пикселей уже другая. то есть пиксели поменялись. Иногда измерилось всего 1-2 пикселя (светлее или темнее) иногда половина совершенно другая.

Я пробовал сделать несколько разных картинок объекта, даже получилось пару раз. Но именно что пару раз.

Вопрос. как можно обойти эту проблему?
4. Kibor - 19 Июня, 2013 - 14:51:13 - перейти к сообщению
Во время игры при появление яблока перейдите на графику. Нажмите CTRL+SHIFT+S. В окне Кибор появится изображение игры. В процессе игры когда появится другое яблоко нажмите CTRL+SHIFT+A 2 раза. Это включит и выключит фильтр меняющихся пикселей. Все изменившиеся пикселя подсветятся красным. Так повторите несколько раз пока или все яблоко не станет красным (тогда нельзя буде производить поиск по яблоку и придется искать другую привязку) или не останутся на яблоке не выделенные красным пикселя . В таком случае именно их надо использовать при поиске. Выделить яблоко и нажать правую кнопку мыши - снять выделение с динамики. Сохранить оставшееся в файл и его искать.
Подробнее тут: Подготовка графики
5. a_master - 20 Июня, 2013 - 01:20:48 - перейти к сообщению
Судя по всему при отображении картинки в полный экран происходит "рендомное" сжатие и пиксели подбираются случайным образом из близкого диапазона. В фильтре динамики все красное.

Я тут подумал что можно просто описать области (например там будут все оттенки коричневого) размером этак 7х7 и10х10 и искать в них пиксель например желтого цвета. Если хоть один их них в области есть, то это то что мы ищем.

Проблема которую я вижу, это придется описать довольно много областей (порядка >1000) при самом лучшем случае. Допустим это можно сделать через цикл.

Пока я не начал городить этот монстр-скрипт, может есть ответ по поводу производительности.
Мне надо обработать 1000 областей с размером 7х7 за 1 секунду. Это реально?

Или можно сократить количество областей, но тогда нужна привязка ко времени. Как можно получить текущее время?
(Добавление)
И еще один момент. в полноэкранном режиме при попытке нажать на клавишу Ctrl игрушка вылетает из полноэкранного режима. Можно назначать горячие клавишы или другое решение этого вопроса?
6. Kibor - 20 Июня, 2013 - 13:03:30 - перейти к сообщению
 a_master пишет:
Мне надо обработать 1000 областей с размером 7х7 за 1 секунду

Не вариант. Высокое быстродействие гарантируется только если обрабатывать изображение одним вызовом имеющейся соответствующей функции, а не тысячи раз.
Время получить пока никак, так же как и изменить горячие клавиши. В следующей версии быстрее всего добавлю.
Больше посоветовать не могу ничего, так как не видел игры.
7. baracuda - 12 Июля, 2013 - 05:37:29 - перейти к сообщению
Не совсем в тематику но всё же. если клик вызывает новое окно.. но мы не знаем какое

как решить такое ?

window ("? - Google Chrome", "Chrome_WidgetWin_1", -1)

ну а для красоты? там ещё найти изображение и его кликнуть ..

Заранее спасибо за ответ

очень мало расписано с браузером в хелпах..
как передать фокус в адресную строку ?
start ("C:\Program Files\Google\Chrome\Application\chrome.exe"Подмигивание;
sleep(2500);
activate(window ("Новая вкладка - Google Chrome", "Chrome_WidgetWin_1", -1));
sleep(2500);
key("www.ru", 1, 1, win wind);
key(RETURN);
sleep(2500);
key("www.ru/www.php", 1, 1, win wind);
key(RETURN);

и ещё, какой оптимальный вариант работы если кликнуть надо где то внизу сайта а для этого надо прокрутить скрол !!!
8. Kibor - 12 Июля, 2013 - 12:36:53 - перейти к сообщению
Я хромом не пользуюсь но специально поставил.

Исходя из выложенного кода понял что браузер запускается программно. Написал скрипт реализующий то что описано:

CODE:

start ("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe");//Запустить браузер
n: if (window (-1, "Chrome_OmniboxView", -1)==0){sleep(50); goto n;}//Дождаться его загрузки
sleep(500);

win w_adr=window (-1, "Chrome_OmniboxView", -1);//Получить указатель на поле для ввода адреса
activate(w_adr);//Передать фокус в строку для ввода адреса
sleep(500);

sendtext("filesd.net/stat/autoclicker-kibor.php", w_adr);//Ввод нужного адреса в адресное поле
sleep(500);
key(RETURN);//Жать Enter

sleep(5000);//Пауза для загрузки страницы.
//Вместо большой паузы лучше поставить в 1 секунду и потом искать изображение кнопки обновления страницы. Когда она примет вид закрученной стрелки загрузка завершена.

mouse(LEFT, w_adr.left-27, w_adr.top+5);//Щелкнуть мышью чуть левее поля для ввода адреса передав фокус на главное окно браузера.
sleep(500);

//loop:;
//Искать необходимое изображение на экране
//Если найдено щелкнуть по нему и завершить скрипт если нет других задач.
//goto exit;

//Если не найдено:
key(SPACE);//Если не найдено нажать пробел - страница сдвинется вверх
//goto loop; Перейти опять к поиску изображения

exit:;


Код реализации поиска изображения не приводил. Его можно найти в любой реализации в справке или примерах.
Тестировал на Windows 7.
9. baracuda - 12 Июля, 2013 - 14:08:24 - перейти к сообщению
у меня такое простое решение.

start ("C:\Program Files\Google\Chrome\Application\chrome.exe");
sleep(2000);
activate(window ("Новая вкладка - Google Chrome", "Chrome_WidgetWin_1", -1));
sleep(1000);
key("www.ru", 1, 1, win wind);
key(RETURN);
sleep(3000);
mouse(LEFT, 750, 152);
sleep(3000);
mousetransfer(LEFT, 1271, 85, 1271, 150, 0.02);
//----------
int Image[55][17];
loadimage (#Image[0][0], "C:\tupit.bmp");
sleep(3000);
int x[1], y[1];
sleep(3000);
st: if (findimage(-1, #Image[0][0], 16777215, #x[0], #y[0], 0, 2, wind.widthclient, wind.heightclient, wind)<1)goto st;
mouse(LEFT, x[0]+imagewidth(#Image[0][0])/2, y[0]+imageheight(#Image[0][0])/2+3, 1, wind);
sleep(3000);

В поиске ошибка.. но вопрос в другом, самый удачный способ поиска ошибок ? например на этом примере как можно хотя бы визуально осознать что не так ?

За ответы огромное спасибо
10. Kibor - 12 Июля, 2013 - 14:18:09 - перейти к сообщению
 baracuda пишет:
st: if (findimage(-1, #Image[0][0], 16777215, #x[0], #y[0], 0, 2, wind.widthclient, wind.heightclient, wind)<1)goto st;

Я не вижу объявления и инициализации указателя wind

 baracuda пишет:
key("www.ru", 1, 1, win wind);

Ошибка. Тип переменной указывать в функции не надо. Я в примере просто указал какой тип идет в параметрах.
key("www.ru", 1, 1, wind);

Возможно так будет работать?:
CODE:

start ("C:\Program Files\Google\Chrome\Application\chrome.exe");
sleep(2000);
win wind=window ("Новая вкладка - Google Chrome", "Chrome_WidgetWin_1", -1);
activate(wind);
sleep(1000);
key("www.ru", 1, 1, wind);
key(RETURN);
sleep(3000);
mouse(LEFT, 750, 152);
sleep(3000);
mousetransfer(LEFT, 1271, 85, 1271, 150, 0.02);
//----------
int Image[55][17];
loadimage (#Image[0][0], "C:\tupit.bmp");
sleep(3000);
int x[1], y[1];
sleep(3000);
st: if (findimage(-1, #Image[0][0], 16777215, #x[0], #y[0], 0, 2, wind.widthclient, wind.heightclient, wind)<1)goto st;
mouse(LEFT, x[0]+imagewidth(#Image[0][0])/2, y[0]+imageheight(#Image[0][0])/2+3, 1, wind);
sleep(3000);

Powered by ExBB FM 1.0 Final