Budni |
Отправлено: 30 Января, 2019 - 18:52:41
|
Специалист
Покинул форум
Сообщений всего: 419
Дата рег-ции: Март 2018
Репутация: 2
|
Dantes3000 пишет: Все findheapcolor одинаковые? Что делают textout?
Это как шаблон, просто чтобы понять как строить. Так да одинаковые (но вообще хочу разные, чтобы понять как делать так чтобы конфликта не было между ними). textout показывает найден объект или нет.(Отредактировано автором: 30 Января, 2019 - 18:55:46) |
|
|
Dantes3000 |
Отправлено: 30 Января, 2019 - 19:00:11
|
Эксперт
Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016
Репутация: 58
|
Budni пишет: Это как шаблон, просто чтобы понять как строить. Так да одинаковые
Ошибка в логике тогда, если первый и второй findheapcolor одинаковые.
Обьясни что скрипт должен делать.
Если просто искать обьект и выводить на экран, то вот так:
CODE:loop()
{
if(find_heap1()>0) textout(0, 100, 100, "true", 0);
else textout(0, 100, 100, "false", 1);
}
function find_heap1()
{
int min_col=3;//Найти если все три цвета
//int min_col = 2;//Достаточно только любых 2
int r=10;
int color[3];
color[0]=2366701; color[1]=5026082; color[2]=13387839;//Тут цвета
int kol[3];
kol[0]=55; kol[1]=55; kol[2]=55;//Тут сколько должно совпасть пикселей для каждого цвета
int x[50], y[50];//Тут координаты найденные
sleep(500);
int colors, xw, yw;
getdisplay(colors, xw, yw);
int k=findheapcolor(20, #color[0], #kol[0], 3, min_col, #x[0], #y[0], 15, 15, 50, 50, 0, 0, xw, yw, r, r, r, r, r, r, -1);
return k;
}
|
|
|
Budni |
Отправлено: 30 Января, 2019 - 19:39:32
|
Специалист
Покинул форум
Сообщений всего: 419
Дата рег-ции: Март 2018
Репутация: 2
|
Dantes3000 , Интересует именно логика. Шаблон, в который я могу занести любые данные.
заместо текстаут может быть любой код, например нажатие клавиши.
Если словами код написать то так вот
Цитата: start:
Найти объект if{ Нажать на него если найден} goto Proverka;
repit: else {нажать клавишу или выполнить другой код} goto start;
Proverka:
проверяем корректность клика if {Объект найден} goto repit;
else {Не найден объект} goto start;
TIMER{
Ожидать объект в по координатам 100 100 100 100
Если появился, проветрить отсутствие объект номер 2
Если объект номер 2 нет проверить объект 3
Если 3 объект не появился то нажать кнопки
X
wait 1000ms
Z
} (Отредактировано автором: 30 Января, 2019 - 19:41:29) |
|
|
Dantes3000 |
Отправлено: 30 Января, 2019 - 19:50:04
|
Эксперт
Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016
Репутация: 58
|
Budni , Честно, я пытался. Логика вообще непонятная.
Вышло такое, без таймера.
Слишком абстрактные требования
CODE:st:;
if(find_object()==1) //если найден обьек - клик на него
{
if(check_correct()==1) messagebox("{Найден объект}");
else {messagebox("{Не найден объект}"); goto st;}
}
else func();
goto st;
function find_object()
{
int min_col=3;//Найти если все три цвета
//int min_col = 2;//Достаточно только любых 2
int r=10;
int color[3];
color[0]=2366701; color[1]=5026082; color[2]=13387839;//Тут цвета
int kol[3];
kol[0]=55; kol[1]=55; kol[2]=55;//Тут сколько должно совпасть пикселей для каждого цвета
int x[50], y[50];//Тут координаты найденные
sleep(500);
int colors, xw, yw;
getdisplay(colors, xw, yw);
int k=findheapcolor(20, #color[0], #kol[0], 3, min_col, #x[0], #y[0], 15, 15, 50, 50, 0, 0, xw, yw, r, r, r, r, r, r, -1);
if(k>0) {mouse(LEFT, x[0], y[0]; return 1;}
else return 0;
}
function check_correct()
{
//проверка корректности
} |
|
|
Zireael |
Отправлено: 30 Января, 2019 - 20:05:25
|
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Интересует именно логика. Шаблон, в который я могу занести любые данные.
Лучше начать с простых конструкций, чтобы понять как это работает.
CODE:if(find()>0) // в зависимости от того что вернула функция, выполнится или не выполнится дальнейший код
{
messagebox("Выполнить какое-то действие");
}
else
{
messagebox("Ничего не делать");
}
function find() // функция
{
// тут могут быть любые действия
int X;
//X=findheapcolor(...); // например, findheapcolor, который запишет в переменную X количество найденных объектов
X=3; // допустим нашлось 3 объекта
if(X>0)return 1; // если X больше 0, то функция вернёт 1
return 0; // иначе вернёт 0
}
goto вообще не часто нужен, если правильно продумать логику. |
|
|
Budni |
Отправлено: 30 Января, 2019 - 23:36:35
|
Специалист
Покинул форум
Сообщений всего: 419
Дата рег-ции: Март 2018
Репутация: 2
|
Zireael ,
Цитата: int r=20; // разбежность
int color[1]={263335}; // цвета
int kol[1]={1}; // количество
int x[10], y[10]; // координаты
sleep(500);
loop() {
if(find()>0) // в зависимости от того что вернула функция, выполнится или не выполнится дальнейший код
{
messagebox("Выполнить какое-то действие");
}
else
{
messagebox("Ничего не делать");
}
}
function find() // функция
{
int X;
X=findheapcolor(1, #color[0], #kol[0], sizearray(color), 1, #x[0], #y[0], 1, 1, 1, 1, 374, 278, 432, 337, r, r, r, r, r, r, -1);
if(X>0)return 1; // если X больше 0, то функция вернёт 1
Отлично, стало понятнее, а как добавить сюда поиск других картинок? Для других функцией? Переменные color нужно называть как color2 или как то более грамотно делается это?(Отредактировано автором: 30 Января, 2019 - 23:41:28) |
|
|
Zireael |
Отправлено: 30 Января, 2019 - 23:59:28
|
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Зачем использовать findheapcolor для поиска 1 пикселя? Проще findimage.
Цитата: int x[10], y[10]; // координаты
Массивы для 10 координат, а ищется только 1 объект. Можно объявить: int x, y;
в findheapcolor вместо #x[0] #x.
Цитата: а как добавить сюда поиск других картинок? Для других функцией?
Если имеется ввиду findheapcolor, то другая функция. Если, к примеру, findimage, то функция одна, просто в неё передавать нужные параметры.
Цитата: Переменные color нужно называть как color2 или как то более грамотно делается это?
Если переменные будут в самой функции, то можно те же самые. Иначе другие. |
|
|
Budni |
Отправлено: 31 Января, 2019 - 02:31:07
|
Специалист
Покинул форум
Сообщений всего: 419
Дата рег-ции: Март 2018
Репутация: 2
|
Zireael пишет: Зачем использовать findheapcolor для поиска 1 пикселя? Проще findimage. Почему проще? Быстрее находить будет?
Ещё вопрос: На экране 10 объектов, размером 1 пх, нужно по очереди на них нажать, но перед этим дождаться исчезновения объекта на который был совершен клик. Сложность в том что объекты двигаются. Как лучше решить этот вопрос?
1) Просто искать по 1му объекту - нажать и дождаться когда исчезнет. Или
2) Найти все сразу и как то по очереди их нажать?
(Добавление)
Zireael пишет: Массивы для 10 координат, а ищется только 1 объект. Можно объявить: int x, y;
в findheapcolor вместо #x[0] #x.
А если я захочу совершить клик по найденной координате то mouse(LEFT, x, y)? Они сюда запишутся? |
|
|
|