Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - lokipall

Pages: [1] 2
1
добавь цикл задерживающий выполнение, пока клавиша не будет отпущена.
а тепрь для совсем глупых
Code: (clickermann) [Select]
IF($TIME < $_time_t)
   $TIME = $_time_t + 1
   LOGWRITE($CYCLE_STATE)
END_IF
IF(iskeydown(#A)=1)
WHILE(iskeydown(#A)=1)
  WAITMS(20)
END_CYC
   $CYCLE_STATE = 0
   WHILE($CYCLE_STATE = 0)
      IF(iskeydown(#A)=1)
  WHILE(iskeydown(#A)=1)
  WAITMS(20)
END_CYC
         $CYCLE_STATE = 1
      END_IF
      WAITMS(10)
   END_CYC
END_IF
(я просто из любопытства решил посмотреть, задача не моя я ее не совсем понимаю)
вставил вроде цикл задержку, запись паузит вроде работает, но при старте, до первого нажатия #A он пишит 0 значение тоесть вроде ноль но в цикл WHILE($CYCLE_STATE = 0) не попадает.
это типо отсутствие самой переменной так проявляется? в логах ноль а в цикле не ноль?

2
Общие вопросы / Re: Массивы
« 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   

3
Общие вопросы / Re: Массивы
« on: December 29, 2016, 10:12:06 PM »
перепроверь, я всё правильно понял? мог что нибудь упестить, или не правильно понять.



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

Но свою ошибку я понял,гото уберу, завтра попробую написать что то путевое либо по твоему примеру вайлы либо $i=$i-2  и иф еще один
 

4
Общие вопросы / Re: Массивы
« 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) //перебираю строки
но как то не красиво получается и почему не работает первый вариант понять не могу

5
Общие вопросы / Re: Массивы
« on: December 29, 2016, 02:38:00 PM »
естественно, нужно в начале найти адрес нужного значения в памяти, проги по сканированию, поиску и отсеивания думаю знаешь.


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

о такой тоже слышу впервые, и в хелпе ее не видел))) чувствую нашел что поискать и почитать на выходных

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


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

7
Общие вопросы / Re: Массивы
« 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
но твою идею понял, оценил и запомню, вдруг пригодиться
вдруг всетаки начну каким путевым языком заниматься и что то полезное делать...

8
Общие вопросы / Массивы
« 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

А вопрос в общем то, это работать то будет?формула заполнения и формула нахождения положения в массиве верные?

9
спасибо, очень помогли. тему закрою пожалуй,
тем кто после читать будет: строки и столбцы нумеруются с 0 не тупите как я

10
Vint спасибо еще раз, просвещаешь темного
Quote
Чего там грустного. Высчитывай сам индексы псевдо многомерных массивов.
http://crapware.aidf.org/forum/index.php?topic=321.msg2686#msg2686
http://crapware.aidf.org/forum/index.php?topic=1138.msg5115#msg5115

На форуме куча скриптов написана с подобным использованием массивов.

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

11
 Vint, спасибо очень доходчиво, для чайников, прям для меня.
Quote
Принадлежат ли эти ячейки памяти по прежнему переменной или освободились не знаю. Это как с заданием сразу n-ного элемента...
а это что за ошибка?
 может я ее тоже совершил уже и надо быстрей исправлять

Quote
Массивы в кликере одномерные.
сейчас стало очень грустно :-[ половина задумки летит в тар-тарары.

может кто сталкивался с задачей типа:
есть поле m на n клеток закрытое надо по одной открывать клеточки, при этом открыть модно только соседние с уже открытой если на уже открытой нет препятствия или врага,препятствия надо обходить по другим клеткам, врага бить, еще и бонусы могут валяться. открыть надо все.двигаться строго по горизонтали или вертикали получается очень нечасто из-за препятствий.

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

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

12
ребята вы почти изобрели наследование и полиморфизм, не останавливайтесь
чукча не понимать таких сложных слов, чукча по клавишам тык тык, монитор мигать, чукча хорошоо-о-о-о
( а серьезно я объектно ориентированное программирование знать не знаю,и вообще как то долег от составления кодов, так что прошу прощения если ошибки грубые или глупые)
Quote
Передача массивов не реализована. Только обычные переменные.
Пока так обходись, глобальными переменными.
вчера ответ не прочитал попробовал, и пять переменных передалось, это я терминологию перепутал или работает случайно и еще глюки будут:
Code: [Select]
...................
FOR($c=1, $c <$n+1)  //перебераю фото в выбраной ранее папке
    IF_PICTURE_IN ($xt0+$a*$shag,$yt0,$xt0+($a+1)*$shag,$yt1, STRCONCAT("protivnik\protivnik_",$b,"_mehs\",$c,".bmp"), -1, 50)      //ищу фото
WAITMS(100)   
    $p[$a]=$b
    print(" НАШЕЛ на экране на ",$a," позиции фото №",$c," из папки ",$b," ) 
ELSE
print(" на экране на ",$a," позиции фото №",$c," из папки ",$b," ,НЕ найдено")     
END_IF
END_CYC
........................
pvpboi($p)
Code: [Select]
SUB (pvpboi,$p)

FOR($a=0, $a < 5)
print($p[$a])
END_CYC
END_SUB // Точка выхода из подпрограммы

вроде все работает все $p[a] выводит
эт корректно или надо писать как то по другому?


и еще вопрос а двухмерный массив тут можно прописать и как?
ну что бы у переменной $p было два индекса $a и $b в справке не нашел если оно там есть укажите где искать

PS вопрос не по теме а как вы код так красиво в форуме оформляете, в моих сообщениях почему то не так смотриться

13
И просто запомни, если в инклюде есть подпрограммы или потоки, его нельзя пихать ни в какие конструкции.
А лучше никогда этого не делать и будет всё OK.
кажется понял, сейчас попробую исправить, спасибо. еще вопрос. в качестве пораметра в подпрограмму массив из скажем 10 переменных можно передать?

14
вопрос не по этой тепе но что бы не плодить темы возможно похожие.
так вот: Возможно ли передать переменную в подпрограмму через другую подпрограмму
подробнее: есть у меня например program1 она в определенный момент вызывает файл program2 и процессе выполнения Программы№2 вызывается program3 которая использует переменную которая задана еще в Программе№1. вот можно такой бред реализовать?все 3 программы в разных файлах
я думал хватит на это такой конструкции:
Code: [Select]
#name "program1"
#include "program2.cms"
DEFINE($x ,0)
DEFINE($y , 0)
print($x,$y)
program2($x,$y)
halt
Code: [Select]
SUB(program2)
#include "program3.cms"
$y=$y+1
print($x,$y)
program3($x,$y)
END_SUB
Code: [Select]
SUB(program3)
$x=$x+1
print($x,$y)
END_SUB
но тест выдал очень интересный результат:
[spoiler]
логи:
14:32:27 01
14:32:27 11
14:32:27 12
14:32:27 22
14:32:27 32
14:32:27 42
14:32:27 52
14:32:27 62
14:32:27 63
14:32:27 73
14:32:27 73
14:32:27 83
14:32:27 93
14:32:27 103
14:32:27 113
14:32:27 123
14:32:27 123
14:32:27 123
14:32:27 123
14:32:27 123

[/spoiler]
я надеялся что он выведет значения 00 потом вызовет программу номер 2 выведет значение 01 далее вызовет 3 программу выведет значения 11 ( или может значения 10 хотел за одно проверить изменения  передадутся или что в DEFINE написал то и будет) и тут должен был найти строку halt в первой программе но получил я то что получил.
а что бы было не скучно он мне выдает :

ошибка при вызове функции POP()
Прерывать выполнение сценария?


а за тем

ошибка при интерпретации строки JMP(POP())
Прерывать выполнение сценария?


собственно это окончательно подорвало мое понимание

кто нибудь подскажите
1)что за бред у меня вышел? откуда рекурсия если end_sub прописывал
2) как надо грамотно передавать переменные через программу из первой в третью
3) эта идея жизнеспособна или так не делают?

PS.подумал почитал исправил объявление имени подпрограммы на вид
Code: [Select]
SUB(program2,$x,$y) ошибки теже, только логов не выдает вообще
начинаю подозревать что так можно передавать только параметры а вот переменные не получается почему то... нужен умный совет

PPS программа с одной подпрограммой вроде работают корректно
Code: [Select]
#name "program1"
#include "program2.cms"
DEFINE($x ,0)
DEFINE($y , 0)
print($x,$y)
program2($x,$y)
halt
Code: [Select]
SUB(program2)
#include "program3.cms"
$y=$y+1
print($x,$y)
program3($x,$y)
END_SUB

15
А с поиском... поздравляю! Ты нашёл баг. Баг проявляется на версиях 4.11 - 4.12, до этих версий всё нормально.
И только с чёрным цветом (не тестил).
Сам почти не применяю прозрачность, а если применял то с перекрашенным ядовито-зелёным аля Хромакей.
Вывод: не используй белый как цвет прозрачности или чистый чёрный как основной. Что там к чему надо тестить. Но проще исправить как было.
спасибо за подсказки и мысли к размышлению, к стати, сейчас кода и логов не сохранилось, может завтра попробую поймать снова но по-моему с чисто черным баг проявляется даже когда на цветном изображении ищешь, тоесть если область экрана содержит разнообразный ресунок но искомая картинка содержит только черный цвет и игнорируемый фон, то он будет везде показывать что результат поиска положительный. эт если я не путаю результат одного из неудачных своих циклов

Pages: [1] 2