По просьбе автора темы, выкидываю скрипты по данной игре на общее обозрение. Авось кто еще захочет позабавиться
.
[spoiler]скорее всего он просил скрипт только для себя
, но это было бы както не честно.[/spoiler]
как оказалось, алгоритм описанный мной выше, не стабилен. скорее всего проблема на моей стороне. почемуто после 80-го уровня заметно уменьшился фпс в игре, и палка стала спотыкаться вместо того, чтобы скользить по кругу. немного сменил тактику. выкидываю и первую и вторую версию.
вариант первый, как оказалось, работает нестабильно при малом фпс:
#name "Pop the Lock v1"
//область в которую помещается вся окружность, по которой бегает шарик.
$x1 = 2188
$y1 = 1044
$x2 = 2574
$y2 = 1409
//радиус желтого шарика, зависит от масштаба эмулятора, желательно поточнее
$rad = 17
//координаты крестика закрытия рекламы
$x_spam = 2682
$y_spam = 681
//------------------------------------------------------------------------------
$time = $_time_t
$check = 0
WHILE($check = 0) //ждем пока не появится желтый шарик
GETSCREEN($x1,$y1,$x2,$y2)
IF_PIXEL_IN($x1,$y1,$x2,$y2, 4180716) //сканируем область с окружностью на предмет желтого пикселя
$x = $_return1 //если нашли
$y = $_return2+$rad //записываем координаты найденного пикселя в переменные, где к переменной У добавляем радиус шарика
WAITMS(5) //немного ожидаем, без задержки возможны ошибки
GETSCREEN($x,$y,$x,$y) //снова делаем скрин
$clr = pxl($x,$y) //и записываем в переменную цвет центра шарика
$check = 1 //и выходим из цикла
ELSE //если не нашли
WAITMS(5) //то небольшая задержка и возврат к сканированию
IF($_time_t-$time > 5) //если в течении пяти сек нет желтого
MOVE($x_spam,$y_spam) //значит реклама, закрываем ее
LCLICK($x_spam,$y_spam)
WAITMS(350)
END_IF
END_IF
END_CYC
$time = $_time_t
GETSCREEN($x,$y,$x,$y)
WHILE((pxl($x,$y) = $clr ) & ($_time_t-$time < 3)) //цикл ожидания изменения цвета центра шарика, с таймаутом в 3 сек (если начало уровня - игра в паузе
WAITMS(5)
GETSCREEN($x,$y,$x,$y)
END_CYC
MOVE($x,$y) //как только цвет изменился - клик по шарику. почему по шарику? можно и в любые статичные координаты, просто при отладке так проще было
LCLICK($x,$y)
WAITMS(150) //небольшое ожидание, и в начало
вариант второй. работает как часики. при любом масштабе эмулятора и любом фпс.
#name "Pop the Lock v2"
//область в которую помещается вся окружность, по которой бегает шарик.
$x1 = 2188
$y1 = 1044
$x2 = 2574
$y2 = 1409
//радиус желтого шарика, зависит от масштаба эмулятора, желательно поточнее
$rad = 17
//координаты крестика закрытия рекламы
$x_spam = 2682
$y_spam = 681
//------------------------------------------------------------------------------
$time = $_time_t
$check = 0
WHILE($check = 0) //ждем пока не появится желтый шарик
GETSCREEN($x1,$y1,$x2,$y2)
IF_PIXEL_IN($x1,$y1,$x2,$y2, 4180716) //сканируем область с окружностью на предмет желтого пикселя
$x = $_return1 //если нашли
$y = $_return2+$rad //записываем координаты найденного пикселя в переменные, где к переменной У добавляем радиус шарика
$check = 1 //и выходим из цикла
ELSE //если не нашли
WAITMS(5) //то небольшая задержка и возврат к сканированию
IF($_time_t-$time > 5) //если в течении пяти сек нет желтого
MOVE($x_spam,$y_spam) //значит реклама, закрываем ее
LCLICK($x_spam,$y_spam)
$time = $_time_t
WAITMS(350)
END_IF
END_IF
END_CYC
$time = $_time_t
$check = 0
WHILE($check = 0) //цикл ожидания появления красной палки в области желтого шарика
GETSCREEN($x-$rad,$y-$rad,$x+$rad,$y+$rad)
IF_PIXEL_IN($x-$rad,$y-$rad,$x+$rad,$y+$rad, 6040551) //сканируем весь желтый шарик на предмет красного пикселя
MOVE($x,$y) //как только нашли
LCLICK($x,$y) //клик по нему
WAITMS(150)
$check = 1 //и выход из цикла
ELSE //если красного пикселя нет
WAITMS(5) //то немного ждем, и возврат к сканированию
IF($_time_t-$time > 3) //если в течении трех сек нет красного
MOVE($x,$y) //то просто клик, значит начало уровня
LCLICK($x,$y)
WAITMS(350)
$check = 1 //и выход из цикла, вдруг всетаки ошибка, нужно заново искать координаты шарика
END_IF
END_IF
END_CYC
конечно все настраиваемые переменные скорее всего можно было высчитать основываясь на размер и положение эмулятора. если кто захочет, пусть считает
. както лень напрягать мозг.