Author Topic: Можно ли как-то ускорить выполнение скрипта?  (Read 4571 times)

0 Members and 1 Guest are viewing this topic.

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Ребят, вот скрипт:
Code: (clickermann) [Select]
$t1 = $_ms

GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (579-50,40-50, 579+50,40+50, "Target1.bmp", -1, 100)
   $targ=1
   //LOGWRITE ("Агрессивный")
   $x_targ=$_return1
   $y_targ=$_return2
else
   IF_PICTURE_IN (579-50,40-50, 579+50,40+50, "Target2.bmp", -1, 100)
      $targ=1
      //LOGWRITE ("Не агрессивный")
      $x_targ=$_return1
      $y_targ=$_return2
   else
      IF_PICTURE_IN (579-50,40-50, 579+50,40+50, "Target3.bmp", -1, 100)
         $targ=1
         //LOGWRITE ("Тренировочная кукла")
         $x_targ=$_return1
         $y_targ=$_return2
      else
         $targ=0
      END_IF
   END_IF
END_IF

IF_PICTURE_IN (477,741, 960,872, "Skil1.bmp", -1, 100)
   $Skil_1a = 0
   $Skil_1 = 1
   $Skil_1_x = $_return1
   $Skil_1_y = $_return2
else
   $Skil_1 = 0
   IF_PICTURE_IN ($Skil_1_x-4,$Skil_1_y-9, $Skil_1_x+7,$Skil_1_y+6, "Skil1a.bmp", -1, 100)
      $Skil_1 = 0
      $Skil_1a = 1
   END_IF
END_IF

IF_PICTURE_IN (477,741, 960,872, "Skil2.bmp", -1, 100)
   $Skil_2a = 0
   $Skil_2 = 1
   $Skil_2_x = $_return1
   $Skil_2_y = $_return2
else
   $Skil_2 = 0
   IF_PICTURE_IN ($Skil_1_x-4,$Skil_1_y-9, $Skil_1_x+7,$Skil_1_y+6, "Skil2a.bmp", -1, 100)
      $Skil_2 = 0
      $Skil_2a = 1
   END_IF
END_IF

IF_PICTURE_IN (477,741, 960,872, "Skil3.bmp", -1, 100)
   $Skil_3a = 0
   $Skil_3 = 1
   $Skil_3_x = $_return1
   $Skil_3_y = $_return2
else
   $Skil_3 = 0
   IF_PICTURE_IN ($Skil_1_x-4,$Skil_1_y-9, $Skil_1_x+7,$Skil_1_y+6, "Skil3a.bmp", -1, 100)
      $Skil_3 = 0
      $Skil_3a = 1
   END_IF
END_IF

IF_PICTURE_IN (477,741, 960,872, "Skil4.bmp", -1, 100)
   $Skil_4a = 0
   $Skil_4 = 1
   $Skil_4_x = $_return1
   $Skil_4_y = $_return2
else
   $Skil_4 = 0
   IF_PICTURE_IN ($Skil_1_x-4,$Skil_1_y-9, $Skil_1_x+7,$Skil_1_y+6, "Skil4a.bmp", -1, 100)
      $Skil_4 = 0
      $Skil_4a = 1
   END_IF
END_IF

IF_PICTURE_IN (477,741, 960,872, "Skil5.bmp", -1, 100)
   $Skil_5a = 0
   $Skil_5 = 1
   $Skil_5_x = $_return1
   $Skil_5_y = $_return2
else
   $Skil_5 = 0
   IF_PICTURE_IN ($Skil_1_x-4,$Skil_1_y-9, $Skil_1_x+7,$Skil_1_y+6, "Skil5a.bmp", -1, 100)
      $Skil_5 = 0
      $Skil_5a = 1
   END_IF
END_IF

