Содержание
ПЕРЕМЕННЫЕ
Как вы знаете со школы, переменные это такие ячейки памяти, которые содержат какое либо значение, при этом оно может туда помещаться и оттуда извлекаться.
Данная программа так же поддерживает переменные. Они могут содержать в себе числа (целые и с точкой) и строки. Переменные могут участвовать в вычислениях, передаваться в качестве параметров для функций и процедур. Даже если у вас не было в школе информатики, из математики вы прекрасно научились обращаться с переменными.
Имена для переменных могут содержать буквы латинского алфавита, цифры и знак "_" (нижнее подчеркивание). При этом перед именем обязательно должен идти префикс "$", а само имя не должно начинаться с цифры. К примеру, "$my_var1" - вполне допустимое имя для переменной.
Использование переменных предельно простое. Вы просто вместо числовой константы (числа) подставляете переменную. То есть если было "lclick(10, 10)", то станет "lclick(10, $var)". Изучите примеры и вы все поймете.
Особое значение имеют системные переменные. Их имена зарезервированы программой и значения переменных подставляются автоматически при обращении к ним.
Имя переменной | Значение |
$_xmouse | Переменная при каждом обращении принимает значение координаты мыши по оси Х |
$_ymouse | Тоже, но для оси У |
$_xmax | Максимально допустимое значение X, вычисляется как ширина разрешения - 1 |
$_ymax | Аналогично для Y |
$_return1 | Переменная используется для возврата в нее значения определенными инструкциями |
$_return2 | Аналогично |
$_cursor | Содержит код вида указателя мыши |
$_ms | Системный таймер Windows, отсчитывающий миллисекунды с момента старта ОС |
$_time_t | Текущее время в формате Unix-систем (подробнее) |
$_time_h | Текущий час |
$_time_m | Текущая минута |
$_time_s | Текущая секунда |
$_date_y | Текущий год |
$_date_m | Текущий месяц |
$_date_d | Текущие число |
$_hwnd | Текущий hwnd (если 0, то привязки к окну нет) |
МАССИВЫ
Массив это по сути набор однотипных переменных объединенных общим именем. Каждый элемент массива имеет свой индекс (целое число от нуля), определяющий его место в массиве. Как и переменная, элемент массива может принимать значения и использоваться в вычислениях.
Синтаксис таков. Имя массива такое же как для переменных, например $var. Далее после имени в квадратных скобках указывается индекс элемента. Например
// массив из трех элементов $var[0] = 1 $var[1] = 2 $var[2] = 3 // вывод суммы элементов print( $var[0] + $var[1] + $var[2] )Индекс в квадратных скобках допускает вычисления, поэтому эту же задачу можно было бы решить сложнее
// массив из трех элементов $var[0] = 1 $var[1] = 2 $var[2] = 3 $result = 0 // накапливаемая сумма // перебор через цикл элементов массива [0 .. 2] for($i, $i < 3) $result = $result + $var[ $i-1 ] end_cyc // вывод суммы элементов print( $result )Более полно и детально работа с массивами рассмотрена в соответствующей теме на официальном форуме
КОНСТАНТЫ
Константы играют ту же роль, что и переменные. За тем исключением, что константы нельзя изменить и их префикс "#".
Константы загружаются в программу при запуске из файла %Clickermann%/data/const.txt
Вы можете его править, однако тогда не забывайте делать его копию при скачивании новой версии ПО.
АРИФМЕТИКА
Как было показано в разделе "переменные", в качестве параметров процедур и правой части тождества могут передаваться арифметические выражения. Программа поддерживает стандартные операции сложение "+", вычитание "-", деление "/", умножение "*", а так же скобки "()". В выражениях допускается использовать числовые переменные, константы и числовые функции.
Отдельно упомянем отрицательные значения. Школьная формулировка "2 * (-3)" не подойдет в силу особенностей алгоритмов. То есть два знака подряд не воспринимаются. Необходимо записать это выражение так "2 * (0-3)"
Кроме того, возможно задавать числа в 32-разрядном шестнадцатиричном виде. То есть от 0x0 (0) до 0xFFFFFFFF (4294967295). Это может быть удобно для некоторых команд. Числа в таком представлении так же поддерживают арифметические операции.
Стоит обратить внимание на некоторые особенности:
1) Если программа не сможет выполнить вычисление, она вернет результат как строку
2) Любое выражение, заключенное в двойные кавычки " ", считается строкой, и вычисления с ним не проводятся
3) Большинство функций и процедур, работающих с координатами экрана, принимают в качестве аргументов только целые значения. Если передать им число с точкой, это не вызовет ошибку, но будет считаться, что передан 0. Чтобы избавится от дробной части и избежать этого ньюанса, необходимо воспользоваться функцией INT или ROUND
ФУНКЦИИ И ПРОЦЕДУРЫ
Процедуры, это команды, выполняющие какие либо действия. Процедуры имеют свои собственные имена, могут иметь набор принимаемых параметров. Например, процедура щелчка мышью LCLICK(x,y): lclick - имя, x,y - два параметра, определяющие координаты для дейтсвия
Функции отличаются от процедур тем, что возвращают значение. То есть функции могут быть использованы в качестве параметров процедур, в качестве аргументов других функций, в качестве членов выражений. Функции делятся на строковые (возвращающие строку) и числовые (возвращающие число).
В данной справке, как правило, указано является ли команда функцией или процедурой и приведен пример ее использования.
ДИРЕКТИВЫ ПРЕПРОЦЕССОРА
Это страшное для неподготовленного человека определение означает ряд команд, которые выполняются только в момент загрузки скрипта и в дальнейшем в работе не участвуют.
Директива | Значение | Пример |
#name | Позволяет задать скрипту имя, которое будет отображаться рядом с названием программы. | #name "СуперБот v1.2" |
#include | Вставляет в это место содержимое текстового файла из папки проекта. Это позволяет "прятать" объемный код, повышая таким образом читаемость скрипта. | #include "mylib.cms" |
#logfile | Включает ведение лог-файла в папке проекта, куда дублируется весь вывод через logwrite / print | #logfile |
#autorun | Сценарий начинает выполняться сразу после загрузки | #autorun |
#ps2_keyboard | Включает режим PS/2 клавиатуры | #ps2_keyboard |
#ps2_mouse | Включает режим PS/2 мыши | #ps2_mouse |
#define | объявляет макрос | см.ниже |
МАКРОСЫ ПРЕПРОЦЕССОРА
Фактически, макрос это команда препроцессору заменить что-то на что-то согласно шаблону. Это позволяет программисту немного пофантазировать на тему синтаксиса скриптов. На самом деле вы можете "провернуть" простейший макрос и руками через "заменить все", однако макросы дают ряд преимуществ. Рассмотрим синтаксис.
#define find:replacefind и replace две строки, разделенные двоеточием. Эта запись означает что по всему скрипту строка find будет заменена на replace. Простейший пример, переименования lclick в clk:
#define clk:lclick clk(10,10) clk(20,20)Этот выполнится, поскольку препроцессор заменит clk на приемлемый lclick. Альтернативный вариант, когда параметры помещаются в макрос (правда теряется вариативность аргументов):
#define clk:lclick(10,10) clk clkНу и на последок, использование макроса в качестве аргумента. Здесь, как вы видите "rand10" является псевдонимом для функции "rnd(1,10)" и используется для подстановки в клики:
#define rand10:rnd(1,10) lclick( rand10, 5 ) lclick( rand10, 8 )
ПРИМЕРЫ
// вывод чисел и строк print(5) // 5 print(5 + 5) // 10 print("5 + 5") // 5+5 print(0xff * 2) // 510 // с точкой $var = 2.5 print($var * 2) // 5 // сложное вычисление (функция в функции) $result = round(sin(30) * 2, -2) print( $result ) // - 1.98 // помещение курсора в точку 5;10 // strlen возвращает длину строки "qwert" - 5 символов move( strlen("qwert"), 10) // здороваемся с миром, меняя значение $object можно поздороваться // еще с кем нибудь $object = rndfrom("world", "Vasya", "new day") print( strconcat("Hello, ", $object, "!") ) // движение курсора хаотично, параметр Х (первый аргумент move) вычисляется // и принимает значения 10,20,30,40 или 50 move ( rnd(1,5) * 10, 50 ) // школьная шутка про "два плюс два умножить на два" (приоритет операций). оба решения print( (2+2)*2 ) // = 8 print( 2+2*2 ) // = 6