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

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

1. kunni - 18 Декабря, 2014 - 00:25:42 - перейти к сообщению
Здравствуйте, уважаемый разработчик! Изучая Кибор и написав огромный и запутанный код, я открыл для себя оператор 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) нашел ответ на форуме.
Объяснено, как можно сделать и как нужно сделать.
2. Kibor - 18 Декабря, 2014 - 05:03:48 - перейти к сообщению
Немного дополню.
Как работать с массивом - через указатель

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 по максимальному.
3. idcco - 25 Марта, 2017 - 21:18:29 - перейти к сообщению
Хотелось бы чтоб в функциях была возможно использовать fwrite. На данный момент выскакивает ошибка. (Win7x64) А в остальном я уже и не представляю программирование без функций и процедур ни в каком языке программирования... Разработчику респект и при возможности донат.
4. Kibor - 26 Марта, 2017 - 01:08:50 - перейти к сообщению
Все можно использовать в функциях...
5. idcco - 26 Марта, 2017 - 06:08:38 - перейти к сообщению
 Kibor пишет:
Все можно использовать в функциях

Простите, не хотел обидеть или задеть.
Можете ли реализовать поддержку fwrite в функции через #include?
6. Kibor - 26 Марта, 2017 - 07:26:54 - перейти к сообщению
это на диск 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);


Какой то баг в том, что после вызова функции нужна еще строчка кода любая..
7. idcco - 26 Марта, 2017 - 07:45:14 - перейти к сообщению
Спасибо! Буду пробовать.

Powered by ExBB FM 1.0 Final