Автокликер Clickermann :: Форум

Основной раздел => Использование => Тема начата: Vint от Февраль 11, 2014, 11:41:35 am

Название: Три в ряд
Отправлено: Vint от Февраль 11, 2014, 11:41:35 am
Основа для автоматизации игр типа "три в ряд".
 "Сокровища Мантесумы", бой в "Небеса" и т.п.


вопрос возникал здесь http://crapware.aidf.org/forum/index.php?topic=359.0
и ВКонтакте http://vk.com/topic-14410794_29283841

Захотелось решить хотя бы основы. Базис для подобных игр.

Скрипт писался для версии Clickermann v4.9 004
Пробовал и отлаживал на Небеса-х.
Скрипт ищет и выстраивает элементы в комбинации. Проходит последовательно по каждому рисунку и определяет возможный ход. По нахождению определяется "вес" хода - сколько фишек совпало. Вес "сквозной" через все изображения, т.е. итоговый ход будет по элементу с большим весом и встретившийся раньше.
Возможно применение общего COLORMODE и % совпадения для каждого.

Оптимизации:

Как работает:

Зачем заносил поля вокруг главной анализируемой клетки в переменные когда они и так в переменных массива? Чтобы не пересчитывать необходимый индекс массива для каждого опорного случая. Попробовал сразу на прямую, но после написания проверочных условий на 2 самых простейших комбинации из 3 элементов код выглядел жутко и уже начал немного путаться. Испугавшись того, что будет дальше, решил ввести дополнительные лишние действия для упрощения восприятия. И редактировать/дополнять будет намного проще.
Код модульный разбил на подпрограммы.

Болванку кода можно дописывать под конкретную игру с её особенностями и желание выбора приоритетов в очерёдности ходов. Для мантесумы можно ввести на поле универсальные элементы, которые подходят всем цветам или не подходят никому. Можно отдать предпочтение ходам подряд одного цвета и т.д.

