Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: lokipall on December 29, 2016, 11:26:31 AM

Title: Массивы
Post 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

но в примерах только двухмерный массив, у меня желание воспользоваться трехмерным массивом, и подозреваю что он раскладывается по похожей формуле. моего воображения хватило только на следующие примеры и следующие формулы. Поправьте меня пожалуйста если я ошибся.

Code: (clickermann) [Select]

//допустим размер массива 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 утону

Code: (clickermann) [Select]
// ищем по значению в массиве размером
$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

А вопрос в общем то, это работать то будет?формула заполнения и формула нахождения положения в массиве верные?
Title: Re: Массивы
Post by: Vint on December 29, 2016, 12:39:59 PM
Да, всё правильно.
Только в кликере есть ошибка
http://crapware.aidf.org/forum/index.php?topic=2874.0

Поэтому, чтоб правильно считало вот эту строку
Code: (clickermann) [Select]
$c = $i - $b*$R - $a*$R*$D
нужно записать так (2 способа):
Code: (clickermann) [Select]
$c = $i - ($b*$R) - ($a*$R*$D)
// или
$c = $i - ($b*$R + $a*$R*$D)
Title: Re: Массивы
Post by: dramster on December 29, 2016, 12:43:02 PM
по твоей задаче
Code: (clickermann) [Select]
$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 ?
Code: (clickermann) [Select]
$check = 28

$x = $arr[$check*3]
$y = $arr[$check*3+1]
$z = $arr[$check*3+2]

или пройти по точкам поочереди (к примеру они у нас были записаны заранее, чтото типа маошрута)
Code: (clickermann) [Select]
FOR($d=0, $d < ARRSIZE($arr),3)
   $x = $arr[$d]
   $y = $arr[$d+1]
   $z =  $arr[$d+2]   
END_CYC



или я както подругому понимаю многомерные массивы? если винт написал что там всё правильно, то я хз  :-\


Code: (clickermann) [Select]
//допустим размер массива 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

Code: [Select]
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
Title: Re: Массивы
Post by: Vint on December 29, 2016, 12:51:10 PM
Да, да. удобней "вывернуть" размерности.
В представлении получив двумерный массив, в каждом поле которого три значение -  3-я размерность.

Но это смотря какая задача. Если там не координаты, то может быть удобней первый вариант.
Например, имеем несколько двумерных полей x,y... допустим храним несколько шахматных досок.
Тогда 3-я размерность - номер доски.
Второй вариант по аналогии с XYZ не подходит. Нафиг нам хранить рядом трио поля E4 с разных досок? Незачем. Лучше пусть каждая доска будет сама по себе
Code: [Select]
// 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

Короче, применение мы не знаем и автору выбирать где какая размерность.
Title: Re: Массивы
Post by: dramster on December 29, 2016, 12:59:09 PM
Code: (clickermann) [Select]
//допустим размер массива 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
просто если чесно, я пока не вижу смысла в простом пронумировывании, просветите меня если не лень ???
Title: Re: Массивы
Post by: Vint on December 29, 2016, 01:00:33 PM
просто если чесно, я пока не вижу смысла в простом пронумировывании, просветите меня если не лень ???
Для отладки. Проверить правильно ли все формулы работают.

Конечно, потом данные там будут разные. Иначе зачем бы мы там искали значение  :o
Title: Re: Массивы
Post by: dramster on December 29, 2016, 01:02:04 PM
Например, имеем несколько двумерных полей x,y... допустим храним несколько шахматных досок.
Тогда 3-я размерность - номер доски.
Второй вариант по аналогии с XYZ не подходит. Нафиг нам хранить рядом трио поля E4 с разных досок? Незачем. Лучше пусть каждая доска будет сама по себе
Code: [Select]
// 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

Короче, применение мы не знаем и автору выбирать где какая размерность.

ну да, немного начал догонять, просто задачи такой ниразу не встречал. спс, буду знать.


просто я както и не обратил внимане на вторую часть
Code: (clickermann) [Select]
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
Title: Re: Массивы
Post by: lokipall on December 29, 2016, 01:29:30 PM
совершенно верно этот для отладки, а нужен он мне для двумерного поля 12 х 5 клеток, но на экран помещается только 4 из 12, так что третья размерность мне для определения на какую часть доски тащить экран (вернее какую часть доски тащить на экран  но по другому представить легче) а в сам массив я буду записывать значения соответствующие содержанию клеток, а потом менять перепроверять, в общем думаю оправдана будет морока.
Да, всё правильно.
Только в кликере есть ошибка
http://crapware.aidf.org/forum/index.php?topic=2874.0
  :D не поверишь, пока ждал ответа, как раз зашел в ошибки, прочел твою тему и сижу уже правлю то что наваял до этого. и снова спасибо тебе за ответ

