Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Skomopox on June 15, 2014, 04:44:25 PM
-
Привет Всем! Может не точно обозначил тему, но блин, задача у меня ( и для меня) оказалась сложная. Может кто-нибудь накидает идеи.
Необходимо вот что. Я ищу сначала первый, один рисунок из 20 в одном месте на экране. Потом ищу второй один рисунок из 20 в другом месте на экране. А потом, в третьем месте, мне нужно найти через сканпикчур, есть ли второй рисунок (рисунки) (который я уже нашёл во втором месте), и если находит хоть один, мне нужно посмотреть есть ли с ним рядом первый рисунок (который я нашёл в первом месте). Вот такая хитрожопность :) Кто что подскажет буду очень рад. Спасибо :)
П.С. Жалко, что не работает goto с переменными или массивами, а так же в if_picture_in (..., "picture.bmp") нельзя вставить в ковычки вместо пикчур переменную или массив. Поэтому я и не знаю, как сделать мою задачу?! Может в будущем что-либо из этого поменяется, если это вообще возможно :)
-
Привет Всем! Может не точно обозначил тему, но блин, задача у меня ( и для меня) оказалась сложная. Может кто-нибудь накидает идеи.
Необходимо вот что. Я ищу сначала первый, один рисунок из 20 в одном месте на экране. Потом ищу второй один рисунок из 20 в другом месте на экране. А потом, в третьем месте, мне нужно найти через сканпикчур, есть ли второй рисунок (рисунки) (который я уже нашёл во втором месте), и если находит хоть один, мне нужно посмотреть есть ли с ним рядом первый рисунок (который я нашёл в первом месте). Вот такая хитрожопность :) Кто что подскажет буду очень рад. Спасибо :)
а в чем проблема то. алгоритм ты на словах описал. где затык? поиск картинок, флаги. все реализуемо.
П.С. Жалко, что не работает goto с переменными или массивами, а так же в if_picture_in (..., "picture.bmp") нельзя вставить в ковычки вместо пикчур переменную или массив. Поэтому я и не знаю, как сделать мою задачу?! Может в будущем что-либо из этого поменяется, если это вообще возможно :)
почему нельзя задавать имя файла через переменную то? религия не позволяет?
-
Это три в ряд что ли???
Основа для автоматизации игр типа "три в ряд". (http://crapware.aidf.org/forum/index.php?topic=1047.0)
-
а ведь на самом деле жалко, что не работает goto с переменными. тем стало бы больше в X раз.
а зачем нам вообще гоуту?
-
На ГОТО далеко не уедешь...
-
а в чем проблема то. алгоритм ты на словах описал. где затык? поиск картинок, флаги. все реализуемо.
почему нельзя задавать имя файла через переменную то? религия не позволяет?
1) Я не знаю, как задавать через переменную имя файла.
2) Не знаю, что такое флаги.
3) Вот как я вижу, как это можно сделать.
Я ищу первую одну картинку из 20 в первом месте.
if_picture_in(..... , "0.bmp")
...
end_if
if_picture_in(..... , "1.bmp")
...
end_if
...
if_picture_in(..... , "20.bmp")
...
end_if
Потом ищу второй один рисунок из 20 во втором месте.
if_picture_in(..... , "0s.bmp")
...
end_if
if_picture_in(..... , "1s.bmp")
...
end_if
...
if_picture_in(..... , "20s.bmp")
...
end_if
И вот тут. Мне нужно потом найти в третьем месте 2 рисунок (рисунки), который я уже нашёл, и посмотреть, есть ли рядом с ним 1 рисунок, который я уже нашёл.
Т.к. 2ых рисунков может быть не один, я ищу соответственно через сканпикчур. Допустим, второй рисунок у меня был 13s.bmp, а первый 8.bmp
getscreen
scanpicture($var, 314,253,940,280, "13s.bmp")
while (arrsize($var) > 0)
$y = arrpop($var)
$x = arrpop($var)
IF_PICTURE_IN ($x-16,$y,$x,$y+10, "8.bmp")
...
END_IF
end_cyc
скажем, вот такой вариант мне полностью подходит, я так думаю. НО, проблема в том, как мне сделать так, чтобы кликер знал, что он нашёл первый рисунок 8, и что рядом с 13s нужно искать именно 8? Если бы можно было вот сюда
IF_PICTURE_IN ($x-16,$y,$x,$y+10, "8.bmp")
вставить заместо 8 переменную или массив, например вот так
IF_PICTURE_IN ($x-16,$y,$x,$y+10, "$pic.bmp")
то проблема бы была решена! Но в кавычки нельзя вставлять ни переменную, ни массивы. По крайне мере я не знаю как?! Вот так у меня дела.
-
Всё гораздо проще. "Вот сюда" можно вписать переменную (не массив) как тебе и сказали. Просто вписываешь ты её неправильно.
$pic = "13s.bmp" // задаём переменную
IF_PICTURE_IN ($x-16,$y,$x,$y+10, $pic)
...
Переменная и не должна стоять в кавычках. Значение переменной это всё имя файла - строковая переменная уже в кавычках.
Про флаги. Это переменные принимающие значения в зависимости от определённых условий/событий. Например, нашёл - присвоил переменной 1, не нашёл - 0.
В нашем случае лучше присвоить переменной сразу нужное значение.
Вот ты ищешь первую картинку
$pic1 = ""
if_picture_in(..... , "0.bmp")
$pic1 = "0.bmp"
...
end_if
if_picture_in(..... , "1.bmp")
$pic1 = "1.bmp"
...
end_if
...
if_picture_in(..... , "20.bmp")
$pic1 = "20.bmp"
...
end_if
Так же и вторая. Ну ты понял. Эти переменные $pic1, $pic2 используешь при поиске во второй части кода.
...
Можно сделать всё компактнее и проще. Т.к. имена номерные можно перебирать их в цикле.
$pic1 = ""
$pic2 = ""
GETSCREEN
$i = 0
FOR($i,$i<20)
if_picture_in(..... , STRCONCAT($i, ".bmp")) // ищем 1
$pic1 = STRCONCAT($i, ".bmp") // запоминаем имя найденной
$i = 100 // досрочно выходим из цикла для ускорения
end_if
END_CYC
// ищем вторую часть марлезонского балета
$i = 0
FOR($i,$i<20)
if_picture_in(..... , STRCONCAT($i, "s.bmp")) // ищем 2
$pic2 = STRCONCAT($i, "s.bmp")
$i = 100
end_if
END_CYC
// финальный поиск-сравнение
if (($pic1 ! "") & ($pic2 ! "")) // это чтобы небыло ошибки если не нашли 1 или 2
scanpicture($var, 314,253,940,280, $pic2)
while (arrsize($var) > 0)
$y = arrpop($var)
$x = arrpop($var)
IF_PICTURE_IN ($x-16,$y,$x,$y+10, $pic1)
//...
END_IF
end_cyc
end_if
Вот и всё.
Если всё это не на одном экране, добавляем GETSCREEN по вкусу.
И не нужны (ну совершенно!) никакие GOTO, тем более по переменной-метке.
Лучше всё таки подналечь и добавить break/continue для выпрыгивания/продолжения циклов
и return для выпрыгивания из подпрограмм.
Выпрыгиватели желательно многоуровневые типа: ExitLoop (2) выскочить из двух уровней вложенных циклов...
-
Ну кто бы мог подумать! Игорь! Как всегда просто спасает меня!!! У меня просто нет слов благодарности, одни эмоции! Вот голова! И как же я без этого жил?! Спасибо, Игорёк!
Я и понятия не имел, что переменную можно вот так... в кавычках. И да, теперь все просто. Флагами я, естественно, пользуюсь, просто не знал, что это флаги :) И огромное спасибо, за циклы! Я и хотел их делать, если возможна переменная! Но, как ты написал, я ещё не разобрался. Так и не освоил строки. Но обязательно разберусь, т.к. мне это нужно, а главное интересно! Но вот про последнее... все эти уровни... я вообще пока не осведомлен. Да возможно пока и не требуется :)
А так, Спасибо. Вы просто красавцы! :)
-
Последнее это не тебе, это Johnny
-
;D
-
Игорь! Не срабатывает вот это:
scanpicture($var, 314,253,940,280, $pic2)
while (arrsize($var) > 0)
$y = arrpop($var)
$x = arrpop($var)
==========> IF_PICTURE_IN ($x-16,$y,$x,$y+10, $pic1)
//...
END_IF
end_cyc
А именно там, где указывает стрелка (просто нарисовал её, т.к. почему-то нельзя в коде для кликера ни цветом выделять, ни что-либо ещё)! Т.е. суть в чём. Я пробовал по разному. И если нам даже просто убрать иф пикчур, а заместо него поставим, допустим мув:
scanpicture($var, 314,253,940,280, $pic2)
while (arrsize($var) > 0)
$y = arrpop($var)
$x = arrpop($var)
waitms(500)
move($x,$y)
end_cyc
Тут он всё прекрасно находит и двигает мышку по найденным картинкам.
Но как только пытаюсь сделать какие-либо вычисления с $X и $y
scanpicture($var, 314,253,940,280, $pic2)
while (arrsize($var) > 0)
$y = arrpop($var)
$x = arrpop($var)
waitms(500)
==========> move($x-16,$y+10)
end_cyc
то всё, пишет - Ошибка при интерпретации строки, прервать выполнение сценария? Это что-то в кликере или снова я что-то не то делаю? Есть варианты? Спасибо!
-
выведи в лог эти x, y
Попробуй доставать из массива по индексу, а не через arrpop
Помню в альфах arrpop глючил.
scanpicture($var, 314,253,940,280, $pic2)
$ARR_NUM = 0
WHILE ($ARR_NUM < ARRSIZE($var))
$x = $var [$ARR_NUM]
$y = $var [$ARR_NUM+1]
INC($ARR_NUM,2)
IF_PICTURE_IN ($x-16,$y,$x,$y+10, $pic1)
//...
END_IF
END_CYC
UNDEFINE($ARR_SCAN)
-
Скорее всего в 4.10 в массив числа попадают (или достаются арпопом) как строки.
Сделай их числами
$y = INT(arrpop($var))
$x = INT(arrpop($var))
Но это конечно косяк, если так. Не смертельно, но крови попить может.
-
Потестил. Так и есть. В массиве лежат правильно - числа.
arrpop достаёт их как строки.
По индексу таких проблем нет.
-
Ура!!!! Работает через инт! Вот голова! И откуда ты все знаешь? :) Завтра продолжу писать дальше скрипт. Спасибо!