Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Как код из визуального редактора переделать в обычный

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

1. Budni - 30 Января, 2019 - 10:23:27 - перейти к сообщению

Заметил, что код из визуального редактора не всегда дает желаемый результат.
Хотелось бы писать код в ручную, но хочется быстрых результатов, читая мануал голова начинает кипеть и всё забрасывается в долгий ящик.
Данная схема из визуального редактора довольно простая и закрывает множество простых скриптов.
Прошу помочь написать шаблон в виде "ручного кода" данной схемы из Виз редактора.
2. Dantes3000 - 30 Января, 2019 - 10:31:12 - перейти к сообщению
Все findheapcolor одинаковые? Что делают textout?
3. Budni - 30 Января, 2019 - 10:52:41 - перейти к сообщению
 Dantes3000 пишет:
Все findheapcolor одинаковые? Что делают textout?

Это как шаблон, просто чтобы понять как строить. Так да одинаковые (но вообще хочу разные, чтобы понять как делать так чтобы конфликта не было между ними). textout показывает найден объект или нет.
4. Dantes3000 - 30 Января, 2019 - 11:00:11 - перейти к сообщению
 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;
}
5. Budni - 30 Января, 2019 - 11:39:32 - перейти к сообщению
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
}
6. Dantes3000 - 30 Января, 2019 - 11:50:04 - перейти к сообщению
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()
{
//проверка корректности
}
7. Zireael - 30 Января, 2019 - 12:05:25 - перейти к сообщению
 Цитата:
Интересует именно логика. Шаблон, в который я могу занести любые данные.

Лучше начать с простых конструкций, чтобы понять как это работает.
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 вообще не часто нужен, если правильно продумать логику.
8. Budni - 30 Января, 2019 - 15:36:35 - перейти к сообщению
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 или как то более грамотно делается это?
9. Zireael - 30 Января, 2019 - 15:59:28 - перейти к сообщению
Зачем использовать findheapcolor для поиска 1 пикселя? Проще findimage.
 Цитата:
int x[10], y[10]; // координаты

Массивы для 10 координат, а ищется только 1 объект. Можно объявить: int x, y;
в findheapcolor вместо #x[0] #x.
 Цитата:
а как добавить сюда поиск других картинок? Для других функцией?

Если имеется ввиду findheapcolor, то другая функция. Если, к примеру, findimage, то функция одна, просто в неё передавать нужные параметры.
 Цитата:
Переменные color нужно называть как color2 или как то более грамотно делается это?

Если переменные будут в самой функции, то можно те же самые. Иначе другие.
10. Budni - 30 Января, 2019 - 18:31:07 - перейти к сообщению
 Zireael пишет:
Зачем использовать findheapcolor для поиска 1 пикселя? Проще findimage.
Почему проще? Быстрее находить будет?

Ещё вопрос: На экране 10 объектов, размером 1 пх, нужно по очереди на них нажать, но перед этим дождаться исчезновения объекта на который был совершен клик. Сложность в том что объекты двигаются. Как лучше решить этот вопрос?
1) Просто искать по 1му объекту - нажать и дождаться когда исчезнет. Или
2) Найти все сразу и как то по очереди их нажать?


(Добавление)
 Zireael пишет:
Массивы для 10 координат, а ищется только 1 объект. Можно объявить: int x, y;
в findheapcolor вместо #x[0] #x.

А если я захочу совершить клик по найденной координате то mouse(LEFT, x, y)? Они сюда запишутся?

Powered by ExBB FM 1.0 Final