Author Topic: В чём ошибка?  (Read 11860 times)

0 Members and 5 Guests are viewing this topic.

kostya1234599

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: В чём ошибка?
« Reply #30 on: September 17, 2014, 11:51:36 AM »
можно ли использовать переменные вместо координат вот так например:
Code: (clickermann) [Select]
PXL($X, $Y)?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: В чём ошибка?
« Reply #31 on: September 17, 2014, 12:12:26 PM »
Везде где числа, можно использовать переменные. Кроме самих имён переменных, имён SUB и меток GOTO.


kostya1234599

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: В чём ошибка?
« Reply #32 on: September 23, 2014, 07:54:31 AM »
Мой код эволюционировал во в такой :)
Подскажите, может не недочёты, ошибки какие то допустил
Code: (clickermann) [Select]
#ps2_mouse
#ps2_keyboard
#logfile
KEYPRESS(#F1)
WAIT(1)
getscreen
SCANPICTURE ($var, 0, 0, 1365, 767, "3x3.bmp")//поиск заголовка рыбалки на экране
$y = arrpop($var)
$x = arrpop($var)
$X = int($x) + 1   // Координаты точки от которой
$Y = int($y) + 1   // ищется полоска HP рыбы
//print($x,":", $y)  //log
$Xn = int($X)-93   //Координаты начала полоски(проверка наличия/цвета)
$Yn = int($Y)+244
$Xnp = int($X)-91
$Ynp = int($Yn)
$Xkp = int($X)+134
$Ykp = int($Yn)
sub(LONGBLUE, $LB)  //функция считает длинну синей полоски
   GETSCREEN
   $LB = 0
   $LB = PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10446592)
   $LB = $LB+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10118913)
   $LB = $LB+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10249473)
   $LB = $LB+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10315265)
   $LB = $LB+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10315264)
   $LB = $LB+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10381056)
   $LB = $LB+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10446848)
   $LB = $LB+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10447104)
   $LB = $LB+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10447360)
   $LB = $LB+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10118401)
end_sub
sub(LONGRED, $LR) //анологично красной
   GETSCREEN
   $LR = 0
   $LR = PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10446592)
   $LR = $LR+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10118913)
   $LR = $LR+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10249473)
   $LR = $LR+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10315265)
   $LR = $LR+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10315264)
   $LR = $LR+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10381056)
   $LR = $LR+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10446848)
   $LR = $LR+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10447104)
   $LR = $LR+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10447360)
   $LR = $LR+PXLCOUNT($Xnp,$Ynp,$Xkp,$Ykp, 10118401)
end_sub
sub(randomtick)
   IF($D > 0)             //
      $F = $B - $D        //
      IF($F > 0)          //
         $A = $A+$F       //     поправка на случайный тик
      ELSE                //
      END_IF              //
   ELSE                   //
   END_IF                 //
