Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: lokipall on December 29, 2016, 11:26:31 AM
-
И снова всем добрый день. Снова вопрос связанный с массивами. добрые люди просветили меня о псевдо многомерном массиве, за что им спасибо
http://crapware.aidf.org/forum/index.php?topic=321.msg2686#msg2686
http://crapware.aidf.org/forum/index.php?topic=1138.msg5115#msg5115
http://crapware.aidf.org/forum/index.php?topic=2909.msg19070#msg19070
но в примерах только двухмерный массив, у меня желание воспользоваться трехмерным массивом, и подозреваю что он раскладывается по похожей формуле. моего воображения хватило только на следующие примеры и следующие формулы. Поправьте меня пожалуйста если я ошибся.
//допустим размер массива 3х4х5
//заполняю его значениями по порядку
$R=5 //символов в строке
$D=4//кол-во строк
$P=3//третий размер массива хз как это называется( глубина ширина)
FOR($a=0, $a < $P) //заполняю по порядку с 10
FOR($b=0, $b < $D)
FOR($c=0, $c < $R)
ARRPUSH($arr, $a*5*4+$b*5+$c)
END_CYC
END_CYC
END_CYC
HALT
//должен заполнить массив числами по порядку
можно использовать один FOR($n=0, $n <5*4*3),но мне для передвижений по экрану массив нужен, заполнять удобней с тремя переменными иначе в IF утону
// ищем по значению в массиве размером
$R=5 //символов в строке
$D=4//кол-во строк
$P=3//третий размер массива хз как это называется( глубина ширина)
FOR($i=0, $i < ARRSIZE($arr))
IF($arr[$i] = 12)
$a = INT($i / $R/$D)
$b = INT($i/$R-$a*$D)
$c = $i - $b*$R-$a*$R*$D
$i = ARRSIZE($arr)
END_IF
END_CYC
LOGWRITE("a = ", $a, ", b = ", $b, ", c = ", $c)
HALT
А вопрос в общем то, это работать то будет?формула заполнения и формула нахождения положения в массиве верные?
-
Да, всё правильно.
Только в кликере есть ошибка
http://crapware.aidf.org/forum/index.php?topic=2874.0
Поэтому, чтоб правильно считало вот эту строку
$c = $i - $b*$R - $a*$R*$D
нужно записать так (2 способа):
$c = $i - ($b*$R) - ($a*$R*$D)
// или
$c = $i - ($b*$R + $a*$R*$D)
-
по твоей задаче
$x=3
$y=3
$z=3
FOR($a=1, $a < $z+1)
FOR($b=1, $b < $y+1)
FOR($c=1, $c < $x+1)
ARRPUSH($arr, $c)
ARRPUSH($arr, $b)
ARRPUSH($arr, $a)
END_CYC
END_CYC
END_CYC
FOR($d=0, $d < ARRSIZE($arr),3)
print($arr[$d],"x",$arr[$d+1],"x",$arr[$d+2])
END_CYC
HALT
только не вижу применения в простой нумерации "ячеек". может я чтото упускаю.
как по мне, трехмерный массив - прямое применения в записи координат xyz.
к примеру у нас есть массив с координатами, как же считать из массива координаты xyz именно точки к примеру 28 ?
$check = 28
$x = $arr[$check*3]
$y = $arr[$check*3+1]
$z = $arr[$check*3+2]
или пройти по точкам поочереди (к примеру они у нас были записаны заранее, чтото типа маошрута)FOR($d=0, $d < ARRSIZE($arr),3)
$x = $arr[$d]
$y = $arr[$d+1]
$z = $arr[$d+2]
END_CYC
или я както подругому понимаю многомерные массивы? если винт написал что там всё правильно, то я хз :-\
//допустим размер массива 3х4х5
//заполняю его значениями по порядку
$R=5 //символов в строке
$D=4//кол-во строк
$P=3//третий размер массива хз как это называется( глубина ширина)
FOR($a=0, $a < $P) //заполняю по порядку с 10
FOR($b=0, $b < $D)
FOR($c=0, $c < $R)
ARRPUSH($arr, $a*5*4+$b*5+$c)
END_CYC
END_CYC
END_CYC
//должен заполнить массив числами по порядку
FOR($d=0, $d < ARRSIZE($arr),3)
print($arr[$d],"x",$arr[$d+1],"x",$arr[$d+2])
END_CYC
halt
12:55:41 0x1x2
12:55:41 3x4x5
12:55:41 6x7x8
12:55:41 9x10x11
12:55:41 12x13x14
12:55:41 15x16x17
12:55:41 18x19x20
12:55:41 21x22x23
12:55:41 24x25x26
12:55:41 27x28x29
12:55:41 30x31x32
12:55:41 33x34x35
12:55:41 36x37x38
12:55:41 39x40x41
12:55:41 42x43x44
12:55:41 45x46x47
12:55:41 48x49x50
12:55:41 51x52x53
12:55:41 54x55x56
12:55:41 57x58x59
-
Да, да. удобней "вывернуть" размерности.
В представлении получив двумерный массив, в каждом поле которого три значение - 3-я размерность.
Но это смотря какая задача. Если там не координаты, то может быть удобней первый вариант.
Например, имеем несколько двумерных полей x,y... допустим храним несколько шахматных досок.
Тогда 3-я размерность - номер доски.
Второй вариант по аналогии с XYZ не подходит. Нафиг нам хранить рядом трио поля E4 с разных досок? Незачем. Лучше пусть каждая доска будет сама по себе
// 0 1 2 3 4
// 5 6 7 8 9
//10 11 12 13 14
//15 16 17 18 19
//20 21 22 23 24
//25 26 27 28 29
//30 31 32 33 34
//35 36 37 38 39
//40 41 42 43 44
//45 46 47 48 49
//50 51 52 53 54
//55 56 57 58 59
Короче, применение мы не знаем и автору выбирать где какая размерность.
-
//допустим размер массива 3х4х5
//заполняю его значениями по порядку
$R=5 //символов в строке
$D=4//кол-во строк
$P=3//третий размер массива хз как это называется( глубина ширина)
FOR($a=0, $a < $P) //заполняю по порядку с 10
FOR($b=0, $b < $D)
FOR($c=0, $c < $R)
ARRPUSH($arr, $a*5*4+$b*5+$c)
END_CYC
END_CYC
END_CYC
//должен заполнить массив числами по порядку
halt
просто если чесно, я пока не вижу смысла в простом пронумировывании, просветите меня если не лень ???
-
просто если чесно, я пока не вижу смысла в простом пронумировывании, просветите меня если не лень ???
Для отладки. Проверить правильно ли все формулы работают.
Конечно, потом данные там будут разные. Иначе зачем бы мы там искали значение :o
-
Например, имеем несколько двумерных полей x,y... допустим храним несколько шахматных досок.
Тогда 3-я размерность - номер доски.
Второй вариант по аналогии с XYZ не подходит. Нафиг нам хранить рядом трио поля E4 с разных досок? Незачем. Лучше пусть каждая доска будет сама по себе
// 0 1 2 3 4
// 5 6 7 8 9
//10 11 12 13 14
//15 16 17 18 19
//20 21 22 23 24
//25 26 27 28 29
//30 31 32 33 34
//35 36 37 38 39
//40 41 42 43 44
//45 46 47 48 49
//50 51 52 53 54
//55 56 57 58 59
Короче, применение мы не знаем и автору выбирать где какая размерность.
ну да, немного начал догонять, просто задачи такой ниразу не встречал. спс, буду знать.
просто я както и не обратил внимане на вторую часть FOR($i=0, $i < ARRSIZE($arr))
IF($arr[$i] = 5)
$a = INT($i / $R/$D)
$b = INT($i/$R-$a*$D)
$c = $i - $b*$R-$a*$R*$D
LOGWRITE("a = ", $a, ", b = ", $b, ", c = ", $c)
END_IF
END_CYC
так как первая меня сразу смутила..
а так вроде даже и применимо, но сложнее для понимания . еще раз спасибо за разъяснение :D
-
совершенно верно этот для отладки, а нужен он мне для двумерного поля 12 х 5 клеток, но на экран помещается только 4 из 12, так что третья размерность мне для определения на какую часть доски тащить экран (вернее какую часть доски тащить на экран но по другому представить легче) а в сам массив я буду записывать значения соответствующие содержанию клеток, а потом менять перепроверять, в общем думаю оправдана будет морока.
Да, всё правильно.
Только в кликере есть ошибка
http://crapware.aidf.org/forum/index.php?topic=2874.0
:D не поверишь, пока ждал ответа, как раз зашел в ошибки, прочел твою тему и сижу уже правлю то что наваял до этого. и снова спасибо тебе за ответ
или пройти по точкам поочереди (к примеру они у нас были записаны заранее, чтото типа маошрута)FOR($d=0, $d < ARRSIZE($arr),3)
$x = $arr[$d]
$y = $arr[$d+1]
$z = $arr[$d+2]
END_CYC
еще не сталкивался с трехмерными координатами, да и разве кликер может по трехмерным работать? он же экран аналезирует :o
но твою идею понял, оценил и запомню, вдруг пригодиться
вдруг всетаки начну каким путевым языком заниматься и что то полезное делать...
-
да и разве кликер может по трехмерным работать? он же экран аналезирует :o
еще как может :). и кроме как анализировать экран, кликер еще умеет читать из памяти :D. да и по анализу экрана применимо - размер обьекта к примеру или считывание какихлибо (числовых или еще каких) данных с экрана.
пример - контра на денди 2-й уровень :D (это просто пример, в контре конечно не применимо, там совсем по другому) . идем по туннелю, нужно определить координаты противника. в начале определяем положение его на экране (2 измерения). после - смотрим на его размер, вот его и третье измерение, в пространстве.
еще пример - летим на вертолете (самолете). смотрим на карту - видим положение себя в двух измерениях. смотрим на панель приборов, видим высоту - третье измерение.
-
еще как может :). и кроме как анализировать экран, кликер еще умеет читать из памяти :D. да и по анализу экрана применимо - размер обьекта к примеру или считывание какихлибо (числовых или еще каких) данных с экрана.
да проститься мне мое невежество, считывать из памяти? то-есть анализировать параметры которые получает приложение? я правильно вас понял? или вы про считывание и запись в файлы (TFWRITE ("file", "str", [str_n]) - записывает строку в файл. типо этого) в любом случае.
не будете ли так добры послать меня по ссылочке :D почитать об этом
да и еще вопрос не по этой теме но он маленький и боюсь что ответ очевиден
функция IF_PICTURE_IN никаким чудесным образом масштабирование учитывать не может? ну тоесть в игре есть объект, но в зависимости от настроения азиатского носорога и положения марса относительно венеры при прохождения пояса верности дарьи ивановны, размер объекта меняется, нужно сидеть и ловить на скрины все возможные размеры или есть какойнибудь чудодейственный способ задать ему искать такой объект но побольше или поменьше
-
да проститься мне мое невежество, считывать из памяти? то-есть анализировать параметры которые получает приложение? я правильно вас понял? или вы про считывание и запись в файлы (TFWRITE ("file", "str", [str_n]) - записывает строку в файл. типо этого) в любом случае.
не будете ли так добры послать меня по ссылочке :D почитать об этом
имеется ввиду считывание из памяти процесса READMEM (pid, "addr", [size]). есть еще и запись, но в онлайн играх не применима. естественно, нужно в начале найти адрес нужного значения в памяти, проги по сканированию, поиску и отсеивания думаю знаешь.
да и еще вопрос не по этой теме но он маленький и боюсь что ответ очевиден
функция IF_PICTURE_IN никаким чудесным образом масштабирование учитывать не может? ну тоесть в игре есть объект, но в зависимости от настроения азиатского носорога и положения марса относительно венеры при прохождения пояса верности дарьи ивановны, размер объекта меняется, нужно сидеть и ловить на скрины все возможные размеры или есть какойнибудь чудодейственный способ задать ему искать такой объект но побольше или поменьше
IF_PICTURE_IN тупо сверяет попиксельно твою заготовку с буфером (областью). такчто с масштабированием не прокатит.
-
естественно, нужно в начале найти адрес нужного значения в памяти, проги по сканированию, поиску и отсеивания думаю знаешь.
ты обо мне слишком хорошего мнения, но пока не надо а после гугл мне в помощь
считывание из памяти процесса READMEM (pid, "addr", [size])
о такой тоже слышу впервые, и в хелпе ее не видел))) чувствую нашел что поискать и почитать на выходных
-
подсказываю.
простейший вариант - артмани. есть русская справка (что и как искать), по началу может быть сложновато со всеми этими указателями смещениями и прочим. в браузерных приложениях у тебя врядли чтото получится найти, а вот в клиентских - без проблем. вот только не забывай про защиты, античиты. все манипуляции только на тестовых аккаунтах.
справка - скрипты и плагины
Синтаксис
READMEM (pid, "addr", [size]) - считывает целое значение из памяти процесса
Параметры
pid - идентификатор процесса
addr - строка, адрес памяти
size - тип значения (1,2,4,8)
Возвращаемые параметры
$_return1 - прочитанное значение
вот отличный пример работы с памятью кликера (с указателем и со смещением) http://crapware.aidf.org/forum/index.php?topic=2134.msg12725#msg12725
меняем изображение в графическом буфере кликера самим же кликером.
;D только всё это зря было. как аказалось, в кликермане есть процедура которая это всё делает, но в тот момент от нас ее скрывали. ;D
-
подсказываю.
спасибо, попробую вникнуть, задачу посмотрел, мозг поплыл.
но вернусь к первоначальной теме. трехмерный массив, появилась потребность припереборе откатываться на значение назад по столбцу и по строке, есле по строке у меня худо бедно работает через GOTO то по столбцу полный калапс, назад он вроде откатывается но потом пропускает строку или не доходит до конца .
FOR ($i=0, $i<$B) //перебираю строки
strk://метка, куда возвращаюсь если откатываю счетчик назад постолбцу
FOR ($j=0, $j<$D) //перебераю столбцы
stlb: //метка, куда возвращаюсь если откатываю счетчик назад по строке
//........тут еще куча всякой ерунды к делу не относящейся
migk($i,$j) //процедура в отдельном файле проверяет есть мигающий пиксель в центре квадрата или нет($m=1:есть $m=0:нет)
IF ($m=1)
WAITMS(50)
print ("кликаю")
LCLICK($xkz+$dlk*$j,$ykz-$dlk*$i)//открываю клетку если пиксель мигает
WAITMS(50)
//........тут еще куча всякой ерунды к делу не относящейся
IF($i!0)
migk($i-1,$j)//если строка не нижняя проверяю с низу квадратик не начал мигать?
IF ($m=1)
$i=$i-1//если начал то счетчик откатываю на 1
goto(strk)
END_IF
END_IF
IF($j!0)
migk($i,$j-1)//если строка не нижняя проверяю с низу квадратик не начал мигать?
IF ($m=1)
$j=$j-1//если начал то счетчик откатываю на 1
goto(stlb)
END_IF
END_IF
END_IF
END_CYC
END_CYC
такое впечатление что вот этому FOR ($i=0, $i<$B) глубоко пофиг что я сделал с $i когда сного доходит до него он юзает старое значение увеличенное на один, и шагов у него ровно $B а если приходиться пару раз проходить goto(strk) унего шаги оп закончились и все до конца не идет :( я его и вежливо и не очень вежливо просил...
кажется отчасти лечиться если заменить строки
FOR ($i=0, $i<$B) //перебираю строки
strk://метка, куда возвращаюсь если откатываю счетчик назад постолбцу
на строки$i=0
strk:
FOR ($i, $i<$B) //перебираю строки
но как то не красиво получается и почему не работает первый вариант понять не могу
-
в первую очередь нужно избавиться от гото. выскакивать из цикла по гото категорически запрещено.
$j = 99999
FOR ($i=0, $i<$B)
//strk:
IF($j=$D)
$j=99999
END_IF
WHILE($j = 99999)
FOR ($j=0, $j<$D)
//stlb:
$stlb = 1
WHILE($stlb = 1)
migk($i,$j)
IF ($m=1)
WAITMS(50)
print ("кликаю")
LCLICK($xkz+$dlk*$j,$ykz-$dlk*$i)
WAITMS(50)
IF($i!0)
migk($i-1,$j)
IF ($m=1)
$i=$i-1
// goto(strk)
//тут ламаем цикл FOR ($j=0, $j<$D) и возвращаемся назад в цикле FOR ($i=0, $i<$B) не наращивая $i
$j = 99999
$stlb = 0 //и ламаем цикл WHILE($stlb = 1)
END_IF
END_IF
IF(($j!0)&($j ! 99999))
migk($i,$j-1)
IF ($m=1)
$j=$j-1
//goto(stlb)
//возвращаемся назад в текущем цикле, не наращивая j
$stlb = 1
else
$stlb = 0
END_IF
END_IF
END_IF
END_CYC
END_CYC
END_CYC
END_CYC
перепроверь, я всё правильно понял? мог что нибудь упестить, или не правильно понять.
немного подправил, нашел ошибочку.
бляха, нечаянно не тот пост отредактировал >:(, не актуален уже
-
перепроверь, я всё правильно понял? мог что нибудь упестить, или не правильно понять.
немного подправил, нашел ошибочку.
даже такая версия кода не рабочая
если я что то понимаю то вот этот цикл WHILE($stlb = 1)
бесконечен при условии что $m не равен 1 а такой вариант тоже может быть
$stlb = 0 у тебя после второй проверки на $m а если не проходит первую проверку то крутит его бесконечно.
и насколько я понимаю код то задачу которую я решал, объяснил я не очень четко.
попытка 2
у меня есть поле 5 на 4 клеток
начинаю проверку с нижнего левого квадрата по горизантали и вверх двигаюсь, если нахожу мигающий то проверяю если это не первая строка и внизу квадратик замигал то спускаюсь вниз на предидущую строку и начинаю проверять предидущую, если внизу не замигал то проверяю слева квадратик, если он замигал, то возращаюсь на квадратик влево открываю его и проверяю опять низ и лево.
ну а если после открытия не слева и не внизу не замигал просто проверяю дальше.
как я понял в твоем коде ты задерживаешь на том же месте проверку а не откатываешь назад.
Но свою ошибку я понял,гото уберу, завтра попробую написать что то путевое либо по твоему примеру вайлы либо $i=$i-2 и иф еще один
-
я всеравно всю суть "попытки 2" не понял. специально оставил твои гото и метки для наглядности, вроде всё как по меткам должно работать.
migk($i,$j-1)
IF ($m=1)
$j=$j-1
//goto(stlb)
//возвращаемся назад в текущем цикле, не наращивая j
$stlb = 1
else
$stlb = 0
END_IF
вот тут, если м!0 то какраз таки из цикла WHILE($stlb = 1) должно выскочить, и $j наращивается, и дальше опять в цикл. чтото с логикой не то. может кто другой поможет. я на этом всё.
-
я наверно понял, может так ? :
$j = 99999
FOR ($i=0, $i<$B)
//strk:
IF($j=$D)
$j=99999
END_IF
WHILE($j = 99999)
FOR ($j=0, $j<$D)
//stlb:
$stlb = 1
WHILE($stlb = 1)
$stlb = 0
migk($i,$j)
IF ($m=1)
WAITMS(50)
print ("кликаю")
LCLICK($xkz+$dlk*$j,$ykz-$dlk*$i)
WAITMS(50)
IF($i!0)
migk($i-1,$j)
IF ($m=1)
$i=$i-1
// goto(strk)
//тут ламаем цикл FOR ($j=0, $j<$D) и возвращаемся назад в цикле FOR ($i=0, $i<$B) не наращивая $i
$j = 99999
$stlb = 0 //и ламаем цикл WHILE($stlb = 1)
else
IF($j!0)
migk($i,$j-1)
IF ($m=1)
$j=$j-1
//goto(stlb)
//возвращаемся назад в текущем цикле, не наращивая j
$stlb = 1
else
$stlb = 0
END_IF
END_IF
END_IF
END_IF
END_IF
END_CYC
END_CYC
END_CYC
END_CYC
так больше вероятность, что не зависнет в цикле WHILE($stlb = 1) ;D
;D это я просто наугад решил так..... но попытка не пытка :D
или так
$j = 99999
FOR ($i=0, $i<$B)
//strk:
IF($j=$D)
$j=99999
END_IF
WHILE($j = 99999)
FOR ($j=0, $j<$D)
//stlb:
$stlb = 1
WHILE($stlb = 1)
$stlb = 0
migk($i,$j)
IF ($m=1)
WAITMS(50)
print ("кликаю")
LCLICK($xkz+$dlk*$j,$ykz-$dlk*$i)
WAITMS(50)
IF($i!0)
migk($i-1,$j)
IF ($m=1)
$i=$i-1
// goto(strk)
//тут ламаем цикл FOR ($j=0, $j<$D) и возвращаемся назад в цикле FOR ($i=0, $i<$B) не наращивая $i
$j = 99999
$stlb = 0 //и ламаем цикл WHILE($stlb = 1)
END_IF
else
IF($j!0)
migk($i,$j-1)
IF ($m=1)
$j=$j-1
//goto(stlb)
//возвращаемся назад в текущем цикле, не наращивая j
$stlb = 1
else
$stlb = 0
END_IF
END_IF
END_IF
END_IF
END_CYC
END_CYC
END_CYC
END_CYC
-
так больше вероятность, что не зависнет в цикле WHILE($stlb = 1) ;D
;D это я просто наугад решил так..... но попытка не пытка :D
оба эти скрипта уже не зависают, но так как я обьяснил задачу невнятно работают они не совсем по той схеме что нужна.
если сможешь объясни мне следующий поворот программы
( , я как неграмотный юзверь выскакивал по гото минуя конец цыкла и мои значения $j=$j-1 не просто не наращивались а уменьшались почему я и ввел условие IF($j!0) что бы в минус не уйти) ты $j=$j-1 а потом давал пройти ей дальше по циклу WHILE($stlb = 1) Она у тебя в итоге уменьшалась на 1 или ты уменьшил, цикл увеличил, а итого не изменилось?
1 вариант скрипта: строка №28-№33 выгледит все логично но если я правильно понял глюк $j = 99999 а потом оно всетаки проходит через конец цыкла и становиться 100000 и ломает цикл WHILE($j = 99999) и FOR ($i=0, $i<$B) прокручивается до конца в бездействии, менял в твоей программе 99998 стала работать лучше. ближе к результату ( жаль что слишком рано слил все попытки теста а ждать еще час немного лень) свой писал уже не прокатило, в этом моменте я тоже запутался
в обоих циклах условие IF($j!0) и вся последующая проверка $j-1 зависит от IF($i!0) в первом все кроме первой строки срабатывает во втором наоборот только первая( если я правильно ифы распусал)
во втором еще какой то глюк был с прирыванием преждевременным, может тот же самый что в первом, но поймал я его только раз ( и анализировать доконца не смог)
зато понял две вещи на твоих примерах, вопервых твой принцип использования WHILE (интересно и позновательно, много новых идей) второе объяснять надо проще доходчевей и наглядно, а то я помоему с идеей сам перемудрил
итог №1 случайно вышел код, работает не совсем по плану но не плохо
FOR ($i=0, $i<$B) //перебираю строки
print ("строка",$i)
FOR ($j=0, $j<$D) //перебераю столбцы
print ("столбец",$j)
migk($i,$j) //процедура в отдельном файле проверяет есть мигающий пиксель в центре квадрата или нет($m=1:есть $m=0:нет)
IF ($m=1)
WAITMS(50)
print ("кликаю")
LCLICK($xkz+$dlk*$j,$ykz-$dlk*$i)//открываю клетку если пиксель мигает
WAITMS(50)
IF($i!0)
migk($i-1,$j)//если строка не нижняя проверяю с низу квадратик не начал мигать?
IF ($m=1)
$i=$i-1//если начал то счетчик откатываю на 1
$j=$j-1//сдесь я уменьшаю цикл дальше увеличит на 1 в итоге не измениться
END_IF
END_IF
IF($j!0)
migk($i,$j-1)//если строка не крайняя проверяю с слева квадратик не начал мигать?
IF ($m=1)
$j=$j-2//если начал то счетчик откатываю на 1
END_IF
END_IF
END_IF
END_CYC
END_CYC
итог №2 вроде то что надо
FOR ($i=0, $i<$B) //перебираю строки
print ("строка",$i)
FOR ($j=0, $j<$D) //перебераю столбцы
//метка, куда возвращаюсь если откатываю счетчик назад по строке
print ("столбец",$j)
migk($i,$j) //процедура в отдельном файле проверяет есть мигающий пиксель в центре квадрата или нет($m=1:есть $m=0:нет)
IF ($m=1)
WAITMS(50)
print ("кликаю")
LCLICK($xkz+$dlk*$j,$ykz-$dlk*$i)//открываю клетку если пиксель мигает
WAITMS(50)
IF($i!0)
migk($i-1,$j)//если строка не нижняя проверяю с низу квадратик не начал мигать?
IF ($m=1)
$i=$i-2//если начал то счетчик откатываю на 1
$j=$D
END_IF
END_IF
IF($j!0)
migk($i,$j-1)//если строка не крайняя проверяю слева квадратик не начал мигать?
IF ($m=1)
$j=$j-2//если начал то счетчик откатываю на 1
END_IF
END_IF
END_IF
END_CYC
END_CYC
итог №3 это на основе твоих кодов, твоей идеи. протестил еще не чательно но вроде работает
$j=99999
FOR ($i=0, $i<$B) //перебираю строки
print ("строка",$i)
IF($j=$D)
$j=99999
END_IF
WHILE($j = 99999)
$j=0
FOR ($j=0, $j<$D) //перебераю столбцы
$stlb = 1
WHILE($stlb = 1)
$stlb = 0
print ("столбец",$j)
migk($i,$j) //процедура в отдельном файле проверяет есть мигающий пиксель в центре квадрата или нет($m=1:есть $m=0:нет)
IF ($m=1)
WAITMS(50)
print ("кликаю")
LCLICK($xkz+$dlk*$j,$ykz-$dlk*$i)//открываю клетку если пиксель мигает
WAITMS(50)
//и тут снова проверка на банки склянки
IF($i!0)
migk($i-1,$j)//если строка не нижняя проверяю с низу квадратик не начал мигать?
IF ($m=1)
$i=$i-1//если начал то счетчик откатываю на 1
$j = 9999
$stlb = 0
END_IF
END_IF
IF($j!0)& ($j!9999)
migk($i,$j-1)//если строка не нижняя проверяю с низу квадратик не начал мигать?
IF ($m=1)
$j=$j-1//если начал то счетчик откатываю на 1
$stlb = 1
END_IF
END_IF
END_IF
END_CYC
END_CYC
END_CYC
END_CYC
P.S. дальше я 3 измерение буду добавлять дальше еще веселее станет. буду выбирать один из трех способов прохождения
и что бы внести наконец ясность алгоритм делаю прохождения вот этой игрушки игровой локации
https://vk.com/app5683079_60421822