Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Hito on May 27, 2018, 11:20:48 PM
-
Что-то типа:
$a="ups"
STRCONCAT("$",$a)=1
Понимаю что пример не правильный, так как в результате я пытаюсь СТРОКЕ - "$ups", а не переменной, присвоить значение - 1, но мне надо, чтобы получилась переменная - $ups=1
-
Для этого придуманы массивы.
-
Для этого придуманы массивы.
На ка - попробуй вот так запустить скрипт с массивом:
$a="ups"
$b[$a]=1
Или как ты предлагаешь? Пример можно?
Мне это нужно для этой части скрипта:
SUB(PICTURE, $picture, $currency)
IF(STRCONCAT("$",$picture) > 0) // Попадала эта картинка в эту подпрограмму, или нет.
// Если да, тогда один вариант поиска картинки
else
// А если нет, тогда второй вариант поиска картинки
// И отмечаем, что мы ее уже искали вторым вариантом поиска
STRCONCAT("$",$picture)=1
END_IF
END_SUB
Вот как это можно реализовать?
-
У тебя неправильное понимание что нужно делать. Массивы то правильно, но ты их пытаешься применить по старому как задумал.
В кликере нет ассоциативных массивов (или словарей), ты же хочешь словарь? Ну так предложили использовать другие методы, хоть и менее удобные.
Возьму грех на душу и дам то, что не люблю. То, что ввели с 12 версии
DEFINE($ups, 0)
SETVAR("$ups", 1)
LOGWRITE($ups)
Это недокоманда, совершенно не нужная. Потому как присваивать значения ты можешь, но есть нюанс... переменная уже должна существовать.
Т.е. на лету генерировать сотни переменных с нужными именами не выйдет, их всё равно нужно прописывать в коде.
Правильней и практичней для данного примера заменить имя в $picture числом (другие тоже числами). И создать простой массив. $picture будет индексом массива.
-
переменная уже должна существовать.
Это-то как раз и не подходит...
Правильней и практичней для данного примера заменить имя в $picture числом (другие тоже числами). И создать простой массив. $picture будет индексом массива.
Я об этом уже думал, но не долго, так как с числами я просто заморочусь... У меня сотня картинок (пока сотня... список пополняется по мере написания скрипта) и каждую картинку по числу понимать - что это за картинка... Я скончаюсь... :)
Чтобы было понятно... Когда скрипт ищет картинку впервые, то он ищет ее по всему экрану и находя, записывает ее координаты в ини, а если ищет ее повторно, то считывает координаты этой картинки из ини и ищет ее по точным координатам. Это для ускорения работы скрипта.
-
Для более полного понимания ситуэйшен, вот более полная подпрограмма:
SUB(PICTURE, $picture, $currency)
IF(STRCONCAT("$",$picture) > 0) // Попадала эта картинка в эту подпрограмму, или нет.
$x1=INIREAD ("picture.ini", "x1", $picture)
$y1=INIREAD ("picture.ini", "y1", $picture)
$x2=INIREAD ("picture.ini", "x2", $picture)
$y2=INIREAD ("picture.ini", "y2", $picture)
IF_PICTURE_IN ($x1,$y1, $x2,$y2, STRCONCAT("skrini\",$picture,".bmp"), -1, $currency)
LOGWRITE (STRCONCAT("PICTURE: ",$picture," Найдена!"))
$pic=1
else
LOGWRITE (STRCONCAT("PICTURE: ",$picture," Не найдена..."))
$pic=0
END_IF
else
IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT("skrini\",$picture,".bmp"), -1, $currency)
LOGWRITE (STRCONCAT("PICTURE: ",$picture," Найдена!"))
STRCONCAT("$",$picture)=1
INIWRITE ("picture.ini", "x1", $_return1, $picture)
INIWRITE ("picture.ini", "y1", $_return2, $picture)
INIWRITE ("picture.ini", "x2", ($_return1+INIREAD ("picture.ini", "shirina", $picture)), $picture)
INIWRITE ("picture.ini", "y2", ($_return2+INIREAD ("picture.ini", "visota", $picture)), $picture)
$pic=1
else
LOGWRITE (STRCONCAT("PICTURE: ",$picture," Не найдена..."))
$pic=0
END_IF
END_IF
END_SUB
GETSCREEN
COLORMODE(6)
PICTURE ("Типа картинка", 100)
IF($pic>0)
else
END_IF
-
переменная уже должна существовать.
Видимо придется создавать переменные с именами всех картинок...
-
Это-то как раз и не подходит...
Как я и думал.
Я об этом уже думал, но не долго, так как с числами я просто заморочусь... У меня сотня картинок (пока сотня... список пополняется по мере написания скрипта) и каждую картинку по числу понимать - что это за картинка... Я скончаюсь... :)
Сотня не так уж страшно, чисел на много хватит :);D
Тогда сам собой напрашивается способ комбинированного имени число+строка
Например:
100_ups.bmp
101_flip.bmp
...
так не запутаешься, кроме номера видно человеческое имя.
Вот заводишь массив где будешь учитывать свои поиски $find длиной в количество картинок.
В ПП получаешь своё имя $picture и используешь его как обычно.
Вырезаешь первые 3 символа, переводишь в число, вот тебе и индекс этой картинки в массиве.
$picture = "100_ups.bmp"
$ind = INT(STRCUT($picture, 1, 3))
IF($find[$ind] > 0)
...
...
$find[$ind] = 1
и т.д.
-
Тогда сам собой напрашивается способ комбинированного имени число+строка
Например:
100_ups.bmp
101_flip.bmp
...
так не запутаешься, кроме номера видно человеческое имя.
Вот заводишь массив где будешь учитывать свои поиски $find длиной в количество картинок.
В ПП получаешь своё имя $picture и используешь его как обычно.
Вырезаешь первые 3 символа, переводишь в число, вот тебе и индекс этой картинки в массиве.
$picture = "100_ups.bmp"
$ind = INT(STRCUT($picture, 1, 3))
IF($find[$ind] > 0)
...
...
$find[$ind] = 1
и т.д.
Что-то ты такое наваял умное... В чем моими слипшимися мозгами еще разбираться нуна.
Буду разбираться... :)
-
Видимо придется создавать переменные с именами всех картинок...
С этим ничего не получится...
DEFINE($ups, 0)
SETVAR(STRCONCAT("$","ups"), 1)
IF(STRCONCAT($,"ups") = 0)
LOGWRITE($ups)
END_IF
IF-то как реализовать...?
В общем отпадает, как я понимаю. Буду разбираться в:
$picture = "100_ups.bmp"
$ind = INT(STRCUT($picture, 1, 3))
IF($find[$ind] > 0)
...
...
$find[$ind] = 1
и т.д.
Аааа...! $ind = INT(STRCUT($picture, 1, 3)) - тут ты $ind передаешь первые три символа (число) в названии картинки...
-
В чем проблема, ребят?
https://yadi.sk/i/Omxn9d3o3WcVYM (https://yadi.sk/i/Omxn9d3o3WcVYM)
Скрипт:
SUB(PICTURE, $picture, $currency)
$ind = INT(STRCUT($picture, 1, 3))
LOGWRITE ($ind)
LOGWRITE ($find[$ind])
IF($find[$ind] > 0)
$x1=INIREAD ("picture.ini", "x1", $picture)
$y1=INIREAD ("picture.ini", "y1", $picture)
$x2=INIREAD ("picture.ini", "x2", $picture)
$y2=INIREAD ("picture.ini", "y2", $picture)
IF_PICTURE_IN ($x1,$y1, $x2,$y2, STRCONCAT("skrini\",$picture,".bmp"), -1, $currency)
$pic=1
else
$pic=0
END_IF
else
IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT("skrini\",$picture,".bmp"), -1, $currency)
$find[$ind] = 1
INIWRITE ("picture.ini", "x1", $_return1, $picture)
INIWRITE ("picture.ini", "y1", $_return2, $picture)
INIWRITE ("picture.ini", "x2", ($_return1+INIREAD ("picture.ini", "shirina", $picture)), $picture)
INIWRITE ("picture.ini", "y2", ($_return2+INIREAD ("picture.ini", "visota", $picture)), $picture)
$pic=1
else
$pic=0
END_IF
END_IF
END_SUB
$panel_check = 0
WHILE($panel_check = 0)
GETSCREEN
COLORMODE(6)
PICTURE ("100_karta", 100)
IF($pic=1)
LOGWRITE ("Карту нашли. Ищем подземелье опыта")
PICTURE ("107_podzemelye_opita_p", 100)
IF($pic=1)
$panel_check = 1
else
WAITMS(50)
END_IF
else
WAITMS(50)
END_IF
END_CYC
HALT
Искомые скрины:
https://yadi.sk/i/FWRLpZdM3WcVuW (https://yadi.sk/i/FWRLpZdM3WcVuW)
https://yadi.sk/i/jF8K6HWo3WcVx3 (https://yadi.sk/i/jF8K6HWo3WcVx3)
Если кто тестить будет, можно искать прям на первом скрине. Там область поиска красными кругами не затронута.
Затык во втором проходе, в подпрограмме - где-то между LOGWRITE ($ind) и LOGWRITE ($find[$ind])
То есть - во втором заходе $find[$ind] уже не создается, или ей значение не присваивается.
-
Так ты не создал массив $find
...$find длиной в количество картинок.
и не заполнил нулями. Сравниваешь мусор из неопределённого массива
В начале скрипта заполни массив
FOR($i=0, $i < 10) // индексы в твоих картинках 0...9
$find[$i] = 0
END_CYC
И 100 я для примера привёл, начинай с 000, 001, 002... Ну можешь и со 100, для удобства, только первые 100 элементов будут не используемые.
-
Так ты не создал массив $find
Спасибо!
-
Можно сравнивать картинки с конкретной папки внутри for цикла...имена картинок типовой типа картинка1, картинка2...на совпадении i будет индексом...минус не слишком то быстро может это работать...плюс массив вообще не нужен