Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

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

> Описание: Отличный оператор, заслуживает отдельной статьи, но есть пара вопросов
kunni
Отправлено: 18 Декабря, 2014 - 08:25:42
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 37
Дата рег-ции: Дек. 2014  
Репутация: 2




Здравствуйте, уважаемый разработчик! Изучая Кибор и написав огромный и запутанный код, я открыл для себя оператор function.
К сожалению, с точки зрения новичка, статья в учебнике очень запутанная, важные моменты пропадают в общем "полотенце" текста (их я еще раз проговорю ниже), пришлось разбираться методом тыка и чтением примеров скриптов с форума, где применяется этот оператор.

Итак, сперва поделюсь впечатлениями от использования function.
1. Код уменьшился в размерах. Одинаковые места в коде выносятся в функцию, и нет необходимости каждый раз копировать их в тело программы.
2. Код стал более читаемым (блок функций размещается в конце, тело программы становится чище, без нагромождения одинаковых строк)
3. Стало легче исправлять ошибки (не нужно править каждый повторяющийся участок, достаточно исправить нужное место в функции)

Теперь я хотел бы привести несколько примеров использования.
Дело в том, что по примерам из учебника, я вообще не понял, зачем оно нам надо, что писать в скобочках, что за return и куда его пихать. Зато по примерам в скриптах научился заменять куски кода на коротенькое слово:
1. Комбинации горячих клавиш
пример (Отобразить)

2.1. Значения переменных поменялись, а действия над ними те же.
простенький пример (Отобразить)

2.2. В этом примере важно объявить все переменные вне функции, поскольку все, что внутри функции - видит только эта функция.
простенький пример НЕ БУДЕТ работать (Отобразить)

Мы объявили переменную d в функции, по логике мы сделали это перед messagebox(format(d)); , тем не менее "тело" программы ее не увидит.
2.3. Это касается также goto и их меток: goto внутри функции должен вести в любой участок внутри этой функции и не может отсылать "наружу", в тело программы. Это дает и небольшое преимущество: имена меток могут быть не уникальными.
3. Можно внутри одной функции ссылаться на другу функцию:
схематичный пример (Отобразить)

4. Хотел разобраться с массивами, но это выше моих сил, поэтому надеюсь на вашу помощь.
Задача банальная: как добавить в функцию загрузку, поиск и клик в центр изображения, меняя лишь входные данные, а именно адрес к изображению? Не заморачиваясь размерами загружаемой картинки и т.д.
CODE:

string adress="C:\1.bmp";
klik_centr();

function klik_centr(){код;}


На понятие пунктов 2.2 и 2.3 у меня ушло некоторое время, что и послужило причиной написания данного сообщения.
Всем спасибо. Надеюсь, данный пост будет кому-то полезен.
(Добавление)
UPD: По своему вопросу (пункт 4) нашел ответ на форуме.
Объяснено, как можно сделать и как нужно сделать.

(Отредактировано автором: 18 Декабря, 2014 - 08:26:04)

 
 Top
Kibor
Отправлено: 18 Декабря, 2014 - 13:03:48
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Немного дополню.
Как работать с массивом - через указатель

CODE:
int Image_0[100][100];//по максимальному размеру большой картинки самой
int Image_1[100][100];//по максимальному размеру большой картинки самой

if (load_image()==-1){messagebox ("ошибка загрузки картинки"); goto er;}

klik_centr(#Image_0[0][0]);
klik_centr(#Image_1[0][0]);

er:;
function load_image()
{
if (loadimage (#Image_0[0][0], "C:\Image_0.bmp")<1)return -1;
if (loadimage (#Image_1[0][0], "C:\Image_1.bmp")<1)return -1;
return 1;
}

function klik_centr(int #Image)
{
int x, y;
if (findimage(1, #Image[0][0], 0, #x, #y, 0, 0, 1366, 768, -1)==1)
{
mousemove(x+imagewidth(#Image[0][0])/2, y+imageheight(#Image[0][0])/2);
}
}


тут важно для работы с указателем на массив в котором находит ся изображение выделить для всех изображений одинаковое количество памяти по x и y по максимальному.
 
 Top
idcco
Отправлено: 26 Марта, 2017 - 05:18:29
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 67
Дата рег-ции: Март 2017  
Репутация: 5




Хотелось бы чтоб в функциях была возможно использовать fwrite. На данный момент выскакивает ошибка. (Win7x64) А в остальном я уже и не представляю программирование без функций и процедур ни в каком языке программирования... Разработчику респект и при возможности донат.
 
 Top
Kibor
Отправлено: 26 Марта, 2017 - 09:08:50
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Все можно использовать в функциях...
 
 Top
idcco
Отправлено: 26 Марта, 2017 - 14:08:38
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 67
Дата рег-ции: Март 2017  
Репутация: 5




 Kibor пишет:
Все можно использовать в функциях

Простите, не хотел обидеть или задеть.
Можете ли реализовать поддержку fwrite в функции через #include?
 
 Top
Kibor
Отправлено: 26 Марта, 2017 - 15:26:54
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




это на диск C в файл 1.txt
CODE:
function logwrite (string str)
{
if (fopen ("C:\log.txt", "a")!=0)
{
fwrite (str);
fwrite(ENDL);
fclose ();
}
}


Это код
CODE:
#include "C:\1.txt"

logwrite ("Какая-то текстовая строка");

sleep(100);


Какой то баг в том, что после вызова функции нужна еще строчка кода любая..
 
 Top
idcco
Отправлено: 26 Марта, 2017 - 15:45:14
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 67
Дата рег-ции: Март 2017  
Репутация: 5




Спасибо! Буду пробовать.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by