Author Topic: Почему не делает заданное количество раз?  (Read 2300 times)

0 Members and 1 Guest are viewing this topic.

sanek83

  • Освоившийся
  • **
  • Posts: 64
    • View Profile
Code: [Select]
MOVE(10,10)

SUB(blic)
   $ch = 0
   WHILE($ch = 0)
      GETSCREEN
      COLORMODE(6)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "podzemblic.bmp", -1, 95) // блиц
         FOR($A=0, $A<2)
            MOVE($_return1+9, $_return2+9)
            WAITMS(50)
            LOGWRITE ("нашел блиц")
            $ch = 1
         END_CYC
      ELSE
         WAITMS(50)
         LOGWRITE ("no блиц суб")
      END_IF
     
   END_CYC
END_SUB


$check = 0
WHILE($check = 0)
   GETSCREEN
   COLORMODE(6)
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "podzemka.bmp", -1, 95) // клик на подземку
      MOVE($_return1+9, $_return2+9)
      WAITMS(50)
      LOGWRITE ("нашел подземку")
      $check = 1
   ELSE
      WAITMS(50)
      LOGWRITE ("no подземка")
   END_IF
END_CYC
blic()

$check = 0
WHILE($check = 0)
   GETSCREEN
   COLORMODE(6)
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "podzeml.bmp", -1, 95) // клик на 2 клетку
      MOVE($_return1+225, $_return2+9)
      WAITMS(50)
      LOGWRITE ("нашел 2 клетку")
      $check = 1
   ELSE
      WAITMS(50)
      LOGWRITE ("no 2 клетка")
   END_IF
END_CYC



FOR($a=0, $a < 10)// -------------------------------------> без FOR работает тело хорошо, нужно чтоб 10 раз сделал, а с ним делает сам по себе сколько захочет
   
   $check1 = 0
   WHILE($check1 = 0)
      GETSCREEN
      COLORMODE(6)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "podzemblic.bmp", -1, 95) // проверка горит ли блиц
         WAITMS(50)
         LOGWRITE ("блиц горит иду дальше")
         $check1 = 1
         
         $check = 0
         WHILE($check = 0)
            GETSCREEN
            COLORMODE(6)
            IF_PICTURE_IN (0,0, $_xmax,$_ymax, "podzeml.bmp", -1, 95) // клик на 2 клетку
               MOVE($_return1+225, $_return2+9)
               WAITMS(50)
               LOGWRITE ("нашел 2 клетку")
               $check = 1
            ELSE
               WAITMS(50)
               LOGWRITE ("no 2 клетка")
            END_IF
         END_CYC
         
         blic()
         
         $check = 0
         WHILE($check = 0)
            GETSCREEN
            COLORMODE(6)
            IF_PICTURE_IN (0,0, $_xmax,$_ymax, "podzeml.bmp", -1, 95) // клик на 1 клетку
               MOVE($_return1+89, $_return2+9)
               WAITMS(50)
               LOGWRITE ("нашел 1 клетку")
               $check = 1
            ELSE
               WAITMS(50)
               LOGWRITE ("no 1 клетки")
            END_IF
         END_CYC
         
         blic()
         
         
      ELSE
         LOGWRITE ("блиц не горит")
         
         GETSCREEN
         COLORMODE(6)
         IF_PICTURE_IN (0,0, $_xmax,$_ymax, "blictem.bmp", -1, 95) // проверка на темный
           
            $check = 0
            WHILE($check = 0)
               GETSCREEN
               COLORMODE(6)
               IF_PICTURE_IN (0,0, $_xmax,$_ymax, "podzemperex.bmp", -1, 95) // клик на переход
                  MOVE($_return1+9, $_return2+9)
                  WAITMS(50)
                  LOGWRITE ("нашел переход")
                  $check = 1
               ELSE
                  WAITMS(50)
                  LOGWRITE ("no переход")
               END_IF
            END_CYC
           
            $check = 0
            WHILE($check = 0)
               GETSCREEN
               COLORMODE(6)
               IF_PICTURE_IN (0,0, $_xmax,$_ymax, "podzemp.bmp", -1, 95) // клик на перелистать
                  for($a=0, $a<3)
                     MOVE($_return1+9, $_return2+9)
                     WAITMS(50)
                     LOGWRITE ("нашел перелистать")
                     $check = 1
                  END_CYC
                 
               ELSE
                  WAITMS(50)
                  LOGWRITE ("no перелистать")
               END_IF
            END_CYC
           
            $check = 0
            WHILE($check = 0)
               GETSCREEN
               COLORMODE(6)
               IF_PICTURE_IN (0,0, $_xmax,$_ymax, "podzeml.bmp", -1, 95) // клик на 2 клетку
                  MOVE($_return1+225, $_return2+9)
                  WAITMS(50)
                  LOGWRITE ("нашел 2ю клетку")
                  $check = 1
               ELSE
                  WAITMS(50)
                  LOGWRITE ("no 2ю клетку")
               END_IF
            END_CYC
           
            blic()
           
            $check = 0
            WHILE($check = 0)
               GETSCREEN
               COLORMODE(6)
               IF_PICTURE_IN (0,0, $_xmax,$_ymax, "podzeml.bmp", -1, 95) // клик на 1 клетку
                  MOVE($_return1+89, $_return2+9)
                  WAITMS(50)
                  LOGWRITE ("нашел 1 клетку")
                  $check = 1
               ELSE
                  WAITMS(50)
                  LOGWRITE ("no 1 й клетки")
               END_IF
            END_CYC
            blic()
            $check1 = 1
         ELSE
            WAITMS(50)
            LOGWRITE ("не горит блиц не какой проверяем сначало")
         END_IF
      END_IF
   END_CYC
END_CYC

HALT
Без FOR работает отлично,подскажите как выполнить тело 10 раз, ставлю 2,3 делает 1 раз, ставлю 4 и больше делает без остановки? Помогите советом пожалуйста.



dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
внутри цикла FOR($a=0, $a < 10) вижу вызов подпрограммы blic(), и не раз. а в  этой подпрограмме есть цикл FOR($A=0, $A<2). как считаешь, после выполнения цикла в подпрограмме, $a чему будет равна?

правильно, как не крути, в нутри цикла FOR($a=0, $a < 10), $a становится равна "2" . меняй имена переменных и все заработает.

sanek83

  • Освоившийся
  • **
  • Posts: 64
    • View Profile
блин 2 часа сидел  :'(спасибо :D