Сам код:
Код: Clickermann
  1. #name "Три в ряд"
  2. // Author: Vint
  3. // Version: 0.4 (09.02.2014)
  4. // For Clickermann v4.9 004
  5.  
  6. //===== ОПЦИИ ==========================//
  7. //////////////////////////////////////////
  8.  
  9. // выводить окно лога  (1 - Выводить, 0 - Не выводить)
  10. $log = 0
  11.  
  12. // Размер поля
  13. $max_X = 6
  14. $max_Y = 6
  15.  
  16. // Размер ячейки
  17. $step = 41
  18.  
  19. // Координаты левого верхнего угла (или находить потом)
  20. $startcoord_X = 518
  21. $startcoord_Y = 413
  22.  
  23. // Имена картинок участников
  24. $bmp_1 = "skull.bmp"
  25. $bmp_2 = "kross.bmp"
  26. $bmp_3 = "red.bmp"
  27. $bmp_4 = "green.bmp"
  28. $bmp_5 = "yellow.bmp"
  29.  
  30. // Префикс. Папка с картинками
  31. $prefix = "textures\"
  32. $colormode = 0        // режим колормода
  33.  
  34. // " строка для правильного отображения на форуме. Убрать!
  35. //////////////////////////////////////////
  36.  
  37.  
  38. // автоопределение ЛВУ в игре
  39. //MOVE($_xmax, $_ymax)
  40. //WAITMS(30)
  41. //GETSCREEN
  42. //IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT($prefix,"base.bmp"))
  43. //   $startcoord_X = $_return1-119
  44. //   $startcoord_Y = $_return2+93
  45. //ELSE
  46. //   LOGWRITE ("Не привязались")
  47. //   HINTPOPUP("Не привязались", "Внимание!")
  48. //   HALT
  49. //END_IF
  50.  
  51.  
  52. //==============================================================================
  53. SUB(LOG_c)  //==== переменные "с" в лог. Отладка ===============================
  54.   LOGWRITE ("$c1 = ", $c1)
  55.   LOGWRITE ("$c2 = ", $c2)
  56.   LOGWRITE ("$c3 = ", $c3)
  57.   LOGWRITE ("$c4 = ", $c4)
  58.   LOGWRITE ("$c5 = ", $c5)
  59.   LOGWRITE ("$c6 = ", $c6)
  60.   LOGWRITE ("$c7 = ", $c7)
  61.   LOGWRITE ("$c8 = ", $c8)
  62.   LOGWRITE ("$c9 = ", $c9)
  63.   LOGWRITE ("$c10 = ", $c10)
  64.   LOGWRITE ("$c12 = ", $c12)
  65.   LOGWRITE ("$c13 = ", $c13)
  66.   LOGWRITE ("$c15 = ", $c15)
  67.   LOGWRITE ("$c16 = ", $c16)
  68.   LOGWRITE ("$c17 = ", $c17)
  69.   LOGWRITE ("$c18 = ", $c18)
  70.   LOGWRITE ("$c19 = ", $c19)
  71.   LOGWRITE ("$c20 = ", $c20)
  72.   LOGWRITE ("$c21 = ", $c21)
  73.   LOGWRITE ("$c22 = ", $c22)
  74.   LOGWRITE ("$c25 = ", $c25)
  75.   LOGWRITE ("$c26 = ", $c26)
  76.   LOGWRITE ("$c27 = ", $c27)
  77. END_SUB
  78.  
  79. //==============================================================================
  80. SUB(FIND, $name_image, $percent, $num)  //==== поиск картинки ==================
  81.   SCANPICTURE($arr_find, $startcoord_X,$startcoord_Y,$startcoord_X+($max_X*$step), $startcoord_Y+($max_Y*$step), STRCONCAT($prefix,$name_image), -1, $percent)
  82.   IF($log=1)
  83.      LOGWRITE ("найдено ", $num, "-х элементов:  ", ARRSIZE($arr_find)/2)
  84.   END_IF
  85.   //UNDEFINE($arr_find)
  86. END_SUB
  87.  
  88. //==============================================================================
  89. SUB(GET, $dif_X, $dif_Y)  //==== проверка клетки ===============================
  90.   $target_X = $main_X+$dif_X
  91.   $target_Y = $main_Y+$dif_Y
  92.   IF(($target_X > -1) & ($target_Y > -1) & ($target_X < $max_X) & ($target_Y < $max_Y))
  93.      $ret = $map[$target_X+$target_Y*$max_X]  // читаем ячейку
  94.   ELSE
  95.      $ret = -1  // вышли за край поля
  96.   END_IF
  97. END_SUB
  98.  
  99. //==============================================================================
  100. SUB(SET, $tmass, $trun_X,$trun_Y,$trunin_X,$trunin_Y)  //=== установка хода ====
  101.   IF($tmass > $mass)
  102.      $mass = $tmass
  103.      $run_X = $trun_X + $main_X
  104.      $run_Y = $trun_Y + $main_Y
  105.      $runin_X = $trunin_X + $main_X
  106.      $runin_Y = $trunin_Y + $main_Y
  107.      IF($log=1)
  108.         LOGWRITE ("$mass ", $mass)
  109.         LOGWRITE ("$main ", $main_X, " / ", $main_Y)
  110.         LOGWRITE ("Относит. ", $trun_X, " / ", $trun_Y, ", ", $trunin_X, " / ", $trunin_Y)
  111.      END_IF
  112.   END_IF
  113. END_SUB
  114.  
  115. //==============================================================================
  116. SUB(OBRABOTKA_CELL)  //==== обработка ячейки главная ===========================
  117.   // формат хода (вес, откудаX,Y, кудаX,Y)
  118.  
  119.   // пропускаем поиск, когда уже лучший вариант
  120.   IF($mass < 7)
  121.      //SET(0,0,0,0,0)  // сбрасываем массу
  122.      $c1 = 0
  123.      $c2 = 0
  124.      $c3 = 0
  125.      $c4 = 0
  126.      $c5 = 0
  127.      $c6 = 0
  128.      $c7 = 0
  129.      $c8 = 0
  130.      $c9 = 0
  131.      $c10 = 0
  132.      $c12 = 0
  133.      $c13 = 0
  134.      $c15 = 0
  135.      $c16 = 0
  136.      $c17 = 0
  137.      $c18 = 0
  138.      $c19 = 0
  139.      $c20 = 0
  140.      $c21 = 0
  141.      $c22 = 0
  142.      $c25 = 0
  143.      $c26 = 0
  144.      $c27 = 0
  145.  
  146.      GET(1,0)
  147.      $c1 = $ret
  148.      IF($c1 ! -1)
  149.         GET(2,0)
  150.         $c2 = $ret
  151.         GET(3,0)
  152.         $c3 = $ret
  153.         GET(4,0)
  154.         $c4 = $ret
  155.      END_IF
  156.  
  157.      GET(-1,0)
  158.      $c9 = $ret
  159.      IF($c9 ! -1)
  160.         GET(-2,0)
  161.         $c10 = $ret
  162.      END_IF
  163.  
  164.      GET(0,1)
  165.      $c15 = $ret
  166.      IF($c15 ! -1)
  167.         GET(0,3)
  168.         $c17 = $ret
  169.         GET(0,4)
  170.         $c18 = $ret
  171.      END_IF
  172.  
  173.      GET(0,-1)
  174.      $c12 = $ret
  175.      IF($c12 ! -1)
  176.         GET(0,-2)
  177.         $c13 = $ret
  178.      END_IF
  179.  
  180.      IF(($c1 ! -1) & ($c15 ! -1))
  181.         GET(2,1)
  182.         $c7 = $ret
  183.         GET(2,2)
  184.         $c8 = $ret
  185.         GET(1,2)
  186.         $c26 = $ret
  187.      END_IF
  188.  
  189.      IF(($c1 ! -1) & ($c12 ! -1))
  190.         GET(2,-1)
  191.         $c5 = $ret
  192.         GET(2,-2)
  193.         $c6 = $ret
  194.         GET(1,-1)
  195.         $c25 = $ret
  196.      END_IF
  197.  
  198.      IF(($c9 ! -1) & ($c12 ! -1))
  199.         GET(-1,-1)
  200.         $c19 = $ret
  201.         GET(-1,-2)
  202.         $c20 = $ret
  203.      END_IF
  204.  
  205.      IF(($c9 ! -1) & ($c15 ! -1))
  206.         GET(-1,1)
  207.         $c21 = $ret
  208.         GET(-1,2)
  209.         $c22 = $ret
  210.      END_IF
  211.  
  212.      // горизонтальные
  213.      IF($c1 = 1)
  214.         IF($mass < 7)
  215.            IF(($c5=1) & ($c6=1) & ($c7=1) & ($c8=1) & ($c3=1))
  216.               SET(7,3,0,2,0)
  217.            ELSE
  218.               IF(($c19=1) & ($c20=1) & ($c21=1) & ($c22=1) & ($c10=1))
  219.                  SET(7,-2,0,-1,0)
  220.               ELSE
  221.                  IF(($c3=1) & ($c4=1) & ($c7=1) & ($c8=1) & ($c5=1))
  222.                     SET(7,2,-1,2,0)
  223.                  ELSE
  224.                     IF(($c3=1) & ($c4=1) & ($c5=1) & ($c6=1) & ($c7=1))
  225.                        SET(7,2,1,2,0)
  226.                     END_IF
  227.                  END_IF
  228.               END_IF
  229.            END_IF
  230.         END_IF
  231.  
  232.         IF($mass < 6)
  233.            IF(($c5=1) & ($c6=1) & ($c3=1) & ($c7=1))
  234.               SET(6,3,0,2,0)
  235.            ELSE
  236.               IF(($c19=1) & ($c20=1) & ($c10=1) & ($c21=1))
  237.                  SET(6,-2,0,-1,0)
  238.               ELSE
  239.                  IF(($c7=1) & ($c8=1) & ($c3=1) & ($c5=1))
  240.                     SET(6,3,0,2,0)
  241.                  ELSE
  242.                     IF(($c21=1) & ($c22=1) & ($c19=1) & ($c10=1))
  243.                        SET(6,-2,0,-1,0)
  244.                     END_IF
  245.                  END_IF
  246.               END_IF
  247.            END_IF
  248.         END_IF
  249.  
  250.         IF($mass < 5)
  251.            IF(($c5=1) & ($c7=1) & ($c3=1))
  252.               SET(5,3,0,2,0)
  253.            ELSE
  254.               IF(($c19=1) & ($c21=1) & ($c10=1))
  255.                  SET(5,-2,0,-1,0)
  256.               ELSE
  257.                  IF(($c3=1) & ($c4=1) & ($c5=1))
  258.                     SET(5,2,-1,2,0)
  259.                  ELSE
  260.                     IF(($c3=1) & ($c4=1) & ($c7=1))
  261.                        SET(5,2,1,2,0)
  262.                     ELSE
  263.                        IF(($c5=1) & ($c6=1) & ($c3=1))
  264.                           SET(5,3,0,2,0)
  265.                        ELSE
  266.                           IF(($c5=1) & ($c6=1) & ($c7=1))
  267.                              SET(5,2,1,2,0)
  268.                           ELSE
  269.                              IF(($c19=1) & ($c20=1) & ($c10=1))
  270.                                 SET(5,-2,0,-1,0)
  271.                              ELSE
  272.                                 IF(($c19=1) & ($c20=1) & ($c21=1))
  273.                                    SET(5,-1,1,-1,0)
  274.                                 ELSE
  275.                                    IF(($c7=1) & ($c8=1) & ($c3=1))
  276.                                       SET(5,3,0,2,0)
  277.                                    ELSE
  278.                                       IF(($c7=1) & ($c8=1) & ($c5=1))
  279.                                          SET(5,2,-1,2,0)
  280.                                       ELSE
  281.                                          IF(($c21=1) & ($c22=1) & ($c10=1))
  282.                                             SET(5,-2,0,-1,0)
  283.                                          ELSE
  284.                                             IF(($c21=1) & ($c22=1) & ($c19=1))
  285.                                                SET(5,-1,-1,-1,0)
  286.                                             END_IF
  287.                                          END_IF
  288.                                       END_IF
  289.                                    END_IF
  290.                                 END_IF
  291.                              END_IF
  292.                           END_IF
  293.                        END_IF
  294.                     END_IF
  295.                  END_IF
  296.               END_IF
  297.            END_IF
  298.         END_IF
  299.  
  300.         IF($mass < 4)
  301.            IF(($c3=1) & ($c5=1))
  302.               SET(4,2,-1,2,0)
  303.            ELSE
  304.               IF(($c3=1) & ($c7=1))
  305.                  SET(4,2,1,2,0)
  306.               ELSE
  307.                  IF(($c10=1) & ($c19=1))
  308.                     SET(4,-1,-1,-1,0)
  309.                  ELSE
  310.                     IF(($c10=1) & ($c21=1))
  311.                        SET(4,-1,1,-1,0)
  312.                     END_IF
  313.                  END_IF
  314.               END_IF
  315.            END_IF
  316.         END_IF
  317.  
  318.         IF($mass < 3)
  319.            IF(($c3=1))
  320.               SET(3,3,0,2,0)
  321.            ELSE
  322.               IF(($c5=1))
  323.                  SET(3,2,-1,2,0)
  324.               ELSE
  325.                  IF(($c7=1))
  326.                     SET(3,2,1,2,0)
  327.                  ELSE
  328.                     IF(($c10=1))
  329.                        SET(3,-2,0,-1,0)
  330.                     ELSE
  331.                        IF(($c19=1))
  332.                           SET(3,-1,-1,-1,0)
  333.                        ELSE
  334.                           IF(($c21=1))
  335.                              SET(3,-1,1,-1,0)
  336.                           END_IF
  337.                        END_IF
  338.                     END_IF
  339.                  END_IF
  340.               END_IF
  341.            END_IF
  342.         END_IF
  343.      END_IF
  344.  
  345.      // вертикальные
  346.      IF($c15 = 1)
  347.         IF($mass < 5)
  348.            IF(($c22=1) & ($c26=1) & ($c17=1))
  349.               SET(5,0,3,0,2)
  350.            ELSE
  351.               IF(($c19=1) & ($c25=1) & ($c13=1))
  352.                  SET(5,0,-2,0,-1)
  353.               ELSE
  354.                  IF(($c17=1) & ($c18=1) & ($c22=1))
  355.                     SET(5,-1,2,0,2)
  356.                  ELSE
  357.                     IF(($c17=1) & ($c18=1) & ($c26=1))
  358.                        SET(5,1,2,0,2)
  359.                     END_IF
  360.                  END_IF
  361.               END_IF
  362.            END_IF
  363.         END_IF
  364.  
  365.         IF($mass < 4)
  366.            IF(($c17=1) & ($c22=1))
  367.               SET(4,-1,2,0,2)
  368.            ELSE
  369.               IF(($c17=1) & ($c26=1))
  370.                  SET(4,1,2,0,2)
  371.               ELSE
  372.                  IF(($c13=1) & ($c19=1))
  373.                     SET(4,-1,-1,0,-1)
  374.                  ELSE
  375.                     IF(($c13=1) & ($c25=1))
  376.                        SET(4,1,-1,0,-1)
  377.                     END_IF
  378.                  END_IF
  379.               END_IF
  380.            END_IF
  381.         END_IF
  382.  
  383.         IF($mass < 3)
  384.            IF(($c13=1))
  385.               SET(3,0,-2,0,-1)
  386.            ELSE
  387.               IF(($c19=1))
  388.                  SET(3,-1,-1,0,-1)
  389.               ELSE
  390.                  IF(($c25=1))
  391.                     SET(3,1,-1,0,-1)
  392.                  ELSE
  393.                     IF(($c17=1))
  394.                        SET(3,0,3,0,2)
  395.                     ELSE
  396.                        IF(($c22=1))
  397.                           SET(3,-1,2,0,2)
  398.                        ELSE
  399.                           IF(($c26=1))
  400.                              SET(3,1,2,0,2)
  401.                           END_IF
  402.                        END_IF
  403.                     END_IF
  404.                  END_IF
  405.               END_IF
  406.            END_IF
  407.         END_IF
  408.      END_IF
  409.  
  410.      IF($mass < 3)
  411.         GET(1,1)
  412.         $c27 = $ret
  413.         GET(0,2)
  414.         $c16 = $ret
  415.         // уникальная тройка гор.
  416.         IF(($c2=1) & ($c25=1))
  417.            SET(3,1,-1,1,0)
  418.         ELSE
  419.            IF(($c2=1) & ($c27=1))
  420.               SET(3,1,1,1,0)
  421.            ELSE
  422.               // уникальная тройка вер.
  423.               IF(($c16=1) & ($c21=1))
  424.                  SET(3,-1,1,0,1)
  425.               ELSE
  426.                  IF(($c16=1) & ($c27=1))
  427.                     SET(3,1,1,0,1)
  428.                  END_IF
  429.               END_IF
  430.            END_IF
  431.         END_IF
  432.      END_IF
  433. //      IF(($main_X=4) & ($main_Y=2))
  434. //         LOGWRITE ("$main ", $main_X, " / ", $main_Y)
  435. //         LOG_c()
  436. //      END_IF
  437.   END_IF
  438. END_SUB
  439.  
  440. //==============================================================================
  441. SUB(RUN)  //=== ход ============================================================
  442.   $CStart_X = ($startcoord_X + $run_X*$step) + RND(10,$step-10)
  443.   $CStart_Y = ($startcoord_Y + $run_Y*$step) + RND(10,$step-10)
  444.   $CEnd_X = ($startcoord_X + $runin_X*$step) + RND(10,$step-10)
  445.   $CEnd_Y = ($startcoord_Y + $runin_Y*$step) + RND(10,$step-10)
  446.   LCLICK($CStart_X,$CStart_Y)
  447.   WAITMS(200)
  448.   LCLICK($CEnd_X,$CEnd_Y)
  449.   WAITMS(200)
  450.   MOVE($_xmax, $_ymax)
  451.   WAITMS(300)
  452. END_SUB
  453.  
  454. //==============================================================================
  455. SUB(PROCESSING)  //==== обработка полученного массива ==========================
  456.   // заполняем массив 0
  457.   UNDEFINE($map)
  458.   FOR($i,$i < $max_X*$max_Y)
  459.      ARRPUSH($map, 0)
  460.   END_CYC
  461.   //LOGWRITE ("размер $map  ", ARRSIZE($map))
  462.  
  463.   // строим карту найденных
  464.   FOR($i, $i < ARRSIZE($arr_find), 2)
  465.      $find_X = $arr_find[$i]
  466.      $find_Y = $arr_find[$i+1]
  467.  
  468.      $sost_X = INT(($find_X-$startcoord_X)/$step)
  469.      $sost_Y = INT(($find_Y-$startcoord_Y)/$step)
  470.      //LOGWRITE ("ячейка ",$sost_X+$sost_Y*$max_X)
  471.      //LOGWRITE ("коорд. ",$sost_X, " / ", $sost_Y)
  472.      $map[$sost_X+$sost_Y*$max_X] = 1
  473.   END_CYC
  474.  
  475.   // выводим поле в лог
  476.   IF($log=1)
  477.      FOR($i, $i < ARRSIZE($map), $max_X)
  478.         LOGWRITE ($map[$i],$map[$i+1],$map[$i+2],$map[$i+3],$map[$i+4],$map[$i+5])
  479.      END_CYC
  480.      LOGWRITE (" ")
  481.   END_IF
  482.   UNDEFINE($arr_find)
  483.  
  484.   // обходим поле
  485.   FOR($cell, $cell < ARRSIZE($map))
  486.      $main_Y = INT($cell/$max_X)
  487.      $main_X = $cell-$main_Y*$max_X
  488.      //LOGWRITE ("ячейка ", $main_X, " / ", $main_Y)
  489.  
  490.      IF($map[$cell] = 1)
  491.         OBRABOTKA_CELL()
  492.      END_IF
  493.   END_CYC
  494.   IF($log=1)
  495.      LOGWRITE ("$mass ", $mass)
  496.      LOGWRITE ("Лучший на цвет ", $run_X, " / ", $run_Y, ", ", $runin_X, " / ", $runin_Y)
  497.   END_IF
  498. END_SUB
  499.  
  500. //==============================================================================
  501.  
  502.  
  503. //===== ПРОГРАММА ==============================================================
  504.  
  505. LOGCLEAR
  506. IF($log=1)
  507.   LOGSHOW (1,$_xmax-335,28) // отображение окна лога
  508.   WNDSIZE(WNDFIND("Clickermann - Лог"),336,560) // изменения размеров окна лога 260
  509. END_IF
  510.  
  511. $start = $_ms
  512. $mass = 0
  513. $run_X = 0
  514. $run_Y = 0
  515. $runin_X = 0
  516. $runin_Y = 0
  517. $ret = 0
  518.  
  519. // делаем скрин
  520. MOVE($_xmax, $_ymax)
  521. WAITMS(30)
  522. GETSCREEN
  523. IF($colormode ! 0)
  524.   COLORMODE($colormode, $startcoord_X,$startcoord_Y,$startcoord_X+($max_X*$step), $startcoord_Y+($max_Y*$step))
  525. END_IF
  526.  
  527. // ищем все первые элементы и заносим в массив
  528. FIND($bmp_1, 100, 1)
  529. PROCESSING()
  530.  
  531. // ищем все вторые элементы и заносим в массив
  532. FIND($bmp_2, 75, 2)
  533. PROCESSING()
  534.  
  535. // ищем все третьи элементы и заносим в массив
  536. FIND($bmp_3, 100, 3)
  537. PROCESSING()
  538.  
  539. // ищем все четвёртые элементы и заносим в массив
  540. FIND($bmp_4, 100, 4)
  541. PROCESSING()
  542.  
  543. // ищем все пятые элементы и заносим в массив
  544. FIND($bmp_5, 100, 5)
  545. PROCESSING()
  546.  
  547. LOGWRITE ("Время выполнения ", $_ms-$start, " мс")
  548.  
  549. IF($mass ! 0)
  550.   RUN()
  551. END_IF
  552.  
  553. HALT