IF($targ > 0)
   IF_PIXEL_IN($x_targ+35,$y_targ, $x_targ+200,$y_targ+10, 4145151,4161407)
      //LOGWRITE ("Живой")
      $targ_Live=1
   else
      //LOGWRITE ("Мертвый")
      $targ_Live=0
   END_IF
   
   GETSCREEN
   COLORMODE(9)
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "distance.bmp", -1, 100)
      $x=$_return1
      $y=$_return2
      IF_PICTURE_IN ($x+64,$y, $x+65,$y, "1.bmp", -1, 96)
         $figure1=1
      else
         IF_PICTURE_IN ($x+64,$y, $x+65,$y, "2.bmp", -1, 96)
            $figure1=2
         else
            IF_PICTURE_IN ($x+64,$y, $x+65,$y, "3.bmp", -1, 96)
               $figure1=3
            else
               IF_PICTURE_IN ($x+64,$y, $x+65,$y, "4.bmp", -1, 96)
                  $figure1=4
               else
                  IF_PICTURE_IN ($x+64,$y, $x+65,$y, "5.bmp", -1, 96)
                     $figure1=5
                  else
                     IF_PICTURE_IN ($x+64,$y, $x+65,$y, "6.bmp", -1, 96)
                        $figure1=6
                     else
                        IF_PICTURE_IN ($x+64,$y, $x+65,$y, "7.bmp", -1, 96)
                           $figure1=7
                        else
                           IF_PICTURE_IN ($x+64,$y, $x+65,$y, "8.bmp", -1, 96)
                              $figure1=8
                           else
                              IF_PICTURE_IN ($x+64,$y, $x+65,$y, "9.bmp", -1, 96)
                                 $figure1=9
                              END_IF
                           END_IF
                        END_IF
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
     
      IF_PICTURE_IN ($x+69,$y, $x+70,$y, "1.bmp", -1, 96)
         $figure2=1
      else
         IF_PICTURE_IN ($x+69,$y, $x+70,$y, "2.bmp", -1, 96)
            $figure2=2
         else
            IF_PICTURE_IN ($x+69,$y, $x+70,$y, "3.bmp", -1, 96)
               $figure2=3
            else
               IF_PICTURE_IN ($x+69,$y, $x+70,$y, "4.bmp", -1, 96)
                  $figure2=4
               else
                  IF_PICTURE_IN ($x+69,$y, $x+70,$y, "5.bmp", -1, 96)
                     $figure2=5
                  else
                     IF_PICTURE_IN ($x+69,$y, $x+70,$y, "6.bmp", -1, 96)
                        $figure2=6
                     else
                        IF_PICTURE_IN ($x+69,$y, $x+70,$y, "7.bmp", -1, 96)
                           $figure2=7
                        else
                           IF_PICTURE_IN ($x+69,$y, $x+70,$y, "8.bmp", -1, 96)
                              $figure2=8
                           else
                              IF_PICTURE_IN ($x+69,$y, $x+70,$y, "9.bmp", -1, 96)
                                 $figure2=9
                              END_IF
                           END_IF
                        END_IF
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
   $distance = ($figure1*10)+$figure2
END_IF

$t2 = $_ms - $t1
LOGWRITE ($t2)

waitms(10)

Скрипт делает 1 круг за 2 секунды... Есть мысль - как это дело ускорить...? На сколько я помню, GETSCREEN в потоках не выполняется же - да? Львиную долю времени выполняется часть скрипта с 102 по 180 строку.
« Last Edit: January 10, 2018, 08:37:12 PM by Hito »
Я не ду... Потому и не бу...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
И кстати... В этом скрипте есть еще поток. Так вот этот поток останавливается, пока выполняются строки скрипта с 102 по 180. Почему так...? Сразу скажу, что в потоке нет ничего такого, что могло бы реагировать на выполнение скрипта. Его вообще можно сделать таким:

Code: (clickermann) [Select]
THREAD(Attack)
   LOGWRITE ("Сообщение")
   waitms(10)
END_THREAD

