Author Topic: масив  (Read 1377 times)

0 Members and 1 Guest are viewing this topic.

Зануда

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
масив
« on: July 12, 2017, 10:29:43 PM »
не могу понять с этими циклами массивами :'( а через условия много писать и редактировать не удобно :-\
Code: (clickermann) [Select]
STRSEPARATE("св1,ОГ,СВ,ОГВ",",",$pzlo)
STRSEPARATE("19лвл,18лвл,17лвл,16лвл",",",$lvl)
//....
SUB(лвл)
   go:
   FOR($zlo=0,$zlo<ARRSIZE($pzlo))
      GETSCREEN  ($xx-34,$yy+372,$xx+132,$yy+546)
      COLORMODE(7, $xx-34,$yy+372,$xx+132,$yy+546)
      IF_PICTURE_IN($xx-34,$yy+372,$xx+132,$yy+546,STRCONCAT($pzlo[$zlo],".bmp"),-1,90)   //проверяем не нашлась ли любая картинка из всего списка  (pzlo)    если нашлась любая из списка нападаем выходим из цикла
         ///
         LOGWRITE ("моб подошел")
         m_move($_return1+RND(-10,10), $_return2+RND(-10,10))
         LCLICK($_xmouse,$_ymouse)
         $tim1234 = $_time_t + 10
         WHILE($tim1234 > $_time_t)
            GETSCREEN ($xx+331,$yy+260, $xx+464,$yy+391) //(750,360, 883,491)
            IF_PICTURE_IN ($xx+331,$yy+260, $xx+464,$yy+391, "напасть.bmp", -1, 70)
               $tim1234 = 0
               INC($_zlo,1)
               
               m_move($_return1+RND(-10,10), $_return2+RND(-2,2))
               LCLICK($_xmouse,$_ymouse)
               WAITMS(rnd(3000,5000))
               $hod_1=1
               
               goto(hod)
            ELSE
               WAITMS(500)
            END_IF
         END_CYC
         ///
         $zlo=99
      ELSE
         WAITMS(50)
      END_IF
   END_CYC
   
   IF($zlo<99)  //    если не нашлась ни одна из списка (pzlo)   проверяем другой список (lvl)
      //
      //SCREENSHOTEX($xx-34,$yy+372,$xx+132,$yy+546, "Image_", 0)
      FOR($l_vl=0,$l_vl<ARRSIZE($lvl))
         GETSCREEN ($xx-13,$yy+50, $xx+6,$yy+74)
         IF_PICTURE_IN($xx-13,$yy+50, $xx+6,$yy+74,STRCONCAT($lvl[$l_vl],".bmp"),-1,90) //проверяем другой список  если есть любая из этого списка выполняем и выходим из цыкла
            //
            LOGWRITE ("есть нужная")
           
            GETSCREEN ($xx-18,$yy+531, $xx+106,$yy+563)
            IF_PICTURE_IN ($xx-18,$yy+531, $xx+106,$yy+563, "таймер.bmp", -1, 80)
               LOGWRITE ("таймер")
               
               m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
               LCLICK($_xmouse,$_ymouse)
               WAITMS(rnd(1700,1900))
               WAITMS(10)
            ELSE
           
               
               прогон()
               
            END_IF
            //
            $l_vl=999
         ELSE
            WAITMS(50)
         END_IF
         
      END_CYC
     
      IF($l_vl<999)        //если не нашлось и из этого списка (lvl) картинки делаем клик и возвращаемся в начало  к проверке картинок из списка(pzlo)
         
         LOGWRITE ("лвл не подошел")
         
         m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
         LCLICK($_xmouse,$_ymouse)
         WAITMS(rnd(1700,1900))
         goto(go)
         
      END_IF
   END_IF
END_SUB
//....

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: масив
« Reply #1 on: July 12, 2017, 10:51:36 PM »
А вопрос какой? Провести работу над ошибками?
Самый страшный и непростительный косяк в строке 26. Прыжок из цикла находящегося в цикле находящегося в подпрограмме. Расстрел 8)

Зануда

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: масив
« Reply #2 on: July 12, 2017, 10:57:01 PM »
А вопрос какой? Провести работу над ошибками?
Самый страшный и непростительный косяк в строке 26. Прыжок из цикла находящегося в цикле находящегося в подпрограмме. Расстрел 8)
а как по другому если мне именно так нужно да и не доходит дело до этого он тупо пишет что не найдено картинки ни из первого списка не из второго хотя если отдельно взять эти же картинки и через обычный поиск картинки проверить оно их находит
а вопрос в том как правильно сделать что было типа ищем картинки из первого списка (пзло) если не нашли ни одной из этого списка тогда ищем из списка (лвл) если и тут не нашлось ни одной из списка  тогда делаем клик
« Last Edit: July 12, 2017, 10:59:19 PM by Зануда »

