Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: blazzed on March 08, 2014, 03:01:04 AM
-
Доброго времени суток!
Возникла недавно задача считать 36 точек с экрана (квадрат 6х6) и найти одинаковые. Координаты точек я узнал, но как их получить?
Вот пример скрипта (цикл в цикле)
$x = 100
$y= 100
$c = -41
$d = -41
GETSCREEN
FOR ($a, $a <6)
Inc ($d, 41)
$c = -41
FOR ($b, $b <6)
Inc ($c, 41)
$var$a$b = pxl ($x+307+$c,$y+144+$d)
LOGWRITE ("a = ",$a , " b = ", $b, " " ,$var$a$b)
END_CYC
END_CYC
Вызов любой переменной (к примеру, $var10) возвращает ноль.
Кто сталкивался с такой проблемой, подскажите, в чём ошибка?
-
Кликерман так не работает с переменными, тебе нужно использовать массивы.
$x = 100
$y= 100
$c = -41
$d = -41
define($n)
GETSCREEN
FOR ($a, $a <6)
Inc ($d, 41)
$c = -41
FOR ($b, $b <6)
Inc ($c, 41)
$var[$n] = pxl ($x+307+$c,$y+144+$d)
LOGWRITE ("a = ",$a , " b = ", $b, " " ,$var[$n])
INC($n)
END_CYC
END_CYC
halt
-
тебе нужно использовать массивы.
Да, но тут жёсткая привязка к расположению точек. Если бы можно было создать двумерный массив, то этого вопроса не было. А мне на основе каждой точки надо найти по определённым шаблонам две соседние, у которых такие же пиксели.
Пример:
FOR ($a, $a<6)
FOR ($b, $b<6)
IF (($var$a$b = $var$a-1$b+1) & ($var$a$b = $var$a$b+2))
LOGWRITE ("BINGO ", $a,$b, " ", $a+1,$b, " ", $a+1,$b+1)
HALT
END_IF
END_CYC
END_CYC
P.S. Это всё делается для игры 3 в ряд, где есть поле размером 6х6.
-
Посмотри здесь
http://crapware.aidf.org/forum/index.php?topic=1047.0 (http://crapware.aidf.org/forum/index.php?topic=1047.0)
-
Ну тогда так:
$x = 100
$y= 100
$c = -41
$d = -41
GETSCREEN
FOR ($a, $a <6)
Inc ($d, 41)
$c = -41
FOR ($b, $b <6)
Inc ($c, 41)
$var[10*$a + $b] = pxl ($x+307+$c,$y+144+$d)
LOGWRITE ("a = ",$a , " b = ", $b, " " ,$var[10*$a + $b])
END_CYC
END_CYC
HALT
-
Посмотри здесь
http://crapware.aidf.org/forum/index.php?topic=1047.0 (http://crapware.aidf.org/forum/index.php?topic=1047.0)
Огромное спасибо, даёт ответы на все мои вопросы :D
Крис Тинка, спасибо за $var[10*$a + $b]
Его стоит взять на вооружение... Во всяком случае до тех пор, пока не будут реализованы двухмерные массивы
-
Крис Тинка, спасибо за $var[10*$a + $b]
Его стоит взять на вооружение... Во всяком случае до тех пор, пока не будут реализованы двухмерные массивы
Только не
$var[10*$a + $b]
а
$var[6*$a + $b]
-
Только не
$var[10*$a + $b]
а
$var[6*$a + $b]
Как раз 10*$a, тогда у нас любая переменная будет иметь порядочный вид (12, 44, 32, 65, и т.д.) И мы сможем, зная место в массиве, вытащить её в любой момент.
Во всяком случае, для меня более понятная логика (первая цифра - ряд, вторая строка)
-
Ааааа. Ну если мыслить частностями. Я же расчитываю на все случаи жизни. А если будет 12 на 12 ???
Тем более мне плевать какая там строка, всё равно перебираем переменные в цикле. Я к конкретной вручную не обращаюсь.
Что-то типа $map[$sost_X+$sost_Y*$max_X]
-
Ааааа. Ну если мыслить частностями. Я же расчитываю на все случаи жизни. А если будет 12 на 12 ???
Тем более мне плевать какая там строка, всё равно перебираем переменные в цикле. Я к конкретной вручную не обращаюсь.
Что-то типа $map[$sost_X+$sost_Y*$max_X]
Ну если будет 12 на 12, то можно использовать 1000*$a+$b (1212 в данном случае, или 1001 для $a=1, $b=1). Данное соответствие необходимо больше для наглядности логики решения задачи, чем для какой-то функциональной нагрузки.
В любом случае, спасибо за скрипт. Там есть реализация того, что я хотел получить. Хотя и немного в другой форме. В свободное время попытаюсь осилить его и модифицировать под свои нужды :)