Author Topic: Помогите со скриптом  (Read 1487 times)

0 Members and 1 Guest are viewing this topic.

kvv73

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Помогите со скриптом
« on: June 26, 2017, 10:38:19 PM »
В игре существует карта 800х800, с разными картинками,видимая область карты на экране 10х6, прокручивание карты осуществляется стрелками вправо, влево, вверх, вниз. Необходимо найти  определенную картинку и сделать по ней лкм 3раза. Всего надо найти 7 таких картинок.
Спасибо.

kvv73

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: Помогите со скриптом
« Reply #1 on: June 26, 2017, 10:55:37 PM »
Может я не правильно объяснил,
Картинка ищется в видимой области карты, только необходимо автоматически, в скрипте, нажимать стрелку вправо.

Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: Помогите со скриптом
« Reply #2 on: June 27, 2017, 07:48:58 PM »
Вы начинаете в точке 0.0 и надо просто пройти последовательно по всей карте, проверяя после каждого  смещения наличие картинки, а когда картинок найдено 7  - заканчивать поиск. Так?
Ну и сдвиг стрелкой - это с клавиатуры (KEYPRESS(#RIGHT), #LEFT, #UP,  #DOWN )?

 [spoiler=возможный вариант кода]
Code: (clickermann) [Select]
$poisk=0                    //количество найденных картинок
$Par_x=0                     //сдвиг по горизонтали , место
$par_y=0                     //сдвиг по вертикали , ряд
WHILE($poisk < 7)      //если нашли 7 штук - дальше искать не надо
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100) //Ну тут сами разберетесь, если возможно, что картинка в одном месте встретится дважды - значит через SCANPICTURE надо делать
    For($a=0,$a<3) // клик и небольшая задержка, 3 раза
  LCLICK($_return1, $_return2)
waitms(30)
END_CYC
      INT($poisk)      //нашли - прибавили к поиску 1
      print("картинок найдено", $poisk)
   END_IF
   WAITMS(50)
   If ($Par_x<79) //800/10=80 вариантов видимой области в одном ряду, а начали с 0
      If( $par_y/2 = inc($par_y/2)) // для первого и всех нечетных рядов  идем вправо. В целом должно бы сработать, но может не понять, чего хочу.
         KEYPRESS(#right)
      else                           // для остальных влево - в итоге двигаемся змейкой
         KEYPRESS(#left)
      end_if
      INT($Par_x)
   else //дошли до правого (левого) конца экрана, жмем вниз
      print("конец строки, жму вниз")
      KEYPRESS(#down)
      $Par_x=0
      INT($par_y)
   end_if
   WAITMS(500) //задержка для прогрузки следующей видимой области , больше или меньше надо - решайте сами
   If ($par_y>133) // 800/6= 133,3, т.е. тут карта закончилась, останавливаем
      HALT
   end_if
END_CYC
HALT
[/spoiler]
« Last Edit: June 27, 2017, 08:30:36 PM by Qwerry »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите со скриптом
« Reply #3 on: June 28, 2017, 08:29:26 AM »
стр 16
Code: (clickermann) [Select]
If($par_y/2 = INT($par_y/2)стр 11
Code: (clickermann) [Select]
INC($poisk)стр 21
Code: (clickermann) [Select]
INC($Par_x)стр 26
Code: (clickermann) [Select]
INC($par_y)
В игре существует карта 800х800, с разными картинками,видимая область карты на экране 10х6

Так видимая область не вписывается целое число раз 800/6 = 133.(3)
« Last Edit: June 28, 2017, 09:05:27 AM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите со скриптом
« Reply #4 on: June 28, 2017, 09:03:23 AM »
То же самое, но с классической структурой
[spoiler=код]
Code: (clickermann) [Select]
$poisk = 0                     //количество найденных картинок
FOR($par_y=0, $par_y < 134))   // строки. ХЗ, может 133
    IF($par_y/2 = INT($par_y/2))
        $napr = 39
    ELSE
        $napr = 37
    END_IF
    FOR($par_x=0, $par_x < 80) // колонки
        GETSCREEN
        IF_PICTURE_IN(0,0, $_xmax,$_ymax, "file.bmp")
            LCLICK($_return1, $_return2)
            waitms(30)
            INC($poisk)        //нашли - прибавили к поиску 1
            IF($poisk > 6)
                $par_x = 1000
                $par_y = 1000
            END_IF
        END_IF
        KEYPRESS($napr)
        WAITMS(500)
    END_CYC
    KEYPRESS(#down)
    WAITMS(500)
END_CYC
HALT
[/spoiler]

[spoiler=дополнение]Обычно нажатие с краю карты направления "за край" ни к чему плохому не приводят, но если вдруг в этой игре всё не так, то добавляется одно условие
Code: (clickermann) [Select]
        IF($par_x < 79)
            KEYPRESS($napr)
            WAITMS(500)
        END_IF
[/spoiler]
« Last Edit: June 28, 2017, 09:15:13 AM by Vint »