Зануда

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: масив
« Reply #3 on: July 13, 2017, 09:34:51 AM »
вот через простый поиск картинки все работает как нужно только беда в том что это не очень то и красиво много строк и редактировать не удобно чтоб добавить или убрать картинку нужно добавлять еще одни поиск  :-\  а что вот точно вот так работало но через масив не могу понять как сделать  :'(
Code: (clickermann) [Select]
SUB(лвл)
   
   go:
   
   GETSCREEN  ($xx-34,$yy+372,$xx+132,$yy+546)                         //первая область поиска картинки
   COLORMODE(7, $xx-34,$yy+372,$xx+132,$yy+546)
   IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "св1.bmp", -1, 90)
      LOGWRITE ("моб подошел")
      m_move($_return1+RND(-10,10), $_return2+RND(-10,10))
      LCLICK($_xmouse,$_ymouse)
      $tim1234 = $_time_t + 10
      WHILE($tim1234 > $_time_t)
         GETSCREEN ($xx+331,$yy+260, $xx+464,$yy+391) //(750,360, 883,491)
         IF_PICTURE_IN ($xx+331,$yy+260, $xx+464,$yy+391, "напасть.bmp", -1, 70)
            $tim1234 = 0
            INC($_zlo,1)
           
            m_move($_return1+RND(-10,10), $_return2+RND(-2,2))
            LCLICK($_xmouse,$_ymouse)
            WAITMS(rnd(3000,5000))
            $hod_1=1
           
            goto(hod)
         ELSE
            WAITMS(500)
         END_IF
      END_CYC
   ELSE  //если не нашло св1
     
      IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "ог.bmp", -1, 90)
         LOGWRITE ("моб подошел")
         m_move($_return1+RND(-10,10), $_return2+RND(-10,10))
         LCLICK($_xmouse,$_ymouse)
         $tim1234 = $_time_t + 10
         WHILE($tim1234 > $_time_t)
            GETSCREEN ($xx+331,$yy+260, $xx+464,$yy+391) //(750,360, 883,491)
            IF_PICTURE_IN ($xx+331,$yy+260, $xx+464,$yy+391, "напасть.bmp", -1, 70)
               $tim1234 = 0
               INC($_zlo,1)
               
               m_move($_return1+RND(-10,10), $_return2+RND(-2,2))
               LCLICK($_xmouse,$_ymouse)
               WAITMS(rnd(3000,5000))
               $hod_1=1
               
               goto(hod)
            ELSE
               WAITMS(500)
            END_IF
         END_CYC
      ELSE  //если не нашло ни св1 ни ог
         
         
         IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "св.bmp", -1, 90)
            LOGWRITE ("моб подошел")
            m_move($_return1+RND(-10,10), $_return2+RND(-10,10))
            LCLICK($_xmouse,$_ymouse)
            $tim1234 = $_time_t + 10
            WHILE($tim1234 > $_time_t)
               GETSCREEN ($xx+331,$yy+260, $xx+464,$yy+391) //(750,360, 883,491)
               IF_PICTURE_IN ($xx+331,$yy+260, $xx+464,$yy+391, "напасть.bmp", -1, 70)
                  $tim1234 = 0
                  INC($_zlo,1)
                 
                  m_move($_return1+RND(-10,10), $_return2+RND(-2,2))
                  LCLICK($_xmouse,$_ymouse)
                  WAITMS(rnd(3000,5000))
                  $hod_1=1
                 
                  goto(hod)
               ELSE
                  WAITMS(500)
               END_IF
            END_CYC
         ELSE  //если не нашло ни св ни ог ни св
           
            IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "огв.bmp", -1, 90)
               LOGWRITE ("моб подошел")
               m_move($_return1+RND(-10,10), $_return2+RND(-10,10))
               LCLICK($_xmouse,$_ymouse)
               $tim1234 = $_time_t + 10
               WHILE($tim1234 > $_time_t)
                  GETSCREEN ($xx+331,$yy+260, $xx+464,$yy+391) //(750,360, 883,491)
                  IF_PICTURE_IN ($xx+331,$yy+260, $xx+464,$yy+391, "напасть.bmp", -1, 70)
                     $tim1234 = 0
                     INC($_zlo,1)
                     
                     m_move($_return1+RND(-10,10), $_return2+RND(-2,2))
                     LCLICK($_xmouse,$_ymouse)
                     WAITMS(rnd(3000,5000))
                     $hod_1=1
                     
                     goto(hod)
                  ELSE
                     WAITMS(500)
                  END_IF
               END_CYC
            ELSE  //если не нашло св ни ог ни св  ни огв        тогда ищем во второй области поиска другое
               
               GETSCREEN ($xx-13,$yy+50, $xx+6,$yy+74)//другая область поиска
               IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "19лвл.bmp", -1, 90)
                  LOGWRITE ("есть нужный")
                 
                  GETSCREEN ($xx-18,$yy+531, $xx+106,$yy+563)
                  IF_PICTURE_IN ($xx-18,$yy+531, $xx+106,$yy+563, "таймер.bmp", -1, 80)
                     LOGWRITE ("таймер")
                     
                     m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
                     LCLICK($_xmouse,$_ymouse)
                     WAITMS(rnd(1700,1900))
                     WAITMS(10)
                  ELSE
                     
                     
                     прогон()
                     
                  END_IF
               ELSE  //если нет 19лвл
                 
                  IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "18лвл.bmp", -1, 90)
                     LOGWRITE ("есть нужный")
                     
                     GETSCREEN ($xx-18,$yy+531, $xx+106,$yy+563)
                     IF_PICTURE_IN ($xx-18,$yy+531, $xx+106,$yy+563, "таймер.bmp", -1, 80)
                        LOGWRITE ("таймер")
                       
                        m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
                        LCLICK($_xmouse,$_ymouse)
                        WAITMS(rnd(1700,1900))
                        WAITMS(10)
                     ELSE
                       
                       
                        прогон()
                       
                     END_IF
                  ELSE  //если нет ни 19лвл ни 18лвл
                     
                     IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "17лвл.bmp", -1, 90)
                        LOGWRITE ("есть нужный")
                       
                        GETSCREEN ($xx-18,$yy+531, $xx+106,$yy+563)
                        IF_PICTURE_IN ($xx-18,$yy+531, $xx+106,$yy+563, "таймер.bmp", -1, 80)
                           LOGWRITE ("таймер")
                           
                           m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
                           LCLICK($_xmouse,$_ymouse)
                           WAITMS(rnd(1700,1900))
                           WAITMS(10)
                        ELSE
                           
                           
                           прогон()
                           
                        END_IF
                     ELSE  //если нет ни 19лвл ни 18лвл ни 17лвл
                       
                        IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "16лвл.bmp", -1, 90)
                           LOGWRITE ("есть нужный")
                           
                           GETSCREEN ($xx-18,$yy+531, $xx+106,$yy+563)
                           IF_PICTURE_IN ($xx-18,$yy+531, $xx+106,$yy+563, "таймер.bmp", -1, 80)
                              LOGWRITE ("таймер")
                             
                              m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
                              LCLICK($_xmouse,$_ymouse)
                              WAITMS(rnd(1700,1900))
                              WAITMS(10)
                           ELSE
                             
                             
                              прогон()
                             
                           END_IF
                        ELSE  //если нет ни 19лвл ни 18лвл ни 17лвл ни 16 лвл значит лвл нам не подходит и монстра нужного нет значит нада передвинуться дальше
                           LOGWRITE ("лвл не подошел")
                           
                           m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
                           LCLICK($_xmouse,$_ymouse)                                 //передвигаемся
                           WAITMS(rnd(1700,1900))
                           goto(go)                  //возвращаемся искать по новому
                        END_IF
                     END_IF
                  END_IF
               END_IF
               
            END_IF
           
           
         END_IF
         
      END_IF
     
     
   END_IF
   
   