end_sub
//print("начало/конец ловли")
M5:
$A = 0
$B = 0
$C = 0
$D = 0
$F = 0
GETSCREEN
IF(PXL($X,$Y) = 14406087)
   IF((PXL($X,$Y) = 14406087)&($T > 7)
      Sound("4.wav")
      HALT
   else
   end_if
   M1:
   GETSCREEN
   IF((PXL($Xn,$Yn) = 7886082)|(PXL($Xn,$Yn) = 401020) //???????? ?? ????????? ???????
      M2:
      GETSCREEN
      IF((PXL($Xn,$Yn) = 7886082)|(PXL($Xn,$Yn) = 401020))
         IF(PXL($Xn,$Yn) = 7886082)  // если полоса синяя
            LONGBLUE($B)
    randomtick()
    IF($C ! 1)
               inc($C, 1)
               $A = $B
               KEYPRESS(#F2)
               LONGBLUE($D)
               WAIT(1)
               GOTO(M2)
            ELSE
            END_IF
            IF($A>$B)
               $A = $B
       KEYPRESS(#F2)
       LONGBLUE($D)
               WAIT(1)
               GOTO(M2)
            ELSE
               $A = $B
               KEYPRESS(#F3)
       LONGBLUE($D)
               WAIT(1)
               GOTO(M4)
            END_IF
         ELSE         //иначе
            IF(PXL($Xn,$Yn) = 401020) //если красная
               LONGRED($B)
               randomtick()
               IF($C ! 1)
                  inc($C, 1)
                  $A = $B
                  KEYPRESS(#F2)
  LONGRED($D)
                  WAIT(1)
                  GOTO(M2)
               ELSE
               END_IF
               IF($A>$B)
                  $A = $B
                  KEYPRESS(#F2)
                  LONGRED($D)
                  WAIT(1)
                  GOTO(M2)
               ELSE
                  $A = $B
                  KEYPRESS(#F3)
  LONGRED($D)
                  WAIT(1)
                  GOTO(M4)
               END_IF
            ELSE
               GOTO(M5)
            END_IF   
         END_IF //конец ветки красный/синий
      ELSE
         GOTO(M5)
      END_IF  //(проверка начала полоски)конец проверки на красный/синий
      M4:
      GETSCREEN
      IF((PXL($Xn,$Yn) = 7886082) | (PXL($Xn,$Yn) = 401020)) // красн./син.
         IF(PXL($Xn,$Yn) = 7886082)// синяя
            LONGBLUE($B)
            randomtick()
    IF($A>$B)
               $A = $B
               KEYPRESS(#F3)
       LONGBLUE($D)
               WAIT(1)
               GOTO(M4)
            ELSE
               $A = $B
               KEYPRESS(#F2)
               LONGBLUE($D)
               WAIT(1)
               GOTO(M2)
            END_IF
         ELSE
            IF(PXL($Xn,$Yn) = 401020) //красная
               LONGRED($B)
               randomtick()
       IF($A>$B)
                  $A = $B
                  KEYPRESS(#F3)
                  LONGRED($D)
                  WAIT(1)
                  GOTO(M4)
               ELSE
                  $A = $B
                  KEYPRESS(#F2)
                  LONGRED($D)
                  WAIT(1)
                  GOTO(M2)
               END_IF
            ELSE
               GOTO(M5)
            END_IF
         END_IF
      ELSE    
         GOTO(M5) // если нет полосы вообще
      END_IF
   ELSE
      WAIT(1)  // ожидание появления полоски
      inc($T,1)
      GOTO(M5)
   END_IF   
ELSE
   M6:                                 //
   GETSCREEN                           //
   IF(PXL($X,$Y) = 14406087)           //  ожидание, когда исчезнит окно рыбалки
      WAITMS(100)                      //  после вылова рыбы
      GOTO(M6)                         //
   ELSE                                //
   END_IF                              //
   getscreen
   SCANPICTURE ($var1, 0, 0, 1365, 767, "713x201.bmp")
   $Ry1 = arrpop($var1)
   SCANPICTURE ($var1, 0, 0, 1365, 767, "646x202.bmp")
   $Ry2 = arrpop($var1)
   GETSCREEN
   IF(($Rx1 = 201) & ($Rx2 = 202))//IF(PXL(501, 227) = 4671303)    //проверка на русалку
      sound("1.wav")
      Keypress(#F8)
      WAITMS(100)
      getscreen
      SCANPICTURE ($var1, 0, 0, 1365, 767, "нагр.bmp")
      $Ry = arrpop($var1)
      $Rx = arrpop($var1)
      $RNx = int($Rx) - 112
      $RNy = int($Ry) + 156
      Waitms(100)
      MOVE($RNx,$RNy)
      DIALOGBOX("Внимание вы поймали русалку, заберите награду, отойдите от неё, станьте в положение в котором можно рыбачить и нажмите ОК",0,4)
   ELSE
      WAIT(2)
      KEYPRESS(#F1)
      GOTO(M5)
   END_IF
   WAIT(2)
   KEYPRESS(#F1)
   GOTO(M5)
END_IF
halt // for single run

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: В чём ошибка?
« Reply #33 on: September 23, 2014, 08:43:49 AM »
Строки 66 73, не хватает завершающей скобки

kostya1234599

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: В чём ошибка?
« Reply #34 on: September 23, 2014, 08:39:38 PM »
Спасибо, но многого не понял к сожалению, попробуй так, сначала кусок моего кода, а потом его реализация в твоём варианте. Очень благодарен за замечания)
с колормодом плохо знаком, и не знаю как поведёт себя тот или иной цвет, не суть, просто переписал какие цвета на полоске и всего то)
Конструкция:
ИФ(условие)
действие
элсэ
энд_иф
Если нет ничего в элсе то его писать не обязательно, я так понял?)
Я не объявляю переменную, а обнуляю её, но не знаю верно ли я сделал))
Если что пишите указывайте мои ошибки, буду учиться)))