или пройти по точкам поочереди (к примеру они у нас были записаны заранее, чтото типа маошрута)
Code: (clickermann) [Select]
FOR($d=0, $d < ARRSIZE($arr),3)
   $x = $arr[$d]
   $y = $arr[$d+1]
   $z =  $arr[$d+2]   
END_CYC

еще не сталкивался с трехмерными координатами, да и разве кликер может по трехмерным работать? он же экран аналезирует :o
но твою идею понял, оценил и запомню, вдруг пригодиться
вдруг всетаки начну каким путевым языком заниматься и что то полезное делать...
Title: Re: Массивы
Post by: dramster on December 29, 2016, 01:45:01 PM
да и разве кликер может по трехмерным работать? он же экран аналезирует :o
еще как может  :). и кроме как анализировать экран, кликер еще умеет читать из памяти :D. да и по анализу экрана применимо - размер обьекта к примеру или считывание какихлибо (числовых или еще каких) данных с экрана.

пример - контра на денди 2-й уровень  :D (это просто пример, в контре конечно не применимо, там совсем по другому) . идем по туннелю, нужно определить координаты противника. в начале определяем положение его на экране (2 измерения). после - смотрим на его размер, вот его и третье измерение, в пространстве.

еще пример - летим на вертолете (самолете). смотрим на карту - видим положение себя в двух измерениях. смотрим на панель приборов, видим высоту - третье измерение.
Title: Re: Массивы
Post by: lokipall on December 29, 2016, 02:09:46 PM
еще как может  :). и кроме как анализировать экран, кликер еще умеет читать из памяти :D. да и по анализу экрана применимо - размер обьекта к примеру или считывание какихлибо (числовых или еще каких) данных с экрана.
да проститься мне мое невежество, считывать из памяти? то-есть анализировать параметры которые получает приложение? я правильно вас понял? или вы про считывание и запись в файлы (TFWRITE ("file", "str", [str_n]) - записывает строку в файл. типо этого) в любом случае.
не будете ли так добры послать меня по ссылочке :D почитать об этом


да и еще вопрос не по этой теме но он маленький и боюсь что ответ очевиден
функция IF_PICTURE_IN  никаким чудесным образом масштабирование учитывать не может? ну тоесть в игре есть объект, но в зависимости от настроения азиатского носорога и положения марса относительно венеры при прохождения пояса верности дарьи ивановны, размер объекта меняется, нужно сидеть и ловить на скрины все возможные размеры или есть какойнибудь чудодейственный способ задать ему искать такой объект но побольше или поменьше
Title: Re: Массивы
Post by: dramster on December 29, 2016, 02:16:07 PM
да проститься мне мое невежество, считывать из памяти? то-есть анализировать параметры которые получает приложение? я правильно вас понял? или вы про считывание и запись в файлы (TFWRITE ("file", "str", [str_n]) - записывает строку в файл. типо этого) в любом случае.
не будете ли так добры послать меня по ссылочке :D почитать об этом

имеется ввиду считывание из памяти процесса READMEM (pid, "addr", [size]). есть еще и запись, но в онлайн играх не применима. естественно, нужно в начале найти адрес нужного значения в памяти, проги по сканированию, поиску и отсеивания думаю знаешь.




да и еще вопрос не по этой теме но он маленький и боюсь что ответ очевиден
функция IF_PICTURE_IN  никаким чудесным образом масштабирование учитывать не может? ну тоесть в игре есть объект, но в зависимости от настроения азиатского носорога и положения марса относительно венеры при прохождения пояса верности дарьи ивановны, размер объекта меняется, нужно сидеть и ловить на скрины все возможные размеры или есть какойнибудь чудодейственный способ задать ему искать такой объект но побольше или поменьше
IF_PICTURE_IN  тупо сверяет попиксельно твою заготовку с буфером (областью). такчто с масштабированием не прокатит.

Title: Re: Массивы
Post by: lokipall on December 29, 2016, 02:38:00 PM
естественно, нужно в начале найти адрес нужного значения в памяти, проги по сканированию, поиску и отсеивания думаю знаешь.


ты обо мне слишком хорошего мнения, но пока не надо а после гугл мне в помощь
Quote
считывание из памяти процесса READMEM (pid, "addr", [size])