END_SUB

Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: масив
« Reply #4 on: July 13, 2017, 01:45:17 PM »
А может быть просто вводить переменные-флаги, чтоб не приходилось лепить всё в кучу?
Т.е. продумываете, как делать поэтапно:

подпрограмма
0. $sub_found=0, $sub_lvl=0 (названия переменных сами придумаете, адекватные и точно не использовавшиеся нигде)
1. Цикл для поиска первых картинок. Если нашел, то $sub_found=1 и цикл завершаем
2. Если  $sub_found=0, запуск цикла для поиска вторых картинок, нашли $sub_lvl=1  и цикл завершаем
3. Если $sub_found=1 - кусок с нападением (в ретёрнах лежат координаты для нападения)
4. Если $sub_lvl=1 (в ретёрнах лежат координаты для прогнать) - прогнать, а если нет - прокликать, чтоб сдвинулся.
5. конец подпрограммы.

А вот в основном коде программы уже сделать цикл, чтоб подпрограмма повторялась.
К слову, если есть возможность отказаться где-то от goto - откажитесь. В случае если код будет разрастаться, неизвестно какие проблемы в итоге появится.  А "волевым решением выдавать подтяжки" - не очень правильно)

Не знаю, как насчет эстетики при появлении лишних переменных (на профессионалов мы с вами все равно не тянем)), но хотя бы легко будет отлаживать и находить баги: ставите в программе строчки в духе Print("этап _1_: $sub_found", $sub_found, ", $sub_lvl" ,$sub_lvl) - и всегда видите, что у скрипта получилось, а где надо править. И в итоге исправлять косяки и дописывать код легче будет. А т.к. подпрограмма будет зациклена в  коде самой программы - менять настройки (сколько раз и через какое время пытаться нападать) будет легче.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: масив
« Reply #5 on: July 14, 2017, 09:28:32 PM »
Повторяющийся код нужно засунуть в подпрограммы. Но выпрыгивать из цикла и подпрограммы нельзя.
goto(hod) нужно написать после вызова лвл(). Если, конечно, вызов не написан тоже к каком то цикле...