Схемы отобранных комбинаций и скрипт во вложении.
Некоторые тесты, на которых тренировался из "небеса" здесь: http://yadi.sk/d/i-qJoA5jHgcNo

Название: Re: Три в ряд
Отправлено: Луций от Декабрь 25, 2014, 09:05:13 pm
пытался разобраться в коде, сломал мозг и начал писать свой заново, может еще кто работал над подобным?
Название: Re: Три в ряд
Отправлено: Vint от Декабрь 26, 2014, 12:38:08 pm
А там вроде особо и переделывать нечего. Добавить обнуление переменных в FOR-ы типа $i=0

Из мозговыносящего там только задание условий, всё остальное вроде понятно и логично.
Название: Re: Три в ряд
Отправлено: Karabas от Декабрь 07, 2015, 12:05:55 pm
ну а есть готовый скрипт под 4.11? вот бы пещерку на автомат поставить :)
Название: Re: Три в ряд
Отправлено: Karabas от Декабрь 07, 2015, 03:27:31 pm
ОНо то понятно. ну вот пещеру прогоном включить проблем нет. настроить клик по координатам и все. аранея и скорп другие координаты тут понятно если мне надо команду закоментировал и все, хотя опять таки а было бы не плохо их бить на автомате а дроп в сундук кидать, а вот с сундуками сложнее у малых кладов с червями совпадают координаты прогона, как с ними быть. средние вроде нет, большие клады не знаю ... вот и подумал было бы не плохо сделать скрипт с пещера + битва .
Название: Re: Три в ряд
Отправлено: FJ от Январь 28, 2016, 01:57:28 pm
Не могу никак понять.
Я получаю массив типа:
------
-о-о--
--о---
------
А вот понять как мне програмно сдвинуть среднюю картинку наверх, никак не могу.
Можете этот момент подробней написать?
Название: Re: Три в ряд
Отправлено: Vint от Январь 28, 2016, 03:36:31 pm
Что это за массив такой и как его создавали? Что означают прочерки? Какой его формат?
Название: Re: Три в ряд
Отправлено: FJ от Январь 28, 2016, 06:20:15 pm
Считываю по очереди каждую картинку, например только красный шарик, записываю положения этих шариков в файл.
например считал строку, нашел там 1 красный шарик с левого краю, получил картину 0-----
Считал остальные 5 рядов, получил координаты остальных красных шариков, дальше вот хочу понять, как проанализировать эти данные, как понять, какой ход сделать?
Пойму на примере 1 шарика, буду анализировать остальные, в идеале хочу сделать так, чтобы при совершении хода просчитывалось, сколько еще может шариков соединиться в 3 и больше, чтобы в последующем за 1 ход получить как можно больше очков.
Название: Re: Три в ряд
Отправлено: Vint от Январь 29, 2016, 08:16:24 am
дальше вот хочу понять, как проанализировать эти данные, как понять, какой ход сделать?
Так об этом весь первый пост и весь скрипт.
Тремя строками здесь не отделаться.

Вкратце, нужно беря за точку отсчёта каждый найденный шарик, проверять все нужные соседние места на предмет совпадения с заданными шаблонами.
Название: Re: Три в ряд
Отправлено: Tochka от Август 07, 2016, 02:38:18 am
Замечательная основа скрипта! Всё продумано до деталей. Немного логики и ты в шоколаде. Я до сих пор под впечатлением от работы мозга автора. Даже перебралась из гостей форума в пользователи. Кстати, гостям вложений не увидеть. Совершенно не жалею, что потратила время на разбор и в моем случае изучение этого материала. Во-первых, это оказалось занимательно. Во-вторых, я многому научилась из этой, аккуратно оформленной, работы. А в-третьих получила нужный результат.
Vint, спасибо, что делитесь своими опытом, наработками и советами! Новых идей Вам и вдохновения!
Тема очень актуальна, не дам ей состариться  ;D
Название: Re: Три в ряд
Отправлено: Кликермен от Август 07, 2016, 06:43:48 am
Замечательная основа скрипта! Всё продумано до деталей. Немного логики и ты в шоколаде. Я до сих пор под впечатлением от работы мозга автора. Даже перебралась из гостей форума в пользователи. Кстати, гостям вложений не увидеть. Совершенно не жалею, что потратила время на разбор и в моем случае изучение этого материала. Во-первых, это оказалось занимательно. Во-вторых, я многому научилась из этой, аккуратно оформленной, работы. А в-третьих получила нужный результат.
Vint, спасибо, что делитесь своими опытом, наработками и советами! Новых идей Вам и вдохновения!
Тема очень актуальна, не дам ей состариться  ;D
Это идеальный пользователь кликера! нет ни слова: почему не может найти картинку, а сразу четко и по делу: разобрался в скрипте, поправила недочеты, спасибо за чудную вещь)
Название: Re: Три в ряд
Отправлено: Tochka от Август 07, 2016, 02:15:13 pm
Кликермен, благодарю  :)

