Author Topic: Ребята, помогите разобраться.  (Read 4313 times)

0 Members and 2 Guests are viewing this topic.

AnastasiyDallet

  • Зашел в гости
  • *
  • Posts: 4
  • Всё просто!
    • View Profile
Ребята, помогите разобраться.
« on: August 22, 2015, 04:19:14 PM »
Недавно поставила эту программку, кое что даже написала сама и как ни странно оно работает, но в связи с нехваткой времени и педагогическим образованием, прошу помочь разобраться в следующем:
Я ни как не могу придумать, как реализовать движение персонажа в игре.
Грубо говоря, нужно реализовать функцию определяющую расстояние между игроком и целью, после чего в зависимости от полученных результатов заставить мышку щелкать в нужные ячейки.

GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "объект.bmp", -1, 100)
(здесь нужна функция возвращающая координаты место положения найденного рисунка($_return1, $_return2)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "я.bmp", -1, 100) 
(здесь нужна функция возвращающая координаты место положения найденного рисунка )($_return3, $_return4)
после чего путем не сложных арифметически действий нужно получить значение ($_return1-$_return3)и ($_return2-$_return4)  объяснить этой чертовой машине куда щелкать мышкой, в зависимости от полученного результата)
после долгих одиноких, летних ночей все таки удалось написать следующее, но основной проблемы это не решает(:
Code: (clickermann) [Select]
// New Script
// Author: Anonymous
// Version: 1.0 (06.08.2015)

#name "New Age"
SCREENSHOT

skip = 1:  // ДВИЖЕНЬЕ ВПРАВО
skip = 2:  // ДВИЖЕНЬЕ ВлеВО
skip = 3: // НАЧАЛО
skip = 4:  // нажать победа
skip = 5:   // ЖМЕМ фазы боя
skip = 6:   // закрыть сообщение
skip = 7:  // выход



3:
GETSCREEN

IF_PIXEL_IN(1153,289, 1153,289,255)
GOTO(1)
else
IF_PIXEL_IN(1154,281,1154,281,255)
GOTO(2)
else
IF_PIXEL_IN(753,268,816,342,1793287)
GOTO(4)
else
IF_PIXEL_IN(455,560,455,560,15878)
GOTO(5)
else
IF_PIXEL_IN(932,239,932,239,5395796)
GOTO(6)
else
GOTO(3)

1:
IF_PIXEL_IN(1153,289, 1153,289,255)
MOVE(1154,281)
WAITMS(100)
LCLICK(1154,281)
WAITMS(rnd(100,500) 
MOVE(710,595)
WAITMS(rnd(100,500) 
LCLICK(710,595)
WAIT(rnd(4,6)
MOVE(638,450)
WAITMS(rnd(100,500)
LCLICK(638,450) 
GOTO(3)
End_if
 
2:
IF_PIXEL_IN(1154,281,1154,281,255)
MOVE(1153,289)       
WAITMS(rnd(100,500)
LCLICK(1153,289) 
WAITMS(rnd(100,500) 
MOVE(710,595)
WAITMS(rnd(100,500)   
LCLICK(710,595)
WAIT(rnd(4,6)
MOVE(638,450)
WAITMS(rnd(100,500)
LCLICK(638,450)
GOTO(3)
End_if


4:
IF_PIXEL_IN(753,268,816,342,1793287)
MOVE(705, 476)
WAITMS(rnd(100,500)
LCLICK(705, 476)
WAITMS(rnd(100,500)
MOVE(705, 529)
WAITMS(rnd(100,500)
LCLICK(705, 529)
WAITMS(rnd(100,500)
GOTO(3)
End_if

5:
IF_PIXEL_IN(455,560,455,560,15878)   
MOVE(694, 594)
WAITMS(rnd(100,500)
LCLICK(694, 594)
WAITMS(rnd(100,500)
GOTO(3)
End_if

6:
IF_PIXEL_IN(932,239,932,239,5395796)
MOVE(927,252)
WAITMS(rnd(100,500)
LCLICK(927,252)
WAITMS(rnd(100,500)
GOTO(3)
End_if
« Last Edit: August 23, 2015, 07:38:28 AM by Oraven »

BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Ребята, помогите разобраться.
« Reply #1 on: August 23, 2015, 12:20:58 AM »
Из справки: "Если параметр currency не задан, по умолчанию он равен 100. Если параметр bgcolor не задан, по умолчанию он равен -1. Если есть необходимость задать точность, не задавая фон, сделайте bgcolor равным -1
Входные файлы для анализа должны находиться в директории проекта, быть формта BMP и иметь стандартную разрядность 24 бита. В случае использования цветокоррекции, входной файл должен быть уже откорректирован."

Что сделать: Использовать для файлов  "объект.bmp" и "я.bmp" цветокоррекцию, снизить точность поиска до 70-90%.

P.S. А вообще-то поспешил) Игра браузерная или клиентская? Там могут быть нюансы.
« Last Edit: August 23, 2015, 12:27:51 AM by BubukaBomb »

AnastasiyDallet

  • Зашел в гости
  • *
  • Posts: 4
  • Всё просто!
    • View Profile
Re: Ребята, помогите разобраться.
« Reply #2 on: August 23, 2015, 01:11:43 AM »
Спасибо) Но дело в том, что с идентификацией картинки у меня проблем особых нет. Вопрос в том, как определить расстояние между 2мя объектами и как перевести ($_return1, $_return2) в числовые координаты, с которыми можно производить арифметические действия)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Ребята, помогите разобраться.
« Reply #3 on: August 23, 2015, 07:38:02 AM »
Спасибо) Но дело в том, что с идентификацией картинки у меня проблем особых нет. Вопрос в том, как определить расстояние между 2мя объектами и как перевести ($_return1, $_return2) в числовые координаты, с которыми можно производить арифметические действия)

$_return1, $_return2 это и есть две системные переменные содержащие координаты объекта (его верхнего левого угла)
Полученные данные можно записать в переменные
Code: (clickermann) [Select]
   $x1 = $_return1
   $y1 = $_return2

На счет твоего скрипта, там есть ошибки, отсутствуют завершения END_IF, коменты нужно помечать косыми чертами.
Вот тот же код но без не нужных гото и лишнего.

Code: (clickermann) [Select]
#name "New Age"
//SCREENSHOT

//skip = 1:  // ДВИЖЕНЬЕ ВПРАВО
//skip = 2:  // ДВИЖЕНЬЕ ВлеВО
//skip = 3: // НАЧАЛО
//skip = 4:  // нажать победа
//skip = 5:   // ЖМЕМ фазы боя
//skip = 6:   // закрыть сообщение
//skip = 7:  // выход

GETSCREEN
IF_PIXEL_IN(1153,289, 1153,289,255)
   MOVE(1154,281)
   WAITMS(100)
   LCLICK(1154,281)
   WAITMS(rnd(100,500)
   MOVE(710,595)
   WAITMS(rnd(100,500)
   LCLICK(710,595)
   WAIT(rnd(4,6)
   MOVE(638,450)
   WAITMS(rnd(100,500)
   LCLICK(638,450)
   WAITMS(100)
ELSE
   IF_PIXEL_IN(1154,281,1154,281,255)
      MOVE(1153,289)
      WAITMS(rnd(100,500)
      LCLICK(1153,289)
      WAITMS(rnd(100,500)
      MOVE(710,595)
      WAITMS(rnd(100,500)
      LCLICK(710,595)
      WAIT(rnd(4,6)
      MOVE(638,450)
      WAITMS(rnd(100,500)
      LCLICK(638,450)
      WAITMS(100)
   ELSE
      IF_PIXEL_IN(753,268,816,342,1793287)
         MOVE(705, 476)
         WAITMS(rnd(100,500)
         LCLICK(705, 476)
         WAITMS(rnd(100,500)
         MOVE(705, 529)
         WAITMS(rnd(100,500)
         LCLICK(705, 529)
         WAITMS(rnd(100,500)
      ELSE
         IF_PIXEL_IN(455,560,455,560,15878)
            MOVE(694, 594)
            WAITMS(rnd(100,500)
            LCLICK(694, 594)
            WAITMS(rnd(100,500)
         ELSE
            IF_PIXEL_IN(932,239,932,239,5395796)
               MOVE(927,252)
               WAITMS(rnd(100,500)
               LCLICK(927,252)
               WAITMS(rnd(100,500)
            END_IF
         END_IF
      END_IF
   END_IF
END_IF
WAITMS(50)

Вот код позволяющий определять расстояние между двумя точками и угол
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "объект.bmp", -1, 100)
   $x1 = $_return1
   $y1 = $_return2
END_IF
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "я.bmp", -1, 100)
   $x2 = $_return1
   $y2 = $_return2
END_IF

$q =  ARCcos((-1)*($y2-$y1)/Sqrt(POW(($x2-$x1),2)+POW(($y2-$y1),2)))
IF($x2 < $x1)
   $q =  360 - $q
END_IF
$q = int($q)

$r = DIST($x1,$y1,$x2,$y2)
LOGWRITE ("Расстояние: ", $r)
LOGWRITE ("угол = ", $q, " град.")
HALT
Я не знаю как это тебе поможет  :o
« Last Edit: August 23, 2015, 07:42:52 AM by Oraven »

AnastasiyDallet

  • Зашел в гости
  • *
  • Posts: 4
  • Всё просто!
    • View Profile
Re: Ребята, помогите разобраться.
« Reply #4 on: August 23, 2015, 10:57:57 PM »
Огромное Вам спасибо, Вы гений!) следующую ночь посвящу себя экспериментам)
« Last Edit: August 23, 2015, 11:05:55 PM by AnastasiyDallet »

zanogu

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Ребята, помогите разобраться.
« Reply #5 on: September 01, 2015, 09:11:47 PM »
Привет!

Сорри за оффтоп

Возможно такую тему уже поднимали.

Постоянно стыкаюсь с проблемой подгонов скриптов под разные разширения экранов.
Вопрос в следующем. Возможно cделать GETSCREEN екрана с подгоном в рамки одного розширения? Например 800*600.

С кликами тут пробем не вижу разность разширений можна компенсировать LCLCIK (X+$X, Y+$Y)

Не пинайте меня сильно тольно начинаю

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Ребята, помогите разобраться.
« Reply #6 on: September 02, 2015, 07:43:26 AM »
Всё реально, нужен просто опыт. Определять и брать за точки отсчёта постоянные элементы и все действия производить относительно их. А не кликать по жёстким координатам.
Есть конечно случаи когда привязаться не к чему, но это очень редко.
Понятно, что создание такого скрипта требует гораздо больше усилий и времени. Для универсальности нужно приложить усилия.


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Ребята, помогите разобраться.
« Reply #7 on: September 02, 2015, 10:18:07 AM »
 не так уж всё и сложно. я для таких случаев сразу переношу окно, в котором требуются кокоето действие, в определенные координаты, например (0, 0) или (10, 10). команда WNDPOS (hwnd, x, y). если окно поддается изменению размеров, то и их ставим статичними , команда WNDSETINFO (hwnd, $var1, $var2, $var3, $var4).
 второй вариант посложнее, в основном поможет в браузерных играх. описан в предыдущем сообщении. тут поможет WNDGETINFO (hwnd, $var1, $var2, $var3, $var4). находим положение флеша на экране, и далее работаем относительно этих координат.


добавлю. при переносе окна в статичные координаты, часто бывает косяк со стилем рабочего стола. в разных стилях разная высота шапки и ширина рамки окна. поэтому на всякий случай проверяем WNDGETINFO (hwnd, $var1, $var2, $var3, $var4) ширину и высоту окна. если чтото не так, то корректируем положение окна так, чтобы рабочая зона окна встала на свое место.
« Last Edit: September 02, 2015, 10:27:35 AM by dramster »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Ребята, помогите разобраться.
« Reply #8 on: September 02, 2015, 11:05:07 AM »
... второй вариант посложнее, в основном поможет в браузерных играх. описан в предыдущем сообщении. тут поможет WNDGETINFO (hwnd, $var1, $var2, $var3, $var4). находим положение флеша на экране, и далее работаем относительно этих координат.

Тоже не всегда. Вот игра Зомби Ферма. Раньше во всех СС был один размер окна. Потом переделали. В ВКонтакте окно флеша осталось жёстких размеров но стало больше 1000х730. Во всех других СС оно стало "резиновым" по горизонтали подстраивающимся под размер монитора, точнее браузера. И на разных разрешениях/СС/браузерах оно разное. И если Маил, например, вводит рекламные панели справа окно уменьшается доже настроенное на маил.
И если скрипт обычный - ему хана.
А скрипты были рукописные и на 3000 строк. Писались больше месяца... Слава богу что не жестко.

А там ещё есть полноэкранный режим, где размер =  разрешению и все элементы раздвигаются по краям. А вертикальное положение всплывающих окон тоже центрируется под новый лад.
« Last Edit: September 02, 2015, 11:07:29 AM by Vint »


zanogu

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Ребята, помогите разобраться.
« Reply #9 on: September 06, 2015, 12:11:59 PM »
Еще разок подниу тему
Есть возможность реализовать например GETSCREEN с установкой корекции количество пикселей в сделаном изображениее. В независиомсти от разширения экрана?
Возможно это приведет к универсализации скрипта под любые экраны и т.д.
Википедик говорит что есть прямая зависимость количество пискселей на точку от:
• формата файла
• разшерения экрана,
• пропорции изображения экрана (тоесть 16:9, 4:3)
• размер изображения
• Другие параметры (разрадяность, герцовка и.д.)

Вся эта лабудня играет роль когда картинка уже на экране. Есть возможность перехватить изображение не выводя а просто ифнормацию про изображение которое можна обрабатывать. Понимаю что мы ставим координаты уже на выведеном изображении на экране которые хотим поместить в анализ. Но, может мысли какие то.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Ребята, помогите разобраться.
« Reply #10 on: September 07, 2015, 12:24:03 PM »
Чёт ты не в те дебри полез. Какое количество пикселей на точку? Какие форматы файла?... Всё это не имеет никакого отношения не к поиску вообще не к GETSCREEN в частности.
Для другого разрешения (размера экрана в пикселах) ты можешь только пересчитывать координаты на лету опираясь на начальное разрешение для которого делался скрипт.
Но это прокатит далеко не всегда, даже очень в редких случаях и очень простых.