И он все равно будет останавливаться...
« Last Edit: January 10, 2018, 09:04:20 PM by Hito »
Я не ду... Потому и не бу...

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
40-50 минусовые координаты?
Code: (clickermann) [Select]
IF_PICTURE_IN (579-50,40-50, 579+50,40+50, "Target1.bmp", -1, 100)
103 строка
Code: (clickermann) [Select]
COLORMODE(9)У нас уже 9й уровень появился?

Оптимизированный вариант
Code: (clickermann) [Select]
$t1 = $_ms

$targ=0
GETSCREEN                 
COLORMODE(6)
FOR($i=1,$i<4) // "Target1.bmp" - "Target3.bmp"
   IF_PICTURE_IN (579-50,40-40, 579+50,40+50, STRCONCAT("Target",$i,".bmp"), -1, 100)
      $targ=1
      $x_targ=$_return1
      $y_targ=$_return2
   END_IF
END_CYC

DEFINE($Skil_1a, 0)
DEFINE($Skil_1, 0)
DEFINE($Skil_1_x, 0)
DEFINE($Skil_1_y, 0)

DEFINE($Skil_2a, 0)
DEFINE($Skil_2, 0)
DEFINE($Skil_2_x, 0)
DEFINE($Skil_2_y, 0)

DEFINE($Skil_3a, 0)
DEFINE($Skil_3, 0)
DEFINE($Skil_3_x, 0)
DEFINE($Skil_3_y, 0)

DEFINE($Skil_4a, 0)
DEFINE($Skil_4, 0)
DEFINE($Skil_4_x, 0)
DEFINE($Skil_4_y, 0)

DEFINE($Skil_5a, 0)
DEFINE($Skil_5, 0)
DEFINE($Skil_5_x, 0)
DEFINE($Skil_5_y, 0)

FOR($i=1,$i<6) // "Skil1.bmp" - "Skil5.bmp"
   IF_PICTURE_IN (477,741, 960,872, STRCONCAT("Skil",$i,".bmp"), -1, 100)
      SETVAR (STRCONCAT("$Skil_",$i,"a"), 0)
      SETVAR (STRCONCAT("$Skil_",$i), 1)
      SETVAR (STRCONCAT("$Skil_",$i,"_x"), $_return1)
      SETVAR (STRCONCAT("$Skil_",$i,"_y"), $_return2)
   else
      SETVAR (STRCONCAT("$Skil_",$i), 0)
      IF_PICTURE_IN ($Skil_1_x-4,$Skil_1_y-9, $Skil_1_x+7,$Skil_1_y+6, STRCONCAT("Skil",$i,"a.bmp"), -1, 100)
         SETVAR (STRCONCAT("$Skil_",$i), 0)
         SETVAR (STRCONCAT("$Skil_",$i,"a"), 1)
      END_IF
   END_IF
END_CYC

IF($targ > 0)
   IF_PIXEL_IN($x_targ+35,$y_targ, $x_targ+200,$y_targ+10, 4145151,4161407)
      //LOGWRITE ("Живой")
      $targ_Live=1
   else
      //LOGWRITE ("Мертвый")
      $targ_Live=0
   END_IF
   
   GETSCREEN
   COLORMODE(0) // 0-8 выбери правильное число
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "distance.bmp", -1, 100)
      $x=$_return1
      $y=$_return2
      FOR($i=1,$i<10) // "1.bmp" - "9.bmp"
         IF_PICTURE_IN ($x+64,$y, $x+65,$y, STRCONCAT($i,".bmp"), -1, 96)
            $figure1=$i
         END_IF
      END_CYC
     
      FOR($i=1,$i<10) // "1.bmp" - "9.bmp"
         IF_PICTURE_IN ($x+69,$y, $x+70,$y, STRCONCAT($i,".bmp"), -1, 96)
            $figure2=$i
         END_IF
      END_CYC
   END_IF
   $distance = ($figure1*10)+$figure2