Решила дополнить свой отзыв.
Когда возникла необходимость в боте для игры этого вида, захотелось найти какой-нибудь рабочий вариант скрипта для Clickermann, чтобы самой не мудрить мучительно и долго. Найдя на форуме код в 500 строк, мне, честно говоря, не очень захотелось вникать. А понимать обязательно надо. Иначе как потом что-то изменить на свой вкус? Быть может, я не очень хорошо умею пользоваться поисковыми службами, но в итоге всё равно вернулась к варианту на форуме.
Учитывая, что знаний - рюкзак новичка, разбиралась долго. Вопросы, конечно же, возникали в процессе разбора. Но все их вполне реально решить самостоятельно. Здесь главные помощники: справка Clickermann и ВСЯ информация автора, прилагаемая к скрипту-основе (а так же до него и после). И хотя сам код не с дефицитом нужных пояснений, Vint не поленился изложить пошаговое описание работы скрипта (фактически - карта). Хочу заметить, что являюсь пользователем версии 4.11 003 и обратить внимание на ключевое слово в названии темы - основа. Вывод из сказанного для версии 4.12, полагаю, очевиден.
В скрипте разбиралась пошагово. Работоспособность каждой новой части мне приносила новую радость, как от маленькой победы. Относительно поиска картинок вопроса не возникло. Очень понравился способ просмотра всех участников из одной папки. Поиск комбинаций – домашнее задание на мышление. Особое впечатление от Оптимизации и действительной возможности - "Болванку кода можно дописывать под конкретную игру с её особенностями и желанием выбора приоритетов в очерёдности ходов" (см.описание).
Я не рекламирую проект, форум и работу в данной теме, а оставляю отзыв довольного пользователя замечательной программы и уникального скрипта. Уверена, достойных аналогов ни у того, ни у другого на данный момент нет.  О преимуществах зарегистрированного пользователя форума (поиск, просмотр вложений) упоминаю потому что, если бы зарегистрировалась ранее, то возможно мне было бы немного легче изучать скрипт.
Не ленитесь думать – это полезно (наверное). От пользователя требуется минимум усилий, максимум за нас уже сделали автор скрипта и создатель Clickermann. По моему скромному мнению, когда игр вида «Три в ряд», как летом листьев на деревьях, имеет смысл затратить время и радоваться отличному результату.
Объемно «дополнила»… Кто прочтет полностью, тому зачет.  ;D
Название: Re: Три в ряд
Отправлено: Sanriell от Август 21, 2016, 01:01:46 am
Не мог понять почему не находит картинки, оказалось что все картинки анимированные и постоянно крутятся то по часовой то против. Возникла идея определять каждый элемент по уникальному цвету пикселя. Подскажите, какие правки надо внести в этот код, чтобы поиск шёл не через SCANPICTURE.
Название: Re: Три в ряд
Отправлено: Vint от Август 22, 2016, 09:18:08 am
Не мог понять почему не находит картинки, оказалось что все картинки анимированные и постоянно крутятся то по часовой то против. Возникла идея определять каждый элемент по уникальному цвету пикселя. Подскажите, какие правки надо внести в этот код, чтобы поиск шёл не через SCANPICTURE.

SCANPXL. Если ты конечно найдёшь уникальные цвета. Может сработать если там всё нарисовано ярко и "мультяшно", просто качается. Но если там тени-переливы и прочие фейерверки, то помучаешься изрядно.
Название: Re: Три в ряд
Отправлено: Tochka от Февраль 28, 2017, 03:22:07 pm
Работа идеальная. Никаких недочетов нет. Абсолютно рабочий код.
Vint, мои аплодисменты ещё раз.

Результат в группе VK:
https://vk.com/video-14410794_456239051

9 на 9 квадратов, 7 цветов. Время выполнения (поиск лучшей комбинации и осуществление хода) в среднем 3 сек.
Название: Re: Три в ряд
Отправлено: salovan от Октябрь 12, 2017, 01:43:07 pm
Непонимаю, картинки ищет, в логе отображается "Найдено элементов = 6" но остальные нули. Разъясните плз что не так делаю?
Ничего не понимая в массивах -  несовсем понимаю что в итоге получается? сам ход вроде не делает, нигде не отображает... Версия 4.11 003

14:33:57 найдено 1-х элементов:  0
14:33:57 
14:33:57 $mass 0
14:33:57 Лучшый на цвет 0 / 0, 0 / 0
14:33:58 найдено 2-х элементов:  7
14:33:58 
14:33:58 $mass 0
14:33:58 Лучшый на цвет 0 / 0, 0 / 0
14:33:58 найдено 3-х элементов:  10
14:33:58 
14:33:58 $mass 0
14:33:58 Лучшый на цвет 0 / 0, 0 / 0
14:33:58 найдено 4-х элементов:  8
14:33:58 
14:33:58 $mass 0
14:33:58 Лучшый на цвет 0 / 0, 0 / 0
14:33:58 найдено 5-х элементов:  5
14:33:58 
14:33:58 $mass 0
14:33:58 Лучшый на цвет 0 / 0, 0 / 0
14:33:58 Время выполнения 155 мс
Название: Re: Три в ряд
Отправлено: Голубок от Апрель 12, 2018, 03:35:12 am
Приветствую.
интересно конечно разобраться самому в коде, но времени как всегда не хватает.
интересует частный вариант скрипта для игры типа три в ряд.
онлайн игра  1100ad.com   (три в ряд там в разделе мини игр появляется на некоторый период по праздникам)
поле 8 х 8,   7 цветов кажется + "супер кристал " для каждого цвета + 1 "самый супер кристал" для всех цветов
+ молоточки + звездочки
вознаграждение обсуждаемо.
Заранее спасибо за ответ.
Название: Re: Три в ряд
Отправлено: Mishka0711 от Август 24, 2018, 01:30:53 am
Спасибо автору за тему, думал написать что-то подобное под диамант 3 в ряд, но нашел этот код. Большую часть взял за основу своего ядра, но процедуру OBRABOTKA_CELL так и не смог понять. Пришлось ее написать по своему. для упрощения были добавлены доп. массивы к массиву $map, $mapX и $mapY в которых просто находится положение ячейки в числах 0-9 по горизонтали и вертикали которые помогают ориентироваться на поле и не искать за его пределами. Также с их помощью в логе генерируется отчет о каждой комбинации в виде
2:27:08 4-кл 4-0 4-1 3-2 4-3
2:27:08 3-кл 0-4 2-4 3-4
2:27:08 3-кл 2-4 3-4 4-3

также были добавлены доп массивы-карты аналогичные Map из исходного кода с координатами каждой ячейки. По перебору вариантов и нахождения каждой комбинации из них сразу же копируются две пары координат откуда-куда переместить элемент. Набиваются они в 3 итоговых массива 5-кл, 4-кл, 3-кл. на основании которых потом делается отчет в логе типа:
2:27:08 найдено 5-кл комбинаций:  0
2:27:08 найдено 4-кл комбинаций:  1
2:27:08 найдено 3-кл комбинаций:  7
и также на основании 3х итоговых массивов уже можно гибко программировать стратегию автоигры либо по макс комбинациям либо по приоритетным элементам или по определенному порядку действий

если что ниже также картинка из моей игры для нагрядности