о такой тоже слышу впервые, и в хелпе ее не видел))) чувствую нашел что поискать и почитать на выходных
Title: Re: Массивы
Post by: dramster on December 29, 2016, 02:48:38 PM
подсказываю.
 простейший вариант - артмани. есть русская справка (что и как искать), по началу может быть сложновато со всеми этими указателями смещениями и прочим. в браузерных приложениях у тебя врядли чтото получится найти, а вот в клиентских - без проблем. вот только не забывай про защиты, античиты. все манипуляции только на тестовых аккаунтах.

справка - скрипты и плагины

Синтаксис
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
Title: Re: Массивы
Post by: lokipall on December 29, 2016, 04:10:14 PM
подсказываю.
спасибо, попробую вникнуть, задачу посмотрел, мозг поплыл.

но вернусь к первоначальной теме. трехмерный массив, появилась потребность припереборе откатываться на значение назад по столбцу и по строке, есле по строке у меня худо бедно работает через GOTO то по столбцу полный калапс, назад он вроде откатывается но потом пропускает  строку или не доходит до конца .
Code: (clickermann) [Select]


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) унего шаги оп закончились и все до конца не идет :( я его и вежливо и не очень вежливо просил...

кажется отчасти лечиться если заменить строки
Code: [Select]
FOR ($i=0, $i<$B) //перебираю строки
strk://метка, куда возвращаюсь если откатываю счетчик назад постолбцу

на строки
Code: [Select]
$i=0
strk:
FOR ($i, $i<$B) //перебираю строки
но как то не красиво получается и почему не работает первый вариант понять не могу
Title: Re: Массивы
Post by: dramster on December 29, 2016, 04:54:16 PM
в первую очередь нужно избавиться от гото. выскакивать из цикла по гото категорически запрещено.
Code: (clickermann) [Select]
$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


перепроверь, я всё правильно понял? мог что нибудь упестить, или не правильно понять.



немного подправил, нашел ошибочку.


бляха, нечаянно не тот пост отредактировал >:(, не актуален уже 
Title: Re: Массивы
Post by: lokipall on December 29, 2016, 10:12:06 PM
перепроверь, я всё правильно понял? мог что нибудь упестить, или не правильно понять.



немного подправил, нашел ошибочку.
даже такая версия кода не рабочая
если я что то понимаю то вот этот цикл
Code: [Select]
WHILE($stlb = 1) бесконечен при условии что $m не равен 1 а такой вариант тоже может быть
 $stlb = 0 у тебя после второй проверки на $m а если не проходит первую проверку то крутит его бесконечно.
и насколько я понимаю код то задачу которую я решал, объяснил я не очень четко.
попытка 2
у меня есть поле 5 на 4 клеток
начинаю проверку с нижнего левого квадрата по горизантали и вверх двигаюсь, если нахожу мигающий то проверяю если это не первая строка и внизу квадратик замигал то спускаюсь вниз на предидущую строку  и начинаю проверять предидущую, если внизу не замигал то проверяю слева квадратик, если он замигал, то возращаюсь на квадратик влево открываю его и проверяю опять низ и лево.
ну а если после открытия не слева и не внизу не замигал просто проверяю дальше.
 
как я понял в твоем коде ты задерживаешь на том же месте проверку а не откатываешь назад.

Но свою ошибку я понял,гото уберу, завтра попробую написать что то путевое либо по твоему примеру вайлы либо $i=$i-2  и иф еще один
 
Title: Re: Массивы
Post by: dramster on December 29, 2016, 10:46:18 PM
я всеравно всю суть "попытки 2" не понял. специально оставил твои гото и метки для наглядности, вроде всё как по меткам должно работать.
Code: (clickermann) [Select]
                  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 наращивается, и дальше опять в цикл. чтото с логикой не то. может кто другой поможет. я на этом всё.
Title: Re: Массивы
Post by: dramster on December 29, 2016, 10:50:28 PM
я наверно понял, может так ? :
Code: (clickermann) [Select]
$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

или так
Code: (clickermann) [Select]
$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
Title: Re: Массивы
Post by: lokipall on December 30, 2016, 04:31:41 PM

так больше вероятность, что не зависнет в цикле 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 случайно вышел код, работает не совсем по плану но не плохо
Code: (clickermann) [Select]
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 вроде то что надо
Code: (clickermann) [Select]

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 это на основе твоих  кодов, твоей идеи. протестил еще не чательно но вроде работает
Code: (clickermann) [Select]
$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