Author Topic: поиск по изображению  (Read 14927 times)

0 Members and 2 Guests are viewing this topic.

lanser285

  • Освоившийся
  • **
  • Posts: 60
    • View Profile
Re: поиск по изображению
« Reply #15 on: November 14, 2013, 10:35:32 AM »
Анимацию (монстров на локации) убрать нельзя к сожалению (((
Техномагия - www.tmgame.ru

ПыСы Unique Colors Search не помог... (может проблема в моей ОС была (7 х64) , буду пробовать через виртуалки на ХР) у меня по моему скрипту курсор прыгает на какую-нибудь вкладку браузера и тупа тычен на нее, хоть она вообще не входит в мой заданный диапазон !
посмотрел начало игры, анимация там не сильная, подобрать можно изображение. но меня больше интересует как ты бой собираешся прописывать? там же надо камешки переставлять по 3 вряд одного типа, довольно много условий для  кликера получится

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: поиск по изображению
« Reply #16 on: November 14, 2013, 12:32:08 PM »
да нет, задача решаема. через те же массивы и циклы можно искять рядом стоящие элементы. ходы конечно будут не самые умные, но они будут.

но вот боюсь поскольку возник затык еще на стадии анализа графики, до таких нетривильаных алгоритмов дело не дойдет.

rev41k

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: поиск по изображению
« Reply #17 on: November 14, 2013, 01:10:04 PM »
появилась другая идея ... кликер же умеет делать скриншот, или я ошибаюсь!? Как вот сделать, чтобы кликер делал скрин, а по сделанному скрину в буфере он определял где есть совпадения с моей картинкой и кликал в те координаты!?
« Last Edit: November 14, 2013, 01:20:01 PM by rev41k »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: поиск по изображению
« Reply #18 on: November 14, 2013, 02:56:06 PM »
 ;D  :D  ;D  :D  ;D

lanser285

  • Освоившийся
  • **
  • Posts: 60
    • View Profile
Re: поиск по изображению
« Reply #19 on: November 14, 2013, 05:06:30 PM »
появилась другая идея ... кликер же умеет делать скриншот, или я ошибаюсь!? Как вот сделать, чтобы кликер делал скрин, а по сделанному скрину в буфере он определял где есть совпадения с моей картинкой и кликал в те координаты!?
оммммм.....такой вопрос...если он не находит моба по сделанному скрину вручную, то почему ты решил что он найдет моба по скрину сделанному програмно?

вот скрипт находит первого моба, меньше чем за минуту, будь внимателен просто, даже на анимированых картинках есть практически неизменные места
« Last Edit: November 14, 2013, 05:22:07 PM by lanser285 »

lanser285

  • Освоившийся
  • **
  • Posts: 60
    • View Profile
Re: поиск по изображению
« Reply #20 on: November 14, 2013, 05:22:38 PM »
 :)

rev41k

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: поиск по изображению
« Reply #21 on: November 14, 2013, 07:12:03 PM »
я просто подумал что если делать скрин програмно , а потом со сделанного скрина вырезать картинку или найти пиксель уникальный. или кликер меняет качество картинки!? И кстати нашел пиксель под свой скрипт через программульку - FastStone Capture, у нее видимо очень хорошее качество скринов.
Кстати мой скрипт заработал на Windows XP SP-3 x86 (который на Windows 7 x64 не хотел работать).
Вопрос теперь появился, как сделать так чтобы кликер сначала кликал на пиксели которые ближе к центру экрана ( или еще лучше было бы ближе к заданному пикселю по координатам).
Всем спасибо за помощь!!!  ;)
2 lanser285 спасибо за скрипт сейчас попробую.
« Last Edit: November 14, 2013, 07:14:23 PM by rev41k »

rev41k

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: поиск по изображению
« Reply #22 on: November 14, 2013, 11:32:14 PM »
помучился немного и все же что-то получилось... только столкнулся с еще одно проблемкой:

sub(skill)      
   getscreen
if_picture_in (297,46,1073,327,"time.bmp", -1, 30)
//if_picture_in (297,46,1073,327,"sokrush.bmp", -1, 30)
wait(1)
lclick($return1, $_return2)   
   print("Удар")
gosub(skill)
          end_if
          //end_if
          else
if_picture_in (297,46,1073,327,"time_a.bmp", -1, 30)
end_if
   gosub(skill)
          end_sub
         else
   print("Бой выйгран" )
            gosub(s1)

Вообщем вот здесь:
if_picture_in (297,46,1073,327,"time.bmp", -1, 30)
//if_picture_in (297,46,1073,327,"sokrush.bmp", -1, 30)
 мне нужно сканить экран на наличие 2-х картинок, и если они обе определенны , тогда кликнуть по второму.

Вопрос теперь появился, как сделать так чтобы кликер сначала кликал на пиксели которые ближе к центру экрана ( или еще лучше было бы ближе к заданному пикселю по координатам).

И этот вопрос тоже интересует...

Хоть маленькую подсказачку, ПОЖАЛУЙСТА!
« Last Edit: November 14, 2013, 11:36:17 PM by rev41k »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: поиск по изображению
« Reply #23 on: November 15, 2013, 12:24:30 AM »
помоему ты СУБпрограмму с ГОТО перепутал

rev41k

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: поиск по изображению
« Reply #24 on: November 15, 2013, 02:26:30 AM »
помоему ты СУБпрограмму с ГОТО перепутал

уже разобрался ... Осталось только поиск по радиусу((

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: поиск по изображению
« Reply #25 on: November 15, 2013, 08:10:58 AM »
помоему ты СУБпрограмму с ГОТО перепутал
Ага. А end_sub с чем тогда перепутал?  :)

Ещё $return1 с $_return1.
И ELSE вообще самостоятельная и универсальная команда которую можно писать где хочешь.  :)
Прекрасный компот получился. Вкупе с совпадением 30%, который будет срабатывать на всё что видит.


rev41k

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: поиск по изображению
« Reply #26 on: November 15, 2013, 09:21:14 AM »
// New Script
// Author: Anonymous
// Version: 1.0 (29.10.2013)

#name "test_poisk"

//--------------------------------

sub(s1)
GETSCREEN
print("поиск")
IF_PIXEL_IN (590,200,776,339,66050)
   print("íàøåë")
   move($_return1+3, $_return2+3)
   waitms(20)
   lclick($_return1, $_return2+7)
   
      gosub(skill)
     
      else
      print("не нашел")
   gosub(s2)
   end_if
   end_sub

sub(s2)
GETSCREEN
print("поиск")
IF_PIXEL_IN (564,163,820,387, 66050)
   print("íàøåë")
   move($_return1+3, $_return2+3)
       waitms(20)
    lclick($_return1, $_return2+20)   
   
gosub(skill)

   else
   print("не нашел")
      gosub(s3)
end_if
end_sub


sub(s3)
GETSCREEN
print("поиск")
IF_PIXEL_IN (297,106,1073,430, 66050)
   print("íàøåë")
   move($_return1+3, $_return2+3)
   waitms(20)
    lclick($_return1, $_return2+20)
   
gosub(skill)


end_if
end_sub
else
print("не нашел")
gosub(skill)
//-------------------------------------------------------------------------------

//-------------------------------------------------------------------------
sub(skill)
      
   getscreen
if_picture_in (297,46,1073,327,"time.bmp", -1, 30)
scanpicture ($skil, 297,46,1073,327,"sokrush.bmp", -1, 30)
print("мой ход")
WAITMS(10)
LCLICK($skil[0], $skil[1])
gosub(skill)
else
gosub(skill2)
end_if
end_sub
                                          
sub(skill2)                  
   if_picture_in (297,46,1073,327,"time_a.bmp", -1, 30)
                     print("Ход противника")
                     gosub(skill)
                     else
                     PRINT("Бой выйгран")
   IF_PICTURE_IN (297,106,1073,430,"WIN.BMP")
   DBLCLICK($_RETURN1, $_RETURN2+210)
                     gosub(s1)
                     end_if
                     end_sub


Так-то вот полный. Персонаж бегает по локе и налетает на мобов, затем при условии , если мой ход и есть камни на магию определенную , то бьет. После победы жмет кнопку ОК и повторяет поиск мобов.

Ребята помогите с поиском по близжайшей точке, пожалуйстааааа !!!

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: поиск по изображению
« Reply #27 on: November 15, 2013, 12:13:00 PM »
Ребята помогите с поиском по ближайшей точке, пожалуйстааааа !!!

Code: (clickermann) [Select]
// вычисляем центр или задаём точку до которой меряем
$Xcentr = INT($_xmax/2)
$ycentr = INT($_ymax/2)

GETSCREEN
SCANPICTURE($ARR_SCAN, 0, 0, $_xmax, $_ymax, "picture.bmp")

$dist = 10000
WHILE (ARRSIZE($ARR_SCAN) > 0)
$Y = ARRPOP($ARR_SCAN)
$X = ARRPOP($ARR_SCAN)
$d_temp = DIST($Xcentr, $ycentr, $X, $Y)
IF($d_temp < $dist)
$dist = $d_temp
$X_centr = $X
$Y_centr = $Y
END_IF
END_CYC
UNDEFINE($ARR_SCAN)

IF($dist ! 10000)
   LOGWRITE ("Ближайшие к центру координаты X: ", $X_centr, " Y: ", $Y_centr)
   LCLICK($X_centr,$Y_centr)
ELSE
   LOGWRITE ("Картинка не найдена")
END_IF


Так-то вот полный. Персонаж бегает по локе и налетает на мобов, затем при условии , если мой ход и есть камни на магию определенную , то бьет. После победы жмет кнопку ОК и повторяет поиск мобов.
По поводу остального...


Ты хоть запускал? Работает?
Знаешь, что такое рекурсия?



rev41k

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: поиск по изображению
« Reply #28 on: November 15, 2013, 01:16:44 PM »
Запускал, работает! я мой код, что выше указал немного откорректировал , end_if и end_sub поменял местами , поставил их до else а не после...
СПАСИБО ОГРОМНОЕ за код по поиску, буду мучаться дальше )
По поводу рекурсии... я не силен в программировании , но я пологаю, что это то , что я использовал SUB() и GOSUB().

rev41k

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: поиск по изображению
« Reply #29 on: November 15, 2013, 01:44:04 PM »
Vint , прости за надоедливость... твой код работает Божественно ) НО!
Пожалуйста напиши как сделать так, чтобы поиск происходил по твоему коду поиска , что ты предоставил и чтобы когда находил картинку(любую первую) больше не искал , а переходил к моему SUB(SKILL). Т.е. должно получиться следующем образом:
1.поиск картинки( моба на локации)
2.После чего кликер нашел клкает по мобу и переходит к подпрограмме SUB(SKILL). Я имею ввиду , вот стоит моб на локе , кликер кликает по нему , прекращает поиск мобов пока не добежит до него, и не войдет в бой (через WAIT не удобно т.к. расстояние до мобов разное). Там уже идет поиск картинок для боя, он у меня крепиться по 2-м картинкам, если они не найдены значит бой завершен и персонаж снова на локации должен искать близжайшего моба.

Вот как-то так)
Извините за наглость...