SUB(OBRABOTKA_CELL2)
   // print("îáðàáîòêà")
   if($mapX[$cell]<5)   //ïÿòèêëåòî÷íàÿ ïî ãîðèçîíòàëè
      if(($map[$cell+1]=1)&($map[$cell+3]=1)&($map[$cell+4]=1))
         if($mapY[$cell]>0)
            if($map[$cell+2-9]=1)
               print("5-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1],"-",$mapY[$cell+1]," ",$mapX[$cell+2-9],"-",$mapY[$cell+2-9]," ",$mapX[$cell+3],"-",$mapY[$cell+3]," ",$mapX[$cell+4],"-",$mapY[$cell+4]," ")
               arrpush($5kl,$mapcordX[$cell+2-9])
               arrpush($5kl,$mapcordY[$cell+2-9])
               arrpush($5kl,$mapcordX[$cell+2])
               arrpush($5kl,$mapcordY[$cell+2])
            end_if
         end_if
         if($mapY[$cell]<8)
            if($map[$cell+2+9]=1)
               //        print($map[$cell+3])
               print("5-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1],"-",$mapY[$cell+1]," ",$mapX[$cell+2+9],"-",$mapY[$cell+2+9]," ",$mapX[$cell+3],"-",$mapY[$cell+3]," ",$mapX[$cell+4],"-",$mapY[$cell+4]," ")
               arrpush($5kl,$mapcordX[$cell+2+9])
               arrpush($5kl,$mapcordY[$cell+2+9])
               arrpush($5kl,$mapcordX[$cell+2])
               arrpush($5kl,$mapcordY[$cell+2])
            end_if
         end_if
      end_if
   end_if
   
   $klass=0
   if($mapY[$cell]<5)   //ïÿòèêëåòî÷íàÿ ïî âåðòèêàëè
      if(($map[$cell+1*9]=1)&($map[$cell+3*9]=1)&($map[$cell+4*9]=1))
         if($mapX[$cell]>0)
            if($map[$cell+2*9-1]=1)
               print("5-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1*9],"-",$mapY[$cell+1*9]," ",$mapX[$cell+2*9-1],"-",$mapY[$cell+2*9-1]," ",$mapX[$cell+3*9],"-",$mapY[$cell+3*9]," ",$mapX[$cell+4*9],"-",$mapY[$cell+4*9]," ")
               arrpush($5kl,$mapcordX[$cell+2*9-1])
               arrpush($5kl,$mapcordY[$cell+2*9-1])
               arrpush($5kl,$mapcordX[$cell+2*9])
               arrpush($5kl,$mapcordY[$cell+2*9])
            end_if
         end_if
         if($mapX[$cell]<8)
            if($map[$cell+2*9+1]=1)
               //        print($map[$cell+3*9])
               print("5-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1*9],"-",$mapY[$cell+1*9]," ",$mapX[$cell+2*9+1],"-",$mapY[$cell+2*9+1]," ",$mapX[$cell+3*9],"-",$mapY[$cell+3*9]," ",$mapX[$cell+4*9],"-",$mapY[$cell+4*9]," ")
               arrpush($5kl,$mapcordX[$cell+2*9+1])
               arrpush($5kl,$mapcordY[$cell+2*9+1])
               arrpush($5kl,$mapcordX[$cell+2*9])
               arrpush($5kl,$mapcordY[$cell+2*9])
            end_if
         end_if
      end_if
   end_if
   
   
   
   
   
   if($mapX[$cell]<6)   //÷åòûðåõêëåòî÷íàÿ ïî ãîðèçîíòàëè
      if(($map[$cell+1]=1)&($map[$cell+3]=1))
         if($mapY[$cell]>0)
            if($map[$cell+2-9]=1)
               print("4-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1],"-",$mapY[$cell+1]," ",$mapX[$cell+2-9],"-",$mapY[$cell+2-9]," ",$mapX[$cell+3],"-",$mapY[$cell+3]," ")
               arrpush($4kl,$mapcordX[$cell+2-9])
               arrpush($4kl,$mapcordY[$cell+2-9])
               arrpush($4kl,$mapcordX[$cell+2])
               arrpush($4kl,$mapcordY[$cell+2])
            end_if
         end_if
         if($mapY[$cell]<8)
            if($map[$cell+2+9]=1)
               print("4-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1],"-",$mapY[$cell+1]," ",$mapX[$cell+2+9],"-",$mapY[$cell+2+9]," ",$mapX[$cell+3],"-",$mapY[$cell+3]," ")
               arrpush($4kl,$mapcordX[$cell+2+9])
               arrpush($4kl,$mapcordY[$cell+2+9])
               arrpush($4kl,$mapcordX[$cell+2])
               arrpush($4kl,$mapcordY[$cell+2])
            end_if
         end_if
      end_if
     
      if(($map[$cell+2]=1)&($map[$cell+3]=1))
         if($mapY[$cell]>0)
            if($map[$cell+1-9]=1)
               print("4-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1-9],"-",$mapY[$cell+1-9]," ",$mapX[$cell+2],"-",$mapY[$cell+2]," ",$mapX[$cell+3],"-",$mapY[$cell+3]," ")
               arrpush($4kl,$mapcordX[$cell+1-9])
               arrpush($4kl,$mapcordY[$cell+1-9])
               arrpush($4kl,$mapcordX[$cell+1])
               arrpush($4kl,$mapcordY[$cell+1])
            end_if
         end_if
         if($mapY[$cell]<8)
            if($map[$cell+1+9]=1)
               print("4-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1+9],"-",$mapY[$cell+1+9]," ",$mapX[$cell+2],"-",$mapY[$cell+2]," ",$mapX[$cell+3],"-",$mapY[$cell+3]," ")
               arrpush($4kl,$mapcordX[$cell+1+9])
               arrpush($4kl,$mapcordY[$cell+1+9])
               arrpush($4kl,$mapcordX[$cell+1])
               arrpush($4kl,$mapcordY[$cell+1])
            end_if
         end_if
      end_if
   end_if
   
   if($mapY[$cell]<6)   //÷åòûðåõêëåòî÷íàÿ ïî âåðòèêàëè
      if(($map[$cell+1*9]=1)&($map[$cell+3*9]=1))
         if($mapX[$cell]>0)
            if($map[$cell+2*9-1]=1)
               print("4-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1*9],"-",$mapY[$cell+1*9]," ",$mapX[$cell+2*9-1],"-",$mapY[$cell+2*9-1]," ",$mapX[$cell+3*9],"-",$mapY[$cell+3*9]," ")
               arrpush($4kl,$mapcordX[$cell+2*9-1])
               arrpush($4kl,$mapcordY[$cell+2*9-1])
               arrpush($4kl,$mapcordX[$cell+2*9])
               arrpush($4kl,$mapcordY[$cell+2*9])
            end_if
         end_if
         if($mapX[$cell]<8)
            if($map[$cell+2*9+1]=1)
               print("4-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1*9],"-",$mapY[$cell+1*9]," ",$mapX[$cell+2*9+1],"-",$mapY[$cell+2*9+1]," ",$mapX[$cell+3*9],"-",$mapY[$cell+3*9]," ")
               arrpush($4kl,$mapcordX[$cell+2*9+1])
               arrpush($4kl,$mapcordY[$cell+2*9+1])
               arrpush($4kl,$mapcordX[$cell+2*9])
               arrpush($4kl,$mapcordY[$cell+2*9])
            end_if
         end_if
      end_if
     
      if(($map[$cell+2*9]=1)&($map[$cell+3*9]=1))
         if($mapX[$cell]>0)
            if($map[$cell+1*9-1]=1)
               print("4-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1*9-1],"-",$mapY[$cell+1*9-1]," ",$mapX[$cell+2*9],"-",$mapY[$cell+2*9]," ",$mapX[$cell+3*9],"-",$mapY[$cell+3*9]," ")
               arrpush($4kl,$mapcordX[$cell+1*9-1])
               arrpush($4kl,$mapcordY[$cell+1*9-1])
               arrpush($4kl,$mapcordX[$cell+1*9])
               arrpush($4kl,$mapcordY[$cell+1*9])
            end_if
         end_if
         if($mapX[$cell]<8)
            if($map[$cell+1*9+1]=1)
               print("4-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1*9+1],"-",$mapY[$cell+1*9+1]," ",$mapX[$cell+2*9],"-",$mapY[$cell+2*9]," ",$mapX[$cell+3*9],"-",$mapY[$cell+3*9]," ")
               arrpush($4kl,$mapcordX[$cell+1*9+1])
               arrpush($4kl,$mapcordY[$cell+1*9+1])
               arrpush($4kl,$mapcordX[$cell+1*9])
               arrpush($4kl,$mapcordY[$cell+1*9])
            end_if
         end_if
      end_if
   end_if
   
   if($mapX[$cell]<6)   //òðåõêëåòî÷íàÿ ïî ãîðèçîíòàëè
      if($map[$cell+1]=1)
         if($map[$cell+3]=1)
            print("3-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1],"-",$mapY[$cell+1]," ",$mapX[$cell+3],"-",$mapY[$cell+3]," ")
            arrpush($3kl,$mapcordX[$cell+3])
            arrpush($3kl,$mapcordY[$cell+3])
            arrpush($3kl,$mapcordX[$cell+2])
            arrpush($3kl,$mapcordY[$cell+2])
         end_if
      end_if
   end_if
   
   if($mapX[$cell]<7)   //òðåõêëåòî÷íàÿ ïî ãîðèçîíòàëè
      if($map[$cell+1]=1)
         if($mapY[$cell]>0)
            if($map[$cell+2-9]=1)
               print("3-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1],"-",$mapY[$cell+1]," ",$mapX[$cell+2-9],"-",$mapY[$cell+2-9]," ")
               arrpush($3kl,$mapcordX[$cell+2-9])
               arrpush($3kl,$mapcordY[$cell+2-9])
               arrpush($3kl,$mapcordX[$cell+2])
               arrpush($3kl,$mapcordY[$cell+2])
            end_if
         end_if
         if($mapY[$cell]<8)
            if($map[$cell+2+9]=1)
               print("3-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1],"-",$mapY[$cell+1]," ",$mapX[$cell+2+9],"-",$mapY[$cell+2+9]," ")
               arrpush($3kl,$mapcordX[$cell+2+9])
               arrpush($3kl,$mapcordY[$cell+2+9])
               arrpush($3kl,$mapcordX[$cell+2])
               arrpush($3kl,$mapcordY[$cell+2])
            end_if
         end_if
      end_if
      if($map[$cell+2]=1)
         if($map[$cell+3]=1)
            print("3-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+2],"-",$mapY[$cell+2]," ",$mapX[$cell+3],"-",$mapY[$cell+3]," ")
            arrpush($3kl,$mapcordX[$cell])
            arrpush($3kl,$mapcordY[$cell])
            arrpush($3kl,$mapcordX[$cell+1])
            arrpush($3kl,$mapcordY[$cell+1])
         end_if
         if($mapY[$cell]>0)
            if($map[$cell+1-9]=1)
               print("3-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1-9],"-",$mapY[$cell+1-9]," ",$mapX[$cell+2],"-",$mapY[$cell+2]," ")
               arrpush($3kl,$mapcordX[$cell+1-9])
               arrpush($3kl,$mapcordY[$cell+1-9])
               arrpush($3kl,$mapcordX[$cell+1])
               arrpush($3kl,$mapcordY[$cell+1])
            end_if
         end_if
         if($mapY[$cell]<8)
            if($map[$cell+1+9]=1)
               print("3-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1+9],"-",$mapY[$cell+1+9]," ",$mapX[$cell+2],"-",$mapY[$cell+2]," ")
               arrpush($3kl,$mapcordX[$cell+1+9])
               arrpush($3kl,$mapcordY[$cell+1+9])
               arrpush($3kl,$mapcordX[$cell+1])
               arrpush($3kl,$mapcordY[$cell+1])
            end_if
         end_if
      end_if
      if($mapY[$cell]>0)
         if(($map[$cell+1-9]=1)&($map[$cell+2-9]=1))
            print("3-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1-9],"-",$mapY[$cell+1-9]," ",$mapX[$cell+2-9],"-",$mapY[$cell+2-9]," ")
            arrpush($3kl,$mapcordX[$cell])
            arrpush($3kl,$mapcordY[$cell])
            arrpush($3kl,$mapcordX[$cell-9])
            arrpush($3kl,$mapcordY[$cell-9])
         end_if
      end_if
      if($mapY[$cell]<8)
         if(($map[$cell+1+9]=1)&($map[$cell+2+9]=1))
            print("3-êë ",$mapX[$cell],"-",$mapY[$cell]," ",$mapX[$cell+1+9],"-",$mapY[$cell+1+9]," ",$mapX[$cell+2+9],"-",$mapY[$cell+2+9]," ")
            arrpush($3kl,$mapcordX[$cell])
            arrpush($3kl,$mapcordY[$cell])
            arrpush($3kl,$mapcordX[$cell+9])
            arrpush($3kl,$mapcordY[$cell+9])
         end_if
      end_if
   end_if
   
end_sub
Название: Re: Три в ряд
Отправлено: konct777 от Сентябрь 25, 2018, 07:45:58 pm
А у меня тоже не кликает. Мышь уходит в нижний правый. Проверяю на "Сокровище Мотсесумы". Подскажите где почитать как правильно делать картинки ?
Название: Re: Три в ряд
Отправлено: konct777 от Сентябрь 25, 2018, 08:42:19 pm
Картинки есть, но кликер, наверное их не находит.. ?
Название: Re: Три в ряд
Отправлено: PasqualeAcosta от Октябрь 21, 2018, 11:16:11 am
Есть игра 3 в ряд, Gems of War. Только там поля 8х8. Подсобите, с чего вообще начать переделку скрипта под нее?
Возможно кто то уже делал под эту игру?
Поле там такое как на скрине и 7 элементов (цветов) сборки.

Название: Re: Три в ряд
Отправлено: PasqualeAcosta от Октябрь 21, 2018, 12:01:48 pm
7 цветов имелось ввиду с сейфами, они на скрине есть.
Название: Re: Три в ряд
Отправлено: Anch665 от Март 16, 2020, 04:28:35 pm
А у вас случаем не осталось этого бота?
Название: Re: Три в ряд
Отправлено: kanmisha от Сентябрь 14, 2021, 01:49:34 pm
Основа для автоматизации игр типа "три в ряд".
 "Сокровища Мантесумы", бой в "Небеса" и т.п.


вопрос возникал здесь http://crapware.aidf.org/forum/index.php?topic=359.0
и ВКонтакте http://vk.com/topic-14410794_29283841

Захотелось решить хотя бы основы. Базис для подобных игр.

Скрипт писался для версии Clickermann v4.9 004
Пробовал и отлаживал на Небеса-х.
Скрипт ищет и выстраивает элементы в комбинации. Проходит последовательно по каждому рисунку и определяет возможный ход. По нахождению определяется "вес" хода - сколько фишек совпало. Вес "сквозной" через все изображения, т.е. итоговый ход будет по элементу с большим весом и встретившийся раньше.
Возможно применение общего COLORMODE и % совпадения для каждого.

Оптимизации:
  • один GETSCREEN,
  • при нахождении большего веса, варианты с меньшим уже не анализируются,
  • поиск начинается с большего веса, чтобы отбросить возможно ненужный поиск меньшего,
  • при предварительном отборе вариантов хода, во избежании повторений и заходов в одну комбинацию с разных сторон, отобрал только необходимые и сделал основной поиск парной клетки только вправо-вниз (за исключением 2-х трёшек которые ищутся отдельно),
  • в переменные не определяются элементы за краем поля.

Как работает:
  • Если нужно, определяем положение поля.
  • Делаем скрин, если необходимо применяем COLORMODE.
  • По очереди обрабатываем все типы элементов (цвета):
    • Производим поиск в массив всех элементов данного типа.
    • Определяем в какую клетку попадает каждый найденный элемент и формируем псевдо-двумерный массив-карту для элемента. (остановился на этом варианте, т.к. удобнее задавать возможные комбинации, вычислять ход и в дальнейшем масштабировать решения)
    • Обходим по очереди все занятые места на поле-карте и в каждой ищем возможные варианты комбинаций. При этом переходим на "локальные" координаты-смещения относительно главной сканируемой клетки.
    • Если находим записываем в глобальные переменные значения "массы" и хода (пересчитанное в глобальное смещение
  • Пересчитываем глобальные смещения хода в конкретные координаты
  • Делаем ход.

Зачем заносил поля вокруг главной анализируемой клетки в переменные когда они и так в переменных массива? Чтобы не пересчитывать необходимый индекс массива для каждого опорного случая. Попробовал сразу на прямую, но после написания проверочных условий на 2 самых простейших комбинации из 3 элементов код выглядел жутко и уже начал немного путаться. Испугавшись того, что будет дальше, решил ввести дополнительные лишние действия для упрощения восприятия. И редактировать/дополнять будет намного проще.
Код модульный разбил на подпрограммы.

Болванку кода можно дописывать под конкретную игру с её особенностями и желание выбора приоритетов в очерёдности ходов. Для мантесумы можно ввести на поле универсальные элементы, которые подходят всем цветам или не подходят никому. Можно отдать предпочтение ходам подряд одного цвета и т.д.

Сам код:
Код: Clickermann
  1. #name "Три в ряд"
  2. // Author: Vint
  3. // Version: 0.4 (09.02.2014)
  4. // For Clickermann v4.9 004
  5.  
  6. //===== ОПЦИИ ==========================//
  7. //////////////////////////////////////////
  8.  
  9. // выводить окно лога  (1 - Выводить, 0 - Не выводить)
  10. $log = 0
  11.  
  12. // Размер поля
  13. $max_X = 6
  14. $max_Y = 6
  15.  
  16. // Размер ячейки
  17. $step = 41
  18.  
  19. // Координаты левого верхнего угла (или находить потом)
  20. $startcoord_X = 518
  21. $startcoord_Y = 413
  22.  
  23. // Имена картинок участников
  24. $bmp_1 = "skull.bmp"
  25. $bmp_2 = "kross.bmp"
  26. $bmp_3 = "red.bmp"
  27. $bmp_4 = "green.bmp"
  28. $bmp_5 = "yellow.bmp"
  29.  
  30. // Префикс. Папка с картинками
  31. $prefix = "textures\"
  32. $colormode = 0        // режим колормода
  33.  
  34. // " строка для правильного отображения на форуме. Убрать!
  35. //////////////////////////////////////////
  36.  
  37.  
  38. // автоопределение ЛВУ в игре
  39. //MOVE($_xmax, $_ymax)
  40. //WAITMS(30)
  41. //GETSCREEN
  42. //IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT($prefix,"base.bmp"))
  43. //   $startcoord_X = $_return1-119
  44. //   $startcoord_Y = $_return2+93
  45. //ELSE
  46. //   LOGWRITE ("Не привязались")
  47. //   HINTPOPUP("Не привязались", "Внимание!")
  48. //   HALT
  49. //END_IF
  50.  
  51.  
  52. //==============================================================================
  53. SUB(LOG_c)  //==== переменные "с" в лог. Отладка ===============================
  54.   LOGWRITE ("$c1 = ", $c1)
  55.   LOGWRITE ("$c2 = ", $c2)
  56.   LOGWRITE ("$c3 = ", $c3)
  57.   LOGWRITE ("$c4 = ", $c4)
  58.   LOGWRITE ("$c5 = ", $c5)
  59.   LOGWRITE ("$c6 = ", $c6)
  60.   LOGWRITE ("$c7 = ", $c7)
  61.   LOGWRITE ("$c8 = ", $c8)
  62.   LOGWRITE ("$c9 = ", $c9)
  63.   LOGWRITE ("$c10 = ", $c10)
  64.   LOGWRITE ("$c12 = ", $c12)
  65.   LOGWRITE ("$c13 = ", $c13)
  66.   LOGWRITE ("$c15 = ", $c15)
  67.   LOGWRITE ("$c16 = ", $c16)
  68.   LOGWRITE ("$c17 = ", $c17)
  69.   LOGWRITE ("$c18 = ", $c18)
  70.   LOGWRITE ("$c19 = ", $c19)
  71.   LOGWRITE ("$c20 = ", $c20)
  72.   LOGWRITE ("$c21 = ", $c21)
  73.   LOGWRITE ("$c22 = ", $c22)
  74.   LOGWRITE ("$c25 = ", $c25)
  75.   LOGWRITE ("$c26 = ", $c26)
  76.   LOGWRITE ("$c27 = ", $c27)
  77. END_SUB
  78.  
  79. //==============================================================================
  80. SUB(FIND, $name_image, $percent, $num)  //==== поиск картинки ==================
  81.   SCANPICTURE($arr_find, $startcoord_X,$startcoord_Y,$startcoord_X+($max_X*$step), $startcoord_Y+($max_Y*$step), STRCONCAT($prefix,$name_image), -1, $percent)
  82.   IF($log=1)
  83.      LOGWRITE ("найдено ", $num, "-х элементов:  ", ARRSIZE($arr_find)/2)
  84.   END_IF
  85.   //UNDEFINE($arr_find)
  86. END_SUB
  87.  
  88. //==============================================================================
  89. SUB(GET, $dif_X, $dif_Y)  //==== проверка клетки ===============================
  90.   $target_X = $main_X+$dif_X
  91.   $target_Y = $main_Y+$dif_Y
  92.   IF(($target_X > -1) & ($target_Y > -1) & ($target_X < $max_X) & ($target_Y < $max_Y))
  93.      $ret = $map[$target_X+$target_Y*$max_X]  // читаем ячейку
  94.   ELSE
  95.      $ret = -1  // вышли за край поля
  96.   END_IF
  97. END_SUB
  98.  
  99. //==============================================================================
  100. SUB(SET, $tmass, $trun_X,$trun_Y,$trunin_X,$trunin_Y)  //=== установка хода ====
  101.   IF($tmass > $mass)
  102.      $mass = $tmass
  103.      $run_X = $trun_X + $main_X
  104.      $run_Y = $trun_Y + $main_Y
  105.      $runin_X = $trunin_X + $main_X
  106.      $runin_Y = $trunin_Y + $main_Y
  107.      IF($log=1)
  108.         LOGWRITE ("$mass ", $mass)
  109.         LOGWRITE ("$main ", $main_X, " / ", $main_Y)
  110.         LOGWRITE ("Относит. ", $trun_X, " / ", $trun_Y, ", ", $trunin_X, " / ", $trunin_Y)
  111.      END_IF
  112.   END_IF
  113. END_SUB
  114.  
  115. //==============================================================================
  116. SUB(OBRABOTKA_CELL)  //==== обработка ячейки главная ===========================
  117.   // формат хода (вес, откудаX,Y, кудаX,Y)
  118.  
  119.   // пропускаем поиск, когда уже лучший вариант
  120.   IF($mass < 7)
  121.      //SET(0,0,0,0,0)  // сбрасываем массу
  122.      $c1 = 0
  123.      $c2 = 0
  124.      $c3 = 0
  125.      $c4 = 0
  126.      $c5 = 0
  127.      $c6 = 0
  128.      $c7 = 0
  129.      $c8 = 0
  130.      $c9 = 0
  131.      $c10 = 0
  132.      $c12 = 0
  133.      $c13 = 0
  134.      $c15 = 0
  135.      $c16 = 0
  136.      $c17 = 0
  137.      $c18 = 0
  138.      $c19 = 0
  139.      $c20 = 0
  140.      $c21 = 0
  141.      $c22 = 0
  142.      $c25 = 0
  143.      $c26 = 0
  144.      $c27 = 0
  145.  
  146.      GET(1,0)
  147.      $c1 = $ret
  148.      IF($c1 ! -1)
  149.         GET(2,0)
  150.         $c2 = $ret
  151.         GET(3,0)
  152.         $c3 = $ret
  153.         GET(4,0)
  154.         $c4 = $ret
  155.      END_IF
  156.  
  157.      GET(-1,0)
  158.      $c9 = $ret
  159.      IF($c9 ! -1)
  160.         GET(-2,0)
  161.         $c10 = $ret
  162.      END_IF
  163.  
  164.      GET(0,1)
  165.      $c15 = $ret
  166.      IF($c15 ! -1)
  167.         GET(0,3)
  168.         $c17 = $ret
  169.         GET(0,4)
  170.         $c18 = $ret
  171.      END_IF
  172.  
  173.      GET(0,-1)
  174.      $c12 = $ret
  175.      IF($c12 ! -1)
  176.         GET(0,-2)
  177.         $c13 = $ret
  178.      END_IF
  179.  
  180.      IF(($c1 ! -1) & ($c15 ! -1))
  181.         GET(2,1)
  182.         $c7 = $ret
  183.         GET(2,2)
  184.         $c8 = $ret
  185.         GET(1,2)
  186.         $c26 = $ret
  187.      END_IF
  188.  
  189.      IF(($c1 ! -1) & ($c12 ! -1))
  190.         GET(2,-1)
  191.         $c5 = $ret
  192.         GET(2,-2)
  193.         $c6 = $ret
  194.         GET(1,-1)
  195.         $c25 = $ret
  196.      END_IF
  197.  
  198.      IF(($c9 ! -1) & ($c12 ! -1))
  199.         GET(-1,-1)
  200.         $c19 = $ret
  201.         GET(-1,-2)
  202.         $c20 = $ret
  203.      END_IF
  204.  
  205.      IF(($c9 ! -1) & ($c15 ! -1))
  206.         GET(-1,1)
  207.         $c21 = $ret
  208.         GET(-1,2)
  209.         $c22 = $ret
  210.      END_IF
  211.  
  212.      // горизонтальные
  213.      IF($c1 = 1)
  214.         IF($mass < 7)
  215.            IF(($c5=1) & ($c6=1) & ($c7=1) & ($c8=1) & ($c3=1))
  216.               SET(7,3,0,2,0)
  217.            ELSE
  218.               IF(($c19=1) & ($c20=1) & ($c21=1) & ($c22=1) & ($c10=1))
  219.                  SET(7,-2,0,-1,0)
  220.               ELSE
  221.                  IF(($c3=1) & ($c4=1) & ($c7=1) & ($c8=1) & ($c5=1))
  222.                     SET(7,2,-1,2,0)
  223.                  ELSE
  224.                     IF(($c3=1) & ($c4=1) & ($c5=1) & ($c6=1) & ($c7=1))
  225.                        SET(7,2,1,2,0)
  226.                     END_IF
  227.                  END_IF
  228.               END_IF
  229.            END_IF
  230.         END_IF
  231.  
  232.         IF($mass < 6)
  233.            IF(($c5=1) & ($c6=1) & ($c3=1) & ($c7=1))
  234.               SET(6,3,0,2,0)
  235.            ELSE
  236.               IF(($c19=1) & ($c20=1) & ($c10=1) & ($c21=1))
  237.                  SET(6,-2,0,-1,0)
  238.               ELSE
  239.                  IF(($c7=1) & ($c8=1) & ($c3=1) & ($c5=1))
  240.                     SET(6,3,0,2,0)
  241.                  ELSE
  242.                     IF(($c21=1) & ($c22=1) & ($c19=1) & ($c10=1))
  243.                        SET(6,-2,0,-1,0)
  244.                     END_IF
  245.                  END_IF
  246.               END_IF
  247.            END_IF
  248.         END_IF
  249.  
  250.         IF($mass < 5)
  251.            IF(($c5=1) & ($c7=1) & ($c3=1))
  252.               SET(5,3,0,2,0)
  253.            ELSE
  254.               IF(($c19=1) & ($c21=1) & ($c10=1))
  255.                  SET(5,-2,0,-1,0)
  256.               ELSE
  257.                  IF(($c3=1) & ($c4=1) & ($c5=1))
  258.                     SET(5,2,-1,2,0)
  259.                  ELSE
  260.                     IF(($c3=1) & ($c4=1) & ($c7=1))
  261.                        SET(5,2,1,2,0)
  262.                     ELSE
  263.                        IF(($c5=1) & ($c6=1) & ($c3=1))
  264.                           SET(5,3,0,2,0)
  265.                        ELSE
  266.                           IF(($c5=1) & ($c6=1) & ($c7=1))
  267.                              SET(5,2,1,2,0)
  268.                           ELSE
  269.                              IF(($c19=1) & ($c20=1) & ($c10=1))
  270.                                 SET(5,-2,0,-1,0)
  271.                              ELSE
  272.                                 IF(($c19=1) & ($c20=1) & ($c21=1))
  273.                                    SET(5,-1,1,-1,0)
  274.                                 ELSE
  275.                                    IF(($c7=1) & ($c8=1) & ($c3=1))
  276.                                       SET(5,3,0,2,0)
  277.                                    ELSE
  278.                                       IF(($c7=1) & ($c8=1) & ($c5=1))
  279.                                          SET(5,2,-1,2,0)
  280.                                       ELSE
  281.                                          IF(($c21=1) & ($c22=1) & ($c10=1))
  282.                                             SET(5,-2,0,-1,0)
  283.                                          ELSE
  284.                                             IF(($c21=1) & ($c22=1) & ($c19=1))
  285.                                                SET(5,-1,-1,-1,0)
  286.                                             END_IF
  287.                                          END_IF
  288.                                       END_IF
  289.                                    END_IF
  290.                                 END_IF
  291.                              END_IF
  292.                           END_IF
  293.                        END_IF
  294.                     END_IF
  295.                  END_IF
  296.               END_IF
  297.            END_IF
  298.         END_IF
  299.  
  300.         IF($mass < 4)
  301.            IF(($c3=1) & ($c5=1))
  302.               SET(4,2,-1,2,0)
  303.            ELSE
  304.               IF(($c3=1) & ($c7=1))
  305.                  SET(4,2,1,2,0)
  306.               ELSE
  307.                  IF(($c10=1) & ($c19=1))
  308.                     SET(4,-1,-1,-1,0)
  309.                  ELSE
  310.                     IF(($c10=1) & ($c21=1))
  311.                        SET(4,-1,1,-1,0)
  312.                     END_IF
  313.                  END_IF
  314.               END_IF
  315.            END_IF
  316.         END_IF
  317.  
  318.         IF($mass < 3)
  319.            IF(($c3=1))
  320.               SET(3,3,0,2,0)
  321.            ELSE
  322.               IF(($c5=1))
  323.                  SET(3,2,-1,2,0)
  324.               ELSE
  325.                  IF(($c7=1))
  326.                     SET(3,2,1,2,0)
  327.                  ELSE
  328.                     IF(($c10=1))
  329.                        SET(3,-2,0,-1,0)
  330.                     ELSE
  331.                        IF(($c19=1))
  332.                           SET(3,-1,-1,-1,0)
  333.                        ELSE
  334.                           IF(($c21=1))
  335.                              SET(3,-1,1,-1,0)
  336.                           END_IF
  337.                        END_IF
  338.                     END_IF
  339.                  END_IF
  340.               END_IF
  341.            END_IF
  342.         END_IF
  343.      END_IF
  344.  
  345.      // вертикальные
  346.      IF($c15 = 1)
  347.         IF($mass < 5)
  348.            IF(($c22=1) & ($c26=1) & ($c17=1))
  349.               SET(5,0,3,0,2)
  350.            ELSE
  351.               IF(($c19=1) & ($c25=1) & ($c13=1))
  352.                  SET(5,0,-2,0,-1)
  353.               ELSE
  354.                  IF(($c17=1) & ($c18=1) & ($c22=1))
  355.                     SET(5,-1,2,0,2)
  356.                  ELSE
  357.                     IF(($c17=1) & ($c18=1) & ($c26=1))
  358.                        SET(5,1,2,0,2)
  359.                     END_IF
  360.                  END_IF
  361.               END_IF
  362.            END_IF
  363.         END_IF
  364.  
  365.         IF($mass < 4)
  366.            IF(($c17=1) & ($c22=1))
  367.               SET(4,-1,2,0,2)
  368.            ELSE
  369.               IF(($c17=1) & ($c26=1))
  370.                  SET(4,1,2,0,2)
  371.               ELSE
  372.                  IF(($c13=1) & ($c19=1))
  373.                     SET(4,-1,-1,0,-1)
  374.                  ELSE
  375.                     IF(($c13=1) & ($c25=1))
  376.                        SET(4,1,-1,0,-1)
  377.                     END_IF
  378.                  END_IF
  379.               END_IF
  380.            END_IF
  381.         END_IF
  382.  
  383.         IF($mass < 3)
  384.            IF(($c13=1))
  385.               SET(3,0,-2,0,-1)
  386.            ELSE
  387.               IF(($c19=1))
  388.                  SET(3,-1,-1,0,-1)
  389.               ELSE
  390.                  IF(($c25=1))
  391.                     SET(3,1,-1,0,-1)
  392.                  ELSE
  393.                     IF(($c17=1))
  394.                        SET(3,0,3,0,2)
  395.                     ELSE
  396.                        IF(($c22=1))
  397.                           SET(3,-1,2,0,2)
  398.                        ELSE
  399.                           IF(($c26=1))
  400.                              SET(3,1,2,0,2)
  401.                           END_IF
  402.                        END_IF
  403.                     END_IF
  404.                  END_IF
  405.               END_IF
  406.            END_IF
  407.         END_IF
  408.      END_IF
  409.  
  410.      IF($mass < 3)
  411.         GET(1,1)
  412.         $c27 = $ret
  413.         GET(0,2)
  414.         $c16 = $ret
  415.         // уникальная тройка гор.
  416.         IF(($c2=1) & ($c25=1))
  417.            SET(3,1,-1,1,0)
  418.         ELSE
  419.            IF(($c2=1) & ($c27=1))
  420.               SET(3,1,1,1,0)
  421.            ELSE
  422.               // уникальная тройка вер.
  423.               IF(($c16=1) & ($c21=1))
  424.                  SET(3,-1,1,0,1)
  425.               ELSE
  426.                  IF(($c16=1) & ($c27=1))
  427.                     SET(3,1,1,0,1)
  428.                  END_IF
  429.               END_IF
  430.            END_IF
  431.         END_IF
  432.      END_IF
  433. //      IF(($main_X=4) & ($main_Y=2))
  434. //         LOGWRITE ("$main ", $main_X, " / ", $main_Y)
  435. //         LOG_c()
  436. //      END_IF
  437.   END_IF
  438. END_SUB
  439.  
  440. //==============================================================================
  441. SUB(RUN)  //=== ход ============================================================
  442.   $CStart_X = ($startcoord_X + $run_X*$step) + RND(10,$step-10)
  443.   $CStart_Y = ($startcoord_Y + $run_Y*$step) + RND(10,$step-10)
  444.   $CEnd_X = ($startcoord_X + $runin_X*$step) + RND(10,$step-10)
  445.   $CEnd_Y = ($startcoord_Y + $runin_Y*$step) + RND(10,$step-10)
  446.   LCLICK($CStart_X,$CStart_Y)
  447.   WAITMS(200)
  448.   LCLICK($CEnd_X,$CEnd_Y)
  449.   WAITMS(200)
  450.   MOVE($_xmax, $_ymax)
  451.   WAITMS(300)
  452. END_SUB
  453.  
  454. //==============================================================================
  455. SUB(PROCESSING)  //==== обработка полученного массива ==========================
  456.   // заполняем массив 0
  457.   UNDEFINE($map)
  458.   FOR($i,$i < $max_X*$max_Y)
  459.      ARRPUSH($map, 0)
  460.   END_CYC
  461.   //LOGWRITE ("размер $map  ", ARRSIZE($map))
  462.  
  463.   // строим карту найденных
  464.   FOR($i, $i < ARRSIZE($arr_find), 2)
  465.      $find_X = $arr_find[$i]
  466.      $find_Y = $arr_find[$i+1]
  467.  
  468.      $sost_X = INT(($find_X-$startcoord_X)/$step)
  469.      $sost_Y = INT(($find_Y-$startcoord_Y)/$step)
  470.      //LOGWRITE ("ячейка ",$sost_X+$sost_Y*$max_X)
  471.      //LOGWRITE ("коорд. ",$sost_X, " / ", $sost_Y)
  472.      $map[$sost_X+$sost_Y*$max_X] = 1
  473.   END_CYC
  474.  
  475.   // выводим поле в лог
  476.   IF($log=1)
  477.      FOR($i, $i < ARRSIZE($map), $max_X)
  478.         LOGWRITE ($map[$i],$map[$i+1],$map[$i+2],$map[$i+3],$map[$i+4],$map[$i+5])
  479.      END_CYC
  480.      LOGWRITE (" ")
  481.   END_IF
  482.   UNDEFINE($arr_find)
  483.  
  484.   // обходим поле
  485.   FOR($cell, $cell < ARRSIZE($map))
  486.      $main_Y = INT($cell/$max_X)
  487.      $main_X = $cell-$main_Y*$max_X
  488.      //LOGWRITE ("ячейка ", $main_X, " / ", $main_Y)
  489.  
  490.      IF($map[$cell] = 1)
  491.         OBRABOTKA_CELL()
  492.      END_IF
  493.   END_CYC
  494.   IF($log=1)
  495.      LOGWRITE ("$mass ", $mass)
  496.      LOGWRITE ("Лучший на цвет ", $run_X, " / ", $run_Y, ", ", $runin_X, " / ", $runin_Y)
  497.   END_IF
  498. END_SUB
  499.  
  500. //==============================================================================
  501.  
  502.  
  503. //===== ПРОГРАММА ==============================================================
  504.  
  505. LOGCLEAR
  506. IF($log=1)
  507.   LOGSHOW (1,$_xmax-335,28) // отображение окна лога
  508.   WNDSIZE(WNDFIND("Clickermann - Лог"),336,560) // изменения размеров окна лога 260
  509. END_IF
  510.  
  511. $start = $_ms
  512. $mass = 0
  513. $run_X = 0
  514. $run_Y = 0
  515. $runin_X = 0
  516. $runin_Y = 0
  517. $ret = 0
  518.  
  519. // делаем скрин
  520. MOVE($_xmax, $_ymax)
  521. WAITMS(30)
  522. GETSCREEN
  523. IF($colormode ! 0)
  524.   COLORMODE($colormode, $startcoord_X,$startcoord_Y,$startcoord_X+($max_X*$step), $startcoord_Y+($max_Y*$step))
  525. END_IF
  526.  
  527. // ищем все первые элементы и заносим в массив
  528. FIND($bmp_1, 100, 1)
  529. PROCESSING()
  530.  
  531. // ищем все вторые элементы и заносим в массив
  532. FIND($bmp_2, 75, 2)
  533. PROCESSING()
  534.  
  535. // ищем все третьи элементы и заносим в массив
  536. FIND($bmp_3, 100, 3)
  537. PROCESSING()
  538.  
  539. // ищем все четвёртые элементы и заносим в массив
  540. FIND($bmp_4, 100, 4)
  541. PROCESSING()
  542.  
  543. // ищем все пятые элементы и заносим в массив
  544. FIND($bmp_5, 100, 5)
  545. PROCESSING()
  546.  
  547. LOGWRITE ("Время выполнения ", $_ms-$start, " мс")
  548.  
  549. IF($mass ! 0)
  550.   RUN()
  551. END_IF
  552.  
  553. HALT

Схемы отобранных комбинаций и скрипт во вложении.
Некоторые тесты, на которых тренировался из "небеса" здесь: http://yadi.sk/d/i-qJoA5jHgcNo
Здравствуйте. Может вы мне поможете разобться и применить этот скрипт в небесах в пещере.