Code: (clickermann) [Select]
SUB(моб_подошел)
   LOGWRITE ("моб подошел")
   m_move($_return1+RND(-10,10), $_return2+RND(-10,10))
   LCLICK($_xmouse,$_ymouse)
   $tim1234 = $_time_t + 10
   WHILE($tim1234 > $_time_t)
      GETSCREEN ($xx+331,$yy+260, $xx+464,$yy+391) //(750,360, 883,491)
      IF_PICTURE_IN ($xx+331,$yy+260, $xx+464,$yy+391, "напасть.bmp", -1, 70)
         $tim1234 = 0
         INC($_zlo,1)
         m_move($_return1+RND(-10,10), $_return2+RND(-2,2))
         LCLICK($_xmouse,$_ymouse)
         WAITMS(rnd(3000,5000))
         $hod_1=1
      ELSE
         WAITMS(500)
      END_IF
   END_CYC
END_SUB

SUB(есть_нужный)
   LOGWRITE ("есть нужный")
   GETSCREEN ($xx-18,$yy+531, $xx+106,$yy+563)
   IF_PICTURE_IN ($xx-18,$yy+531, $xx+106,$yy+563, "таймер.bmp", -1, 80)
      LOGWRITE ("таймер")
      m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
      LCLICK($_xmouse,$_ymouse)
      WAITMS(rnd(1700,1900))
      WAITMS(10)
   ELSE
      прогон()
   END_IF
END_SUB

SUB(лвл)
   
   go:
   
   GETSCREEN($xx-34,$yy+372,$xx+132,$yy+546) //первая область поиска картинки
   COLORMODE(7, $xx-34,$yy+372,$xx+132,$yy+546)
   IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "св1.bmp", -1, 90)
      моб_подошел()
   ELSE  //если не нашло св1
      IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "ог.bmp", -1, 90)
         моб_подошел()
      ELSE  //если не нашло ни св1 ни ог
         IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "св.bmp", -1, 90)
            моб_подошел()
         ELSE  //если не нашло ни св ни ог ни св
            IF_PICTURE_IN ($xx-34,$yy+372,$xx+132,$yy+546, "огв.bmp", -1, 90)
               моб_подошел()
            ELSE  //если не нашло св ни ог ни св  ни огв        тогда ищем во второй области поиска другое
               GETSCREEN ($xx-13,$yy+50, $xx+6,$yy+74)//другая область поиска
               IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "19лвл.bmp", -1, 90)
                  есть_нужный()
               ELSE  //если нет 19лвл
                  IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "18лвл.bmp", -1, 90)
                     есть_нужный()
                  ELSE  //если нет ни 19лвл ни 18лвл
                     IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "17лвл.bmp", -1, 90)
                        есть_нужный()
                     ELSE  //если нет ни 19лвл ни 18лвл ни 17лвл
                        IF_PICTURE_IN ($xx-13,$yy+50, $xx+6,$yy+74, "16лвл.bmp", -1, 90)
                           есть_нужный()
                        ELSE  //если нет ни 19лвл ни 18лвл ни 17лвл ни 16 лвл значит лвл нам не подходит и монстра нужного нет значит нада передвинуться дальше
                           LOGWRITE ("лвл не подошел")
                           m_move($xx+632+RND(-10,10), $yy+245+RND(-10,10))
                           LCLICK($_xmouse,$_ymouse)                                 //передвигаемся
                           WAITMS(rnd(1700,1900))
                           goto(go)                  //возвращаемся искать по новому
                        END_IF
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
   
END_SUB


лвл()
IF($hod_1 = 1)
   goto(hod)
END_IF