00:19 Полезные скрипты для Clickermann - поиск картинки из нескольких возможных. |
Рассмотрим полезные коды для Clickermann, которые постоянно применяются в построении ботов-автокликеров. Первый необходимый код поиска картинки или пикселя на экране: GETSCREEN if_picture_in(0,0,$_xmax,$_ymax,"img.bmp")// если картинка img.bmp есть MOVE($_return1+5,$_return2+5) // перемещаемся на картинку WAIT(1) // пауза 1с LCLICK($_return1+5,$_return2+5) // лкм на картинке END_IF По сути, этот код можно ассоциировать с любым шутером , где нам нужно навести прицел на противника и левым кликом мышки произвести выстрел. Если мы играем в двух мерную игру , где соперники не изменяют свой размер при приближении – эти простые строки будут отлично справляться. Теперь представим ,что в игре на нас надают несколько монстров (соперников) разного вида. Ранее приведенный код можно переписать несколько раз подряд для поиска нескольких изображений: GETSCREEN if_picture_in(0,0,$_xmax,$_ymax,"img1.bmp")// если картинка img.bmp есть MOVE($_return1+5,$_return2+5) // перемещаемся на картинку WAITMC(10) // пауза 10mс LCLICK($_return1+5,$_return2+5) // лкм на картинке END_IF GETSCREEN if_picture_in(0,0,$_xmax,$_ymax,"img2.bmp")// если картинка img.bmp есть MOVE($_return1+5,$_return2+5) // перемещаемся на картинку WAITMC(10) // пауза 10mс LCLICK($_return1+5,$_return2+5) // лкм на картинке END_IF GETSCREEN if_picture_in(0,0,$_xmax,$_ymax,"img3.bmp")// если картинка img.bmp есть MOVE($_return1+5,$_return2+5) // перемещаемся на картинку WAITMC(10) // пауза 10mс LCLICK($_return1+5,$_return2+5) // лкм на картинке END_IF Код будет работать, но все ( включая пионеров и пенсионеров) кто мало- мальски знаком с азами программирования будут крутить носом увидев такую запись, поэтому предлагаю записать тоже самое «по взрослому», используя цикл for (для): // создаем список и передаём в него изображения $img[0]=”img1.bmp” $img[1]=”img2.bmp” $img[2]=”img3.bmp” for($i=0,$i<3)// для переменной i=0 пока i<3 if_picture_in(0,0,$_xmax,$_ymax,$img[i])// если картинка из списка есть MOVE($_return1+5,$_return2+5) WAITMS(10) LCLICK($_return1+5,$_return2+5) END_IF// конец условия если END_CYC// конец цикла для Первое что мы делаем создаем список и элементам списка присваиваем ссылки на изображения противников. Затем с помощью цикла for проверяем присутствие на экране каждого изображения противника (если есть – перемещение и клик на нем) И обязательно заканчиваем условие if и цикл for. Данный код удобен и для поиска одного или нескольких изображений кнопок или информационных окон в браузере. Теперь немного простого анализа как изменятся изображения соперников в трех мерных играх. Противники по мере приближения должны увеличиваться в размере, динамика в играх достаточно высокая, плюс ко всему прочему обычно изображение соперника перекрывают текстуры деревьев, строений и т.п., задача усложняется… Мои советы по решению подобных задач: 1.Если возможно, то находим уникальный цвет принадлежащий нашему противнику и ищем не картинку, а пиксель с заданным цветом. 2.Для того чтоб сопоставить динамику игры и нашего бота поиск надо вести в небольшой области, предлагаю выделить некоторую горизонтальную область.
GETSCREEN if_pixel_in(0,INT(0+$_ymax/4), $_xmax,INT($_ymax/2),4373494) MOVE($_return1+5,$_return2+5) WAITMS(50) LCLICK($_return1+5,$_return2+5) END_IF
3. Если не удается выделить уникальный цвет, можно для каждого противника определить маленькое изображение(картинку), причем сделать их несколько для разного удаления от нас и производить поиск по соответствующей области удаления. В случае трех противников –имеем три картинки на трех участках удаления для каждого и без подпрограммы код будет очень громоздким, поэтому будем передавать в подпрограмму необходимые данные: Создаем три списка (каждый список соответствует определенной дистанции) и вводим изображения каждого противника: $fut1[0]=”vrag1_1.bmp”//список дистанции 1 –враг1 $fut1[1]=”vrag2_1.bmp” //список дистанции 1 –враг2 $fut1[2]=”vrag3_1.bmp” $fut2[0]=”vrag1_2.bmp” //список дистанции 2 –враг1 $fut2[1]=”vrag2_2.bmp” $fut2[2]=”vrag3_2.bmp” $fut3[0]=”vrag1_3.bmp”// список дистанции 3 –враг1
$fut3[1]=”vrag2_3.bmp” $fut1[0]=”vrag3_3.bmp”
SUB(poisk, x1,$y1,$x2,$y2,$img) // подпрограмма поиска и клика for($i=0,$i<3)// для переменной i=0 пока i<3 if_picture_in($x1,$y1,$x2,$y2,$img[i])// если картинка из списка есть MOVE($_return1+5,$_return2+5) WAITMS(10) LCLICK($_return1+5,$_return2+5) END_IF// конец условия если END_CYC// конец цикла для poisk(0,100,$_xmax,200,$fut1) //вызов поиска в заданных координатах списка poisk(0,200,$_xmax,300,$fut2) poisk(0,300,$_xmax,400,$fut3) |
|
Всего комментариев: 2 | |
| |