END_IF

$t2 = $_ms - $t1
LOGWRITE ($t2)

waitms(10)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
И кстати... В этом скрипте есть еще поток. Так вот этот поток останавливается, пока выполняются строки скрипта с 102 по 180. Почему так...?

Возможно из за нагрузки. Попробуй добавить в цикл перебора картинок небольшую задержку.

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Оптимизированный вариант
Code: (clickermann) [Select]
$t1 = $_ms

$targ=0
GETSCREEN                 
COLORMODE(6)
FOR($i=1,$i<4) // "Target1.bmp" - "Target3.bmp"
   IF_PICTURE_IN (579-50,40-40, 579+50,40+50, STRCONCAT("Target",$i,".bmp"), -1, 100)
      $targ=1
      $x_targ=$_return1
      $y_targ=$_return2
   END_IF
END_CYC

DEFINE($Skil_1a, 0)
DEFINE($Skil_1, 0)
DEFINE($Skil_1_x, 0)
DEFINE($Skil_1_y, 0)

DEFINE($Skil_2a, 0)
DEFINE($Skil_2, 0)
DEFINE($Skil_2_x, 0)
DEFINE($Skil_2_y, 0)

DEFINE($Skil_3a, 0)
DEFINE($Skil_3, 0)
DEFINE($Skil_3_x, 0)
DEFINE($Skil_3_y, 0)

DEFINE($Skil_4a, 0)
DEFINE($Skil_4, 0)
DEFINE($Skil_4_x, 0)
DEFINE($Skil_4_y, 0)

DEFINE($Skil_5a, 0)
DEFINE($Skil_5, 0)
DEFINE($Skil_5_x, 0)
DEFINE($Skil_5_y, 0)

FOR($i=1,$i<6) // "Skil1.bmp" - "Skil5.bmp"
   IF_PICTURE_IN (477,741, 960,872, STRCONCAT("Skil",$i,".bmp"), -1, 100)
      SETVAR (STRCONCAT("$Skil_",$i,"a"), 0)
      SETVAR (STRCONCAT("$Skil_",$i), 1)
      SETVAR (STRCONCAT("$Skil_",$i,"_x"), $_return1)
      SETVAR (STRCONCAT("$Skil_",$i,"_y"), $_return2)
   else
      SETVAR (STRCONCAT("$Skil_",$i), 0)
      IF_PICTURE_IN ($Skil_1_x-4,$Skil_1_y-9, $Skil_1_x+7,$Skil_1_y+6, STRCONCAT("Skil",$i,"a.bmp"), -1, 100)
         SETVAR (STRCONCAT("$Skil_",$i), 0)
         SETVAR (STRCONCAT("$Skil_",$i,"a"), 1)
      END_IF
   END_IF
END_CYC

IF($targ > 0)
   IF_PIXEL_IN($x_targ+35,$y_targ, $x_targ+200,$y_targ+10, 4145151,4161407)
      //LOGWRITE ("Живой")
      $targ_Live=1
   else
      //LOGWRITE ("Мертвый")
      $targ_Live=0
   END_IF
   
   GETSCREEN
   COLORMODE(0) // 0-8 выбери правильное число
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "distance.bmp", -1, 100)
      $x=$_return1
      $y=$_return2
      FOR($i=1,$i<10) // "1.bmp" - "9.bmp"
         IF_PICTURE_IN ($x+64,$y, $x+65,$y, STRCONCAT($i,".bmp"), -1, 96)
            $figure1=$i
         END_IF
      END_CYC
     
      FOR($i=1,$i<10) // "1.bmp" - "9.bmp"
         IF_PICTURE_IN ($x+69,$y, $x+70,$y, STRCONCAT($i,".bmp"), -1, 96)
            $figure2=$i
         END_IF
      END_CYC
   END_IF
   $distance = ($figure1*10)+$figure2
END_IF

$t2 = $_ms - $t1
LOGWRITE ($t2)

waitms(10)

Работает все те же 2 секунды...
Я не ду... Потому и не бу...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
И кстати... В этом скрипте есть еще поток. Так вот этот поток останавливается, пока выполняются строки скрипта с 102 по 180. Почему так...?

Возможно из за нагрузки. Попробуй добавить в цикл перебора картинок небольшую задержку.

Code: (clickermann) [Select]
   GETSCREEN
   COLORMODE(8) // 0-8 выбери правильное число
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "distance.bmp", -1, 100)
      $x=$_return1
      $y=$_return2
      FOR($i=1,$i<10) // "1.bmp" - "9.bmp"
         IF_PICTURE_IN ($x+64,$y, $x+65,$y, STRCONCAT($i,".bmp"), -1, 96)
            $figure1=$i
         END_IF
         waitms(10)
      END_CYC
     
      FOR($i=1,$i<10) // "1.bmp" - "9.bmp"
         IF_PICTURE_IN ($x+69,$y, $x+70,$y, STRCONCAT($i,".bmp"), -1, 96)
            $figure2=$i
         END_IF
         waitms(10)
      END_CYC
   END_IF

Не помогает...
Я не ду... Потому и не бу...

Spw

  • Зашел в гости
  • *
  • Posts: 12
  • Addicted
    • View Profile
Попробуй сделать подсчет пикселей у числа. У всех 99 вариантов будет уникальное значение, потом все значения переписать в файл и делать из него запрос.

Например

GETSCREEN
$count = PXLCOUNT (10,20, 100, 40, 255)
logwrite("pixels: ", $count)
$str = INIREAD("chisla.ini",  $count)
logwrite($str)

Конечно это геморно, надо 99 вариантов в файл занести, но должно работать быстрее.

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Конечно это геморно, надо 99 вариантов в файл занести, но должно работать быстрее.

То есть, ты считаешь, что 99 вариантов подсчета пикслей будет быстрее, чем поискать 18 картинок...?   ???

У всех 99 вариантов будет уникальное значение

Ты думаешь, что у 12 и 21 значения будут разными...?  ???
« Last Edit: January 10, 2018, 09:44:30 PM by Hito »
Я не ду... Потому и не бу...

Spw

  • Зашел в гости
  • *
  • Posts: 12
  • Addicted
    • View Profile
Пиксели считаешь 1 раз!, получается число, например 672, смотришь в файл он тебе говорит 672 пикселя, это 15(например). Право не знаю как это объяснить более доступно.

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Пиксели считаешь 1 раз!, получается число, например 672, смотришь в файл он тебе говорит 672 пикселя, это 15(например). Право не знаю как это объяснить более доступно.

А точно 15...? А не 51...  :)
Я не ду... Потому и не бу...

Spw

  • Зашел в гости
  • *
  • Posts: 12
  • Addicted
    • View Profile
Quote

Ты думаешь, что у 12 и 21 значения будут разными...?  ???
А, ну да, косяк, тогда два раза придется пиксели считать, зато в файл 9 значении всего писать.

Spw

  • Зашел в гости
  • *
  • Posts: 12
  • Addicted
    • View Profile
Quote
А точно 15...? А не 51...  :)
Больше не буду пытаться вам помочь  :P

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Spw, по любому вариант с подсчетом пикслей отпадает. Если ты не заметил, то обращу твое внимание на цифру - 96, в конце строки:
IF_PICTURE_IN ($x+64,$y, $x+65,$y, STRCONCAT($i,".bmp"), -1, 96)
Там, например, хвост двойки может состоять не из трех, а из четырех пикслей - как попадет...
Я не ду... Потому и не бу...

Spw

  • Зашел в гости
  • *
  • Posts: 12
  • Addicted
    • View Profile
Какая игра? Можно скриншот?

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
« Last Edit: January 10, 2018, 10:19:22 PM by Hito »
Я не ду... Потому и не бу...