Author Topic: игра типа 3 в ряд  (Read 3748 times)

0 Members and 1 Guest are viewing this topic.

Зануда

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
игра типа 3 в ряд
« on: May 25, 2017, 05:24:07 PM »
помогите с подпрограммой воопше не имею понятия как ее сделать  :-\ тут есть пример но я ничего не понимаю в этом примере  :-[
вот скрин игрового поля как сделать подпрограму которая будет воротить камни с приорететом 5 вряд по вертикали и горизонтали если такого нет то красные 4 так же тольк вертикаль горизонталь потом если 4 нет то 3  дальше желтые дальше зеленые дальше черепа и аж на последок крестики  и если сделаете эту подпрограмму то пожалуйста объясните  каждую строчку  чтоб я потом хоть понимал что и как а то чет я не могу понять старый пример воопше  :'(  [spoiler][/spoiler]

Зануда

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: игра типа 3 в ряд
« Reply #1 on: May 26, 2017, 07:37:50 AM »
 :D я воопше в старом ничего не понимаю что где как  :-\ поясните тогда старый как для самого тупого что ле  :-[

Зануда

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: игра типа 3 в ряд
« Reply #2 on: May 26, 2017, 08:13:53 AM »
Code: (clickermann) [Select]
#name "Три в ряд"
// Author: Vint
// Version: 0.4 (09.02.2014)
// For Clickermann v4.9 004
 
//===== ОПЦИИ ==========================//
//////////////////////////////////////////
 
// выводить окно лога  (1 - Выводить, 0 - Не выводить)
$log = 0
 
// Размер поля
$max_X = 6
$max_Y = 6
 
// Размер ячейки
$step = 41
 
// Координаты левого верхнего угла (или находить потом)
$startcoord_X = 632
$startcoord_Y = 203
 
// Имена картинок участников
$bmp_1 = "skull.bmp"
$bmp_2 = "kross.bmp"
$bmp_3 = "red.bmp"
$bmp_4 = "green.bmp"
$bmp_5 = "yellow.bmp"
 
// Префикс. Папка с картинками
//$prefix = "textures\"
//$colormode = 0        // режим колормода
 
// " строка для правильного отображения на форуме. Убрать!
//////////////////////////////////////////
 
 
// автоопределение ЛВУ в игре
//MOVE($_xmax, $_ymax)
//WAITMS(30)
//GETSCREEN
//IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT($prefix,"base.bmp"))
//   $startcoord_X = $_return1-119
//   $startcoord_Y = $_return2+93
//ELSE
//   LOGWRITE ("Не привязались")
//   HINTPOPUP("Не привязались", "Внимание!")
//   HALT
//END_IF
 
 
//==============================================================================
SUB(LOG_c)  //==== переменные "с" в лог. Отладка ===============================
   LOGWRITE ("$c1 = ", $c1)
   LOGWRITE ("$c2 = ", $c2)
   LOGWRITE ("$c3 = ", $c3)
   LOGWRITE ("$c4 = ", $c4)
   LOGWRITE ("$c5 = ", $c5)
   LOGWRITE ("$c6 = ", $c6)
   LOGWRITE ("$c7 = ", $c7)
   LOGWRITE ("$c8 = ", $c8)
   LOGWRITE ("$c9 = ", $c9)
   LOGWRITE ("$c10 = ", $c10)
   LOGWRITE ("$c12 = ", $c12)
   LOGWRITE ("$c13 = ", $c13)
   LOGWRITE ("$c15 = ", $c15)
   LOGWRITE ("$c16 = ", $c16)
   LOGWRITE ("$c17 = ", $c17)
   LOGWRITE ("$c18 = ", $c18)
   LOGWRITE ("$c19 = ", $c19)
   LOGWRITE ("$c20 = ", $c20)
   LOGWRITE ("$c21 = ", $c21)
   LOGWRITE ("$c22 = ", $c22)
   LOGWRITE ("$c25 = ", $c25)
   LOGWRITE ("$c26 = ", $c26)
   LOGWRITE ("$c27 = ", $c27)
END_SUB
 
//==============================================================================
SUB(FIND, $name_image, $percent, $num)  //==== поиск картинки ==================
   SCANPICTURE($arr_find, $startcoord_X,$startcoord_Y,$startcoord_X+($max_X*$step), $startcoord_Y+($max_Y*$step), STRCONCAT($prefix,$name_image), -1, $percent)
   IF($log=1)
      LOGWRITE ("найдено ", $num, "-х элементов:  ", ARRSIZE($arr_find)/2)
   END_IF
   //UNDEFINE($arr_find)
END_SUB
 
//==============================================================================
SUB(GET, $dif_X, $dif_Y)  //==== проверка клетки ===============================
   $target_X = $main_X+$dif_X
   $target_Y = $main_Y+$dif_Y
   IF(($target_X > -1) & ($target_Y > -1) & ($target_X < $max_X) & ($target_Y < $max_Y))
      $ret = $map[$target_X+$target_Y*$max_X]  // читаем ячейку
   ELSE
      $ret = -1  // вышли за край поля
   END_IF
END_SUB
 
//==============================================================================
SUB(SET, $tmass, $trun_X,$trun_Y,$trunin_X,$trunin_Y)  //=== установка хода ====
   IF($tmass > $mass)
      $mass = $tmass
      $run_X = $trun_X + $main_X
      $run_Y = $trun_Y + $main_Y
      $runin_X = $trunin_X + $main_X
      $runin_Y = $trunin_Y + $main_Y
      IF($log=1)
         LOGWRITE ("$mass ", $mass)
         LOGWRITE ("$main ", $main_X, " / ", $main_Y)
         LOGWRITE ("Относит. ", $trun_X, " / ", $trun_Y, ", ", $trunin_X, " / ", $trunin_Y)
      END_IF
   END_IF
END_SUB
 
//==============================================================================
SUB(OBRABOTKA_CELL)  //==== обработка ячейки главная ===========================
   // формат хода (вес, откудаX,Y, кудаX,Y)
 
   // пропускаем поиск, когда уже лучший вариант
   IF($mass < 7)
      //SET(0,0,0,0,0)  // сбрасываем массу
      $c1 = 0
      $c2 = 0
      $c3 = 0
      $c4 = 0
      $c5 = 0
      $c6 = 0
      $c7 = 0
      $c8 = 0
      $c9 = 0
      $c10 = 0
      $c12 = 0
      $c13 = 0
      $c15 = 0
      $c16 = 0
      $c17 = 0
      $c18 = 0
      $c19 = 0
      $c20 = 0
      $c21 = 0
      $c22 = 0
      $c25 = 0
      $c26 = 0
      $c27 = 0
 
      GET(1,0)
      $c1 = $ret
      IF($c1 ! -1)
         GET(2,0)
         $c2 = $ret
         GET(3,0)
         $c3 = $ret
         GET(4,0)
         $c4 = $ret
      END_IF
 
      GET(-1,0)
      $c9 = $ret
      IF($c9 ! -1)
         GET(-2,0)
         $c10 = $ret
      END_IF
 
      GET(0,1)
      $c15 = $ret
      IF($c15 ! -1)
         GET(0,3)
         $c17 = $ret
         GET(0,4)
         $c18 = $ret
      END_IF
 
      GET(0,-1)
      $c12 = $ret
      IF($c12 ! -1)
         GET(0,-2)
         $c13 = $ret
      END_IF
 
      IF(($c1 ! -1) & ($c15 ! -1))
         GET(2,1)
         $c7 = $ret
         GET(2,2)
         $c8 = $ret
         GET(1,2)
         $c26 = $ret
      END_IF
 
      IF(($c1 ! -1) & ($c12 ! -1))
         GET(2,-1)
         $c5 = $ret
         GET(2,-2)
         $c6 = $ret
         GET(1,-1)
         $c25 = $ret
      END_IF
 
      IF(($c9 ! -1) & ($c12 ! -1))
         GET(-1,-1)
         $c19 = $ret
         GET(-1,-2)
         $c20 = $ret
      END_IF
 
      IF(($c9 ! -1) & ($c15 ! -1))
         GET(-1,1)
         $c21 = $ret
         GET(-1,2)
         $c22 = $ret
      END_IF
 
      // горизонтальные
      IF($c1 = 1)
         IF($mass < 7)
            IF(($c5=1) & ($c6=1) & ($c7=1) & ($c8=1) & ($c3=1))
               SET(7,3,0,2,0)
            ELSE
               IF(($c19=1) & ($c20=1) & ($c21=1) & ($c22=1) & ($c10=1))
                  SET(7,-2,0,-1,0)
               ELSE
                  IF(($c3=1) & ($c4=1) & ($c7=1) & ($c8=1) & ($c5=1))
                     SET(7,2,-1,2,0)
                  ELSE
                     IF(($c3=1) & ($c4=1) & ($c5=1) & ($c6=1) & ($c7=1))
                        SET(7,2,1,2,0)
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
 
         IF($mass < 6)
            IF(($c5=1) & ($c6=1) & ($c3=1) & ($c7=1))
               SET(6,3,0,2,0)
            ELSE
               IF(($c19=1) & ($c20=1) & ($c10=1) & ($c21=1))
                  SET(6,-2,0,-1,0)
               ELSE
                  IF(($c7=1) & ($c8=1) & ($c3=1) & ($c5=1))
                     SET(6,3,0,2,0)
                  ELSE
                     IF(($c21=1) & ($c22=1) & ($c19=1) & ($c10=1))
                        SET(6,-2,0,-1,0)
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
 
         IF($mass < 5)
            IF(($c5=1) & ($c7=1) & ($c3=1))
               SET(5,3,0,2,0)
            ELSE
               IF(($c19=1) & ($c21=1) & ($c10=1))
                  SET(5,-2,0,-1,0)
               ELSE
                  IF(($c3=1) & ($c4=1) & ($c5=1))
                     SET(5,2,-1,2,0)
                  ELSE
                     IF(($c3=1) & ($c4=1) & ($c7=1))
                        SET(5,2,1,2,0)
                     ELSE
                        IF(($c5=1) & ($c6=1) & ($c3=1))
                           SET(5,3,0,2,0)
                        ELSE
                           IF(($c5=1) & ($c6=1) & ($c7=1))
                              SET(5,2,1,2,0)
                           ELSE
                              IF(($c19=1) & ($c20=1) & ($c10=1))
                                 SET(5,-2,0,-1,0)
                              ELSE
                                 IF(($c19=1) & ($c20=1) & ($c21=1))
                                    SET(5,-1,1,-1,0)
                                 ELSE
                                    IF(($c7=1) & ($c8=1) & ($c3=1))
                                       SET(5,3,0,2,0)
                                    ELSE
                                       IF(($c7=1) & ($c8=1) & ($c5=1))
                                          SET(5,2,-1,2,0)
                                       ELSE
                                          IF(($c21=1) & ($c22=1) & ($c10=1))
                                             SET(5,-2,0,-1,0)
                                          ELSE
                                             IF(($c21=1) & ($c22=1) & ($c19=1))
                                                SET(5,-1,-1,-1,0)
                                             END_IF
                                          END_IF
                                       END_IF
                                    END_IF
                                 END_IF
                              END_IF
                           END_IF
                        END_IF
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
 
         IF($mass < 4)
            IF(($c3=1) & ($c5=1))
               SET(4,2,-1,2,0)
            ELSE
               IF(($c3=1) & ($c7=1))
                  SET(4,2,1,2,0)
               ELSE
                  IF(($c10=1) & ($c19=1))
                     SET(4,-1,-1,-1,0)
                  ELSE
                     IF(($c10=1) & ($c21=1))
                        SET(4,-1,1,-1,0)
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
 
         IF($mass < 3)
            IF(($c3=1))
               SET(3,3,0,2,0)
            ELSE
               IF(($c5=1))
                  SET(3,2,-1,2,0)
               ELSE
                  IF(($c7=1))
                     SET(3,2,1,2,0)
                  ELSE
                     IF(($c10=1))
                        SET(3,-2,0,-1,0)
                     ELSE
                        IF(($c19=1))
                           SET(3,-1,-1,-1,0)
                        ELSE
                           IF(($c21=1))
                              SET(3,-1,1,-1,0)
                           END_IF
                        END_IF
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
 
      // вертикальные
      IF($c15 = 1)
         IF($mass < 5)
            IF(($c22=1) & ($c26=1) & ($c17=1))
               SET(5,0,3,0,2)
            ELSE
               IF(($c19=1) & ($c25=1) & ($c13=1))
                  SET(5,0,-2,0,-1)
               ELSE
                  IF(($c17=1) & ($c18=1) & ($c22=1))
                     SET(5,-1,2,0,2)
                  ELSE
                     IF(($c17=1) & ($c18=1) & ($c26=1))
                        SET(5,1,2,0,2)
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
 
         IF($mass < 4)
            IF(($c17=1) & ($c22=1))
               SET(4,-1,2,0,2)
            ELSE
               IF(($c17=1) & ($c26=1))
                  SET(4,1,2,0,2)
               ELSE
                  IF(($c13=1) & ($c19=1))
                     SET(4,-1,-1,0,-1)
                  ELSE
                     IF(($c13=1) & ($c25=1))
                        SET(4,1,-1,0,-1)
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
 
         IF($mass < 3)
            IF(($c13=1))
               SET(3,0,-2,0,-1)
            ELSE
               IF(($c19=1))
                  SET(3,-1,-1,0,-1)
               ELSE
                  IF(($c25=1))
                     SET(3,1,-1,0,-1)
                  ELSE
                     IF(($c17=1))
                        SET(3,0,3,0,2)
                     ELSE
                        IF(($c22=1))
                           SET(3,-1,2,0,2)
                        ELSE
                           IF(($c26=1))
                              SET(3,1,2,0,2)
                           END_IF
                        END_IF
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
 
      IF($mass < 3)
         GET(1,1)
         $c27 = $ret
         GET(0,2)
         $c16 = $ret
         // уникальная тройка гор.
         IF(($c2=1) & ($c25=1))
            SET(3,1,-1,1,0)
         ELSE
            IF(($c2=1) & ($c27=1))
               SET(3,1,1,1,0)
            ELSE
               // уникальная тройка вер.
               IF(($c16=1) & ($c21=1))
                  SET(3,-1,1,0,1)
               ELSE
                  IF(($c16=1) & ($c27=1))
                     SET(3,1,1,0,1)
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
//      IF(($main_X=4) & ($main_Y=2))
//         LOGWRITE ("$main ", $main_X, " / ", $main_Y)
//         LOG_c()
//      END_IF
   END_IF
END_SUB
 
//==============================================================================
SUB(RUN)  //=== ход ============================================================
   $CStart_X = ($startcoord_X + $run_X*$step) + RND(10,$step-10)
   $CStart_Y = ($startcoord_Y + $run_Y*$step) + RND(10,$step-10)
   $CEnd_X = ($startcoord_X + $runin_X*$step) + RND(10,$step-10)
   $CEnd_Y = ($startcoord_Y + $runin_Y*$step) + RND(10,$step-10)
   LCLICK($CStart_X,$CStart_Y)
   WAITMS(200)
   LCLICK($CEnd_X,$CEnd_Y)
   WAITMS(200)
   MOVE($_xmax, $_ymax)
   WAITMS(300)
END_SUB
 
//==============================================================================
SUB(PROCESSING)  //==== обработка полученного массива ==========================
   // заполняем массив 0
   UNDEFINE($map)
   FOR($i,$i < $max_X*$max_Y)
      ARRPUSH($map, 0)
   END_CYC
   //LOGWRITE ("размер $map  ", ARRSIZE($map))
 
   // строим карту найденных
   FOR($i, $i < ARRSIZE($arr_find), 2)
      $find_X = $arr_find[$i]
      $find_Y = $arr_find[$i+1]
 
      $sost_X = INT(($find_X-$startcoord_X)/$step)
      $sost_Y = INT(($find_Y-$startcoord_Y)/$step)
      //LOGWRITE ("ячейка ",$sost_X+$sost_Y*$max_X)
      //LOGWRITE ("коорд. ",$sost_X, " / ", $sost_Y)
      $map[$sost_X+$sost_Y*$max_X] = 1
   END_CYC
 
   // выводим поле в лог
   IF($log=1)
      FOR($i, $i < ARRSIZE($map), $max_X)
         LOGWRITE ($map[$i],$map[$i+1],$map[$i+2],$map[$i+3],$map[$i+4],$map[$i+5])
      END_CYC
      LOGWRITE (" ")
   END_IF
   UNDEFINE($arr_find)
 
   // обходим поле
   FOR($cell, $cell < ARRSIZE($map))
      $main_Y = INT($cell/$max_X)
      $main_X = $cell-$main_Y*$max_X
      //LOGWRITE ("ячейка ", $main_X, " / ", $main_Y)
 
      IF($map[$cell] = 1)
         OBRABOTKA_CELL()
      END_IF
   END_CYC
   IF($log=1)
      LOGWRITE ("$mass ", $mass)
      LOGWRITE ("Лучший на цвет ", $run_X, " / ", $run_Y, ", ", $runin_X, " / ", $runin_Y)
   END_IF
END_SUB
 
//==============================================================================
 
 
//===== ПРОГРАММА ==============================================================
 
LOGCLEAR
IF($log=1)
   LOGSHOW (1,$_xmax-335,28) // отображение окна лога
   WNDSIZE(WNDFIND("Clickermann - Лог"),336,560) // изменения размеров окна лога 260
END_IF
 
$start = $_ms
$mass = 0
$run_X = 0
$run_Y = 0
$runin_X = 0
$runin_Y = 0
$ret = 0
 
// делаем скрин
MOVE($_xmax, $_ymax)
WAITMS(30)
GETSCREEN
IF($colormode ! 0)
   COLORMODE($colormode, $startcoord_X,$startcoord_Y,$startcoord_X+($max_X*$step), $startcoord_Y+($max_Y*$step))
END_IF
 
// ищем все первые элементы и заносим в массив
FIND($bmp_1, 100, 1)
PROCESSING()
 
// ищем все вторые элементы и заносим в массив
FIND($bmp_2, 75, 2)
PROCESSING()
 
// ищем все третьи элементы и заносим в массив
FIND($bmp_3, 100, 3)
PROCESSING()
 
// ищем все четвёртые элементы и заносим в массив
FIND($bmp_4, 100, 4)
PROCESSING()
 
// ищем все пятые элементы и заносим в массив
FIND($bmp_5, 100, 5)
PROCESSING()
 
LOGWRITE ("Время выполнения ", $_ms-$start, " мс")
 
IF($mass ! 0)
   RUN()
END_IF
 
HALT
взял я тот код сделал скрины поставил где начало поля и все что мне выдает так это в лог вот "Время выполнения 443 мс" а как его заставить ходить ?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: игра типа 3 в ряд
« Reply #3 on: May 26, 2017, 10:39:10 AM »
взял я тот код сделал скрины поставил где начало поля и все что мне выдает так это в лог вот "Время выполнения 443 мс"

$log = 1

чтоб выдавало больше инфы


Зануда

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: игра типа 3 в ряд
« Reply #4 on: May 26, 2017, 11:51:47 AM »
11:44:25 
11:44:25 $mass 0
11:44:25 Лучший на цвет 0 / 0, 0 / 0
11:44:25 найдено 3-х элементов:  8
11:44:25 
11:44:25 $mass 0
11:44:25 Лучший на цвет 0 / 0, 0 / 0
11:44:25 найдено 4-х элементов:  5
11:44:25 
11:44:25 $mass 0
11:44:25 Лучший на цвет 0 / 0, 0 / 0
11:44:25 найдено 5-х элементов:  5
11:44:25 
11:44:25 $mass 0
11:44:25 Лучший на цвет 0 / 0, 0 / 0
11:44:25 Время выполнения 640 мс
вопшем вот это выдает но теперь просто тыкает по одному и тому же камню я вопше в этом скрипте ничего понять не могу кроме этого верхнего угла который нада указать ......................

Зануда

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: игра типа 3 в ряд
« Reply #5 on: May 26, 2017, 01:53:04 PM »
я не понимаю что там нужно изменить  :'(

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: игра типа 3 в ряд
« Reply #6 on: May 26, 2017, 03:36:53 PM »
Там ещё под версию 4.9. Циклы нужно поправить.
Вот под 4.11


Зануда

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: игра типа 3 в ряд
« Reply #7 on: May 26, 2017, 04:08:37 PM »
вот что оно выдало  :o я воопше ничего не могу в том все коде понять набор символов  :'( можно просто рабочий код? по примеру из пергого скрина  :)
[spoiler][/spoiler]
[spoiler][/spoiler]

Зануда

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: игра типа 3 в ряд
« Reply #8 on: May 27, 2017, 09:01:15 PM »
наконец разобрался  ;D ;D ;D ;D ходит уже теперь вот как это засунуть в под програму чтоб только после ее вызова начинал анализировать поле а то как ходить там RUN() а как чтоб он анализировать начинал только после вызова? :D

Зануда

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: игра типа 3 в ряд
« Reply #9 on: May 28, 2017, 03:09:21 PM »
Code: (clickermann) [Select]

SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
   $MOVE_Start_X = $_xmouse
   $MOVE_Start_Y = $_ymouse
   $MOVE_X = $MOVE_Start_X
   $MOVE_Y = $MOVE_Start_Y
   
   $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
   $MOVE_step = ($dist-1)/INT(SQRT($dist))
   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
   
   FOR($MOVE_i=0, $MOVE_i < INT($MOVE_step))
      $MOVE_X = $MOVE_X + $MOVE_X_step
      $MOVE_Y = $MOVE_Y + $MOVE_Y_step
      MOVE(INT($MOVE_X) + RND(-2,2), INT($MOVE_Y) + RND(-2,2))
      WAITMS($rnwait) // çàäåðæêà ïðè äâèæåíèè ïî òî÷êàì
   END_CYC
END_SUB

SUB(m_move,$M_X,$M_Y)
   $rnwait = RND(6,15) // ñëó÷àéíàÿ ñêîðîñòü
   $MOVE_MID_X = INT(($_xmouse+$M_X)/2)
   $MOVE_MID_Y = INT(($_ymouse+$M_Y)/2)
   $otx = INT(ABS($_xmouse - $M_X) * 0.12)
   $oty = INT(ABS($_ymouse - $M_Y) * 0.12)
   mouse_move($MOVE_MID_X+RND(-$otx,$otx), $MOVE_MID_Y+RND(-$oty,$oty))
   mouse_move($M_X,$M_Y)
   MOVE($M_X,$M_Y) //Ïåðåäâèíóòü îêîí÷àòåëüíî â çàäàííóþ òî÷êó
END_SUB




// __________________ ÎÏÖÈÈ ____________________________________________________
//////////////////////////////////////////
//#logfile

// âûâîäèòü îêíî ëîãà  (1 - Âûâîäèòü, 0 - Íå âûâîäèòü)
$log = 0

// Ðàçìåð ïîëÿ
$max_X = 6
$max_Y = 6

// Ðàçìåð ÿ÷åéêè
$step = 41

// Êîîðäèíàòû ëåâîãî âåðõíåãî óãëà (èëè íàõîäèòü ïîòîì)
//$startcoord_X = 518
//$startcoord_Y = 413

// Èìåíà êàðòèíîê ó÷àñòíèêîâ
$bmp_1 = "red.bmp"
$bmp_2 =  "yellow.bmp"
$bmp_3 =  "green.bmp"
$bmp_4 =  "skull.bmp"
$bmp_5 = "kross.bmp"

// Ïðåôèêñ. Ïàïêà ñ êàðòèíêàìè
$prefix = "textures\"
$colormode = 0        // ðåæèì êîëîðìîäà

//////////////////////////////////////////


FOR($a56,$a56<1) // ïîâòîðÿåì 3 ðàçà
   // òåëî
   
   
   m_move($_xmax, $_ymax)
   WAITMS(30)
   GETSCREEN
   IF_PICTURE_IN(0,0, $_xmax,$_ymax, STRCONCAT($prefix,"base.bmp"))
      $startcoord_X = $_return1-119
      $startcoord_Y = $_return2+93
   ELSE
      LOGWRITE("Íå ïðèâÿçàëèñü")
      HINTPOPUP("Íå ïðèâÿçàëèñü", "Âíèìàíèå!")
      HALT
   END_IF
   
END_CYC
//==============================================================================
SUB(LOG_c)  //==== ïåðåìåííûå "ñ" â ëîã. Îòëàäêà ===============================
   LOGWRITE("$c1 = ", $c1)
   LOGWRITE("$c2 = ", $c2)
   LOGWRITE("$c3 = ", $c3)
   LOGWRITE("$c4 = ", $c4)
   LOGWRITE("$c5 = ", $c5)
   LOGWRITE("$c6 = ", $c6)
   LOGWRITE("$c7 = ", $c7)
   LOGWRITE("$c8 = ", $c8)
   LOGWRITE("$c9 = ", $c9)
   LOGWRITE("$c10 = ", $c10)
   LOGWRITE("$c12 = ", $c12)
   LOGWRITE("$c13 = ", $c13)
   LOGWRITE("$c15 = ", $c15)
   LOGWRITE("$c16 = ", $c16)
   LOGWRITE("$c17 = ", $c17)
   LOGWRITE("$c18 = ", $c18)
   LOGWRITE("$c19 = ", $c19)
   LOGWRITE("$c20 = ", $c20)
   LOGWRITE("$c21 = ", $c21)
   LOGWRITE("$c22 = ", $c22)
   LOGWRITE("$c25 = ", $c25)
   LOGWRITE("$c26 = ", $c26)
   LOGWRITE("$c27 = ", $c27)
END_SUB

// __________________ ÏÎÈÑÊ ÊÀÐÒÈÍÊÈ ___________________________________________
SUB(FIND, $name_image, $percent, $num)
   SCANPICTURE($arr_find, $startcoord_X,$startcoord_Y,$startcoord_X+($max_X*$step), $startcoord_Y+($max_Y*$step), STRCONCAT($prefix,$name_image), -1, $percent)
   IF($log=1)
      LOGWRITE("Íàéäåíî ", $num, "-õ ýëåìåíòîâ:  ", ARRSIZE($arr_find)/2)
   END_IF
   //UNDEFINE($arr_find)
END_SUB

// __________________ ÏÐÎÂÅÐÊÀ ÊËÅÒÊÈ __________________________________________
SUB(GET, $dif_X, $dif_Y)
   $target_X = $main_X + $dif_X  //êîîð.ÿ÷åéêè + êîîð.ñîñåäíèõ
   $target_Y = $main_Y + $dif_Y
   IF(($target_X > -1) & ($target_Y > -1) & ($target_X < $max_X) & ($target_Y < $max_Y))
      $ret = $map[$target_X + $target_Y*$max_X]  // ÷èòàåì ÿ÷åéêó
   ELSE
      $ret = -1  // âûøëè çà êðàé ïîëÿ
   END_IF
END_SUB

// __________________ ÓÑÒÀÍÎÂÊÀ ÕÎÄÀ ___________________________________________
SUB(SET, $tmass, $trun_X, $trun_Y, $trunin_X, $trunin_Y)
   // ôîðìàò õîäà (âåñ, îòêóäà X/Y, êóäà X/Y)
   
   IF($tmass > $mass)
      $mass = $tmass
      $run_X = $trun_X + $main_X
      $run_Y = $trun_Y + $main_Y
      $runin_X = $trunin_X + $main_X
      $runin_Y = $trunin_Y + $main_Y
      IF($log = 1)
         LOGWRITE("$mass: ", $mass)
         LOGWRITE("$main: ", $main_X, " / ", $main_Y)
         LOGWRITE("Îòíîñèò. ", $trun_X, " / ", $trun_Y, ", ", $trunin_X, " / ", $trunin_Y)
      END_IF
   END_IF
END_SUB

// __________________ ÎÁÐÀÁÎÒÊÀ ß×ÅÉÊÈ ÃËÀÂÍÀß__________________________________
SUB(OBRABOTKA_CELL)
   // ôîðìàò õîäà (âåñ, îòêóäàX,Y, êóäàX,Y)
   
   // ïðîïóñêàåì ïîèñê, êîãäà óæå ëó÷øèé âàðèàíò
   IF($mass < 5)
      //SET(0,0,0,0,0)  // ñáðàñûâàåì ìàññó
      $c1 = 0
      $c2 = 0
      $c3 = 0
      $c4 = 0
      $c5 = 0
      $c6 = 0
      $c7 = 0
      $c8 = 0
      $c9 = 0
      $c10 = 0
      $c12 = 0
      $c13 = 0
      $c15 = 0
      $c16 = 0
      $c17 = 0
      $c18 = 0
      $c19 = 0
      $c20 = 0
      $c21 = 0
      $c22 = 0
      $c25 = 0
      $c26 = 0
      $c27 = 0
     
      // ïðîâåðêà ñîñåäíèõ ÿ÷ååê âîêðóã ðàññìàòðèâàåìîé
      GET(1,0)
      $c1 = $ret
      IF($c1 ! -1)
         GET(2,0)
         $c2 = $ret
         GET(3,0)
         $c3 = $ret
         GET(4,0)
         $c4 = $ret
      END_IF
     
      GET(-1,0)
      $c9 = $ret
      IF($c9 ! -1)
         GET(-2,0)
         $c10 = $ret
      END_IF
     
      GET(0,1)
      $c15 = $ret
      IF($c15 ! -1)
         GET(0,3)
         $c17 = $ret
         GET(0,4)
         $c18 = $ret
      END_IF
     
      GET(0,-1)
      $c12 = $ret
      IF($c12 ! -1)
         GET(0,-2)
         $c13 = $ret
      END_IF
     
      IF(($c1 ! -1) & ($c15 ! -1))
         GET(2,1)
         $c7 = $ret
         GET(2,2)
         $c8 = $ret
         GET(1,2)
         $c26 = $ret
      END_IF
     
      IF(($c1 ! -1) & ($c12 ! -1))
         GET(2,-1)
         $c5 = $ret
         GET(2,-2)
         $c6 = $ret
         GET(1,-1)
         $c25 = $ret
      END_IF
     
      IF(($c9 ! -1) & ($c12 ! -1))
         GET(-1,-1)
         $c19 = $ret
         GET(-1,-2)
         $c20 = $ret
      END_IF
     
      IF(($c9 ! -1) & ($c15 ! -1))
         GET(-1,1)
         $c21 = $ret
         GET(-1,2)
         $c22 = $ret
      END_IF
     
      // ãîðèçîíòàëüíûå
      IF($c1 = 1)
         IF($mass < 7)
            IF(($c5=1) & ($c6=1) & ($c7=1) & ($c8=1) & ($c3=1))
               SET(7,3,0,2,0)
            ELSE
               IF(($c19=1) & ($c20=1) & ($c21=1) & ($c22=1) & ($c10=1))
                  SET(7,-2,0,-1,0)
               ELSE
                  IF(($c3=1) & ($c4=1) & ($c7=1) & ($c8=1) & ($c5=1))
                     SET(7,2,-1,2,0)
                  ELSE
                     IF(($c3=1) & ($c4=1) & ($c5=1) & ($c6=1) & ($c7=1))
                        SET(7,2,1,2,0)
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
         
         IF($mass < 6)
            IF(($c5=1) & ($c6=1) & ($c3=1) & ($c7=1))
               SET(6,3,0,2,0)
            ELSE
               IF(($c19=1) & ($c20=1) & ($c10=1) & ($c21=1))
                  SET(6,-2,0,-1,0)
               ELSE
                  IF(($c7=1) & ($c8=1) & ($c3=1) & ($c5=1))
                     SET(6,3,0,2,0)
                  ELSE
                     IF(($c21=1) & ($c22=1) & ($c19=1) & ($c10=1))
                        SET(6,-2,0,-1,0)
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
         
         IF($mass < 5)
            IF(($c5=1) & ($c7=1) & ($c3=1))
               SET(5,3,0,2,0)
            ELSE
               IF(($c19=1) & ($c21=1) & ($c10=1))
                  SET(5,-2,0,-1,0)
               ELSE
                  IF(($c3=1) & ($c4=1) & ($c5=1))
                     SET(5,2,-1,2,0)
                  ELSE
                     IF(($c3=1) & ($c4=1) & ($c7=1))
                        SET(5,2,1,2,0)
                     ELSE
                        IF(($c5=1) & ($c6=1) & ($c3=1))
                           SET(5,3,0,2,0)
                        ELSE
                           IF(($c5=1) & ($c6=1) & ($c7=1))
                              SET(5,2,1,2,0)
                           ELSE
                              IF(($c19=1) & ($c20=1) & ($c10=1))
                                 SET(5,-2,0,-1,0)
                              ELSE
                                 IF(($c19=1) & ($c20=1) & ($c21=1))
                                    SET(5,-1,1,-1,0)
                                 ELSE
                                    IF(($c7=1) & ($c8=1) & ($c3=1))
                                       SET(5,3,0,2,0)
                                    ELSE
                                       IF(($c7=1) & ($c8=1) & ($c5=1))
                                          SET(5,2,-1,2,0)
                                       ELSE
                                          IF(($c21=1) & ($c22=1) & ($c10=1))
                                             SET(5,-2,0,-1,0)
                                          ELSE
                                             IF(($c21=1) & ($c22=1) & ($c19=1))
                                                SET(5,-1,-1,-1,0)
                                             END_IF
                                          END_IF
                                       END_IF
                                    END_IF
                                 END_IF
                              END_IF
                           END_IF
                        END_IF
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
         
         IF($mass < 4)
            IF(($c3=1) & ($c5=1))
               SET(4,2,-1,2,0)
            ELSE
               IF(($c3=1) & ($c7=1))
                  SET(4,2,1,2,0)
               ELSE
                  IF(($c10=1) & ($c19=1))
                     SET(4,-1,-1,-1,0)
                  ELSE
                     IF(($c10=1) & ($c21=1))
                        SET(4,-1,1,-1,0)
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
         
         IF($mass < 3)
            IF(($c3=1))
               SET(3,3,0,2,0)
            ELSE
               IF(($c5=1))
                  SET(3,2,-1,2,0)
               ELSE
                  IF(($c7=1))
                     SET(3,2,1,2,0)
                  ELSE
                     IF(($c10=1))
                        SET(3,-2,0,-1,0)
                     ELSE
                        IF(($c19=1))
                           SET(3,-1,-1,-1,0)
                        ELSE
                           IF(($c21=1))
                              SET(3,-1,1,-1,0)
                           END_IF
                        END_IF
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
     
      // âåðòèêàëüíûå
      IF($c15 = 1)
         IF($mass < 5)
            IF(($c22=1) & ($c26=1) & ($c17=1))
               SET(5,0,3,0,2)
            ELSE
               IF(($c19=1) & ($c25=1) & ($c13=1))
                  SET(5,0,-2,0,-1)
               ELSE
                  IF(($c17=1) & ($c18=1) & ($c22=1))
                     SET(5,-1,2,0,2)
                  ELSE
                     IF(($c17=1) & ($c18=1) & ($c26=1))
                        SET(5,1,2,0,2)
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
         
         IF($mass < 4)
            IF(($c17=1) & ($c22=1))
               SET(4,-1,2,0,2)
            ELSE
               IF(($c17=1) & ($c26=1))
                  SET(4,1,2,0,2)
               ELSE
                  IF(($c13=1) & ($c19=1))
                     SET(4,-1,-1,0,-1)
                  ELSE
                     IF(($c13=1) & ($c25=1))
                        SET(4,1,-1,0,-1)
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
         
         IF($mass < 3)
            IF(($c13=1))
               SET(3,0,-2,0,-1)
            ELSE
               IF(($c19=1))
                  SET(3,-1,-1,0,-1)
               ELSE
                  IF(($c25=1))
                     SET(3,1,-1,0,-1)
                  ELSE
                     IF(($c17=1))
                        SET(3,0,3,0,2)
                     ELSE
                        IF(($c22=1))
                           SET(3,-1,2,0,2)
                        ELSE
                           IF(($c26=1))
                              SET(3,1,2,0,2)
                           END_IF
                        END_IF
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
     
      IF($mass < 3)
         GET(1,1)
         $c27 = $ret
         GET(0,2)
         $c16 = $ret
         // óíèêàëüíûå òðîéêè ïî ãîðèçîíòàëè
         IF(($c2=1) & ($c25=1))
            SET(3,1,-1,1,0)
         ELSE
            IF(($c2=1) & ($c27=1))
               SET(3,1,1,1,0)
            ELSE
               // óíèêàëüíûê òðîéêè ïî âåðòèêàëè
               IF(($c16=1) & ($c21=1))
                  SET(3,-1,1,0,1)
               ELSE
                  IF(($c16=1) & ($c27=1))
                     SET(3,1,1,0,1)
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
      IF(($main_X = 4) & ($main_Y = 2))
         LOGWRITE("$main2 ", $main_X, " / ", $main_Y)
         LOG_c()
      END_IF
   END_IF
END_SUB

// __________________ ÕÎÄ ______________________________________________________
SUB(RUN)
   $CStart_X = ($startcoord_X + $run_X*$step) + RND(10,$step-10)
   $CStart_Y = ($startcoord_Y + $run_Y*$step) + RND(10,$step-10)
   $CEnd_X = ($startcoord_X + $runin_X*$step) + RND(10,$step-10)
   $CEnd_Y = ($startcoord_Y + $runin_Y*$step) + RND(10,$step-10)
   m_m_move($CStart_X,$CStart_Y)
   LCLICK($CStart_X,$CStart_Y)
   WAITMS(500)
   m_move($CEnd_X,$CEnd_Y)
   LCLICK($CEnd_X,$CEnd_Y)
   WAITMS(500)
   m_move($_xmax, 100)
   WAITMS(300)
END_SUB

// __________________ ÎÁÐÀÁÎÒÊÀ ÏÎËÓ×ÅÍÍÎÃÎ ÌÀÑÑÈÂÀ ________________________
SUB(PROCESSING)
   // çàïîëíÿåì ìàññèâ 0
   UNDEFINE($map)
   FOR($i=0, $i < $max_X*$max_Y)
      ARRPUSH($map, 0)
   END_CYC
   LOGWRITE("ðàçìåð $map  ", ARRSIZE($map))
   
   // ñòðîèì êàðòó íàéäåííûõ
   FOR($i=0, $i < ARRSIZE($arr_find), 2)
      $find_X = $arr_find[$i]
      $find_Y = $arr_find[$i+1]
     
      $sost_X = INT(($find_X - $startcoord_X) / $step)
      $sost_Y = INT(($find_Y - $startcoord_Y) / $step)
      LOGWRITE("ÿ÷åéêà ", $sost_X + $sost_Y*$max_X)
      LOGWRITE("êîîðä. ", $sost_X, " / ", $sost_Y)
      $map[$sost_X + $sost_Y*$max_X] = 1
   END_CYC
   
   // âûâîäèì ïîëå â ëîã (ìàòðèöà, 1 - íàõîæäåíèå èñêîìîãî öâåòà)
   IF($log = 1)
      FOR($i=0, $i < ARRSIZE($map), $max_X)
         LOGWRITE($map[$i],$map[$i+1],$map[$i+2],$map[$i+3],$map[$i+4],$map[$i+5],$map[$i+6],$map[$i+7],$map[$i+8])
      END_CYC
      LOGWRITE("----------") //ïóñòàÿ ñòðîêà â ëîãå
   END_IF
   UNDEFINE($arr_find)
   
   // îáõîäèì ïîëå (êîîðäèíàòû âñåõ ÿ÷ååê)
   FOR($cell=0, $cell < ARRSIZE($map))
      $main_Y = INT($cell / $max_X) // 54/9=6
      $main_X = $cell - $main_Y*$max_X // 54-(6*9)=0
      LOGWRITE("ÿ÷åéêà: ", $main_X, " / ", $main_Y) // ïåðå÷èñëåíèå âñåõ ñóùåñòâóþùèõ ÿ÷ååê è èõ êîîðäèíàò
     
      IF($map[$cell] = 1)
         OBRABOTKA_CELL()
      END_IF
   END_CYC
   IF($log=1)
      LOGWRITE("$mass ", $mass)
      LOGWRITE("Ëó÷øèé õîä: ", $run_X, " / ", $run_Y, ", ", $runin_X, " / ", $runin_Y)
   END_IF
END_SUB

//==============================================================================


// __________________ ÏÐÎÃÐÀÌÌÀ ______________________________________________


LOGCLEAR
IF($log=1)
   LOGSHOW(1, $_xmax-335, 28) // îòîáðàæåíèå îêíà ëîãà
   WNDSIZE(WNDFIND("Ëîã"), 336, 560) // èçìåíåíèÿ ðàçìåðîâ îêíà ëîãà 260
END_IF

$start = $_ms
$mass = 0
$run_X = 0
$run_Y = 0
$runin_X = 0
$runin_Y = 0
$ret = 0

// äåëàåì ñêðèí
m_move($_xmax, 100)
WAITMS(30)
GETSCREEN //(370,80,855,655)
IF($colormode ! 0)
   COLORMODE($colormode, $startcoord_X,$startcoord_Y,$startcoord_X+($max_X*$step), $startcoord_Y+($max_Y*$step))
END_IF

// èùåì âñå ïåðâûå ýëåìåíòû è çàíîñèì â ìàññèâ
FIND($bmp_1, 100, 1)
PROCESSING()

// èùåì âñå âòîðûå ýëåìåíòû è çàíîñèì â ìàññèâ
FIND($bmp_2, 75, 2)
PROCESSING()

// èùåì âñå òðåòüè ýëåìåíòû è çàíîñèì â ìàññèâ
FIND($bmp_3, 100, 3)
PROCESSING()

// èùåì âñå ÷åòâ¸ðòûå ýëåìåíòû è çàíîñèì â ìàññèâ
FIND($bmp_4, 100, 4)
PROCESSING()

// èùåì âñå ïÿòûå ýëåìåíòû è çàíîñèì â ìàññèâ
FIND($bmp_5, 100, 5)
PROCESSING()

LOGWRITE ("Âðåìÿ âûïîëíåíèÿ ", $_ms-$start, " ìñ")
IF($mass ! 0)
   RUN()
   $time1 = $_time_t +8
   WAIT(5) // ìíå òàê íàäî
ELSE
   
END_IF



вот этот скрипт работает правда определяет не очень быстро может где то есть ошибки ? :-[ и вопрос как этот скрипт впихнуть в основной чтоб при вызове попдрограмы вот это  запускалось делало анлиз экрана ход  и все назад в основной скрипт а то его целяком в SUB(ход)  нельзя закинуть я так предполагаю что SUB в SUB нельзя запихивать  :D а как сделать незнаю подскажите пжжжжжжжжжж :'(

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: игра типа 3 в ряд
« Reply #10 on: May 28, 2017, 04:05:56 PM »
На счет скорости, все зависит от размера картинок и процента совпадения.

Сверху своего скрипта напиши
Code: (clickermann) [Select]
#include "Tri_vriad.cms"

// где надо запустить три в ряд пиши
TRI_VRIAD()

Только смотри чтоб в скрипте дублей подпрограмм не было типо mouse_move и m_move

Зануда

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: игра типа 3 в ряд
« Reply #11 on: May 28, 2017, 05:14:33 PM »
спасибо работает все как и хотелось просто шикарно ))) картинки все 5*5 пикселей  :D думает 4-5 сек хотелось бы быстрей но хорошо что и так  :)   спасибо большое

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: игра типа 3 в ряд
« Reply #12 on: May 29, 2017, 01:45:38 PM »
Я там с ошибками выложил. Просто под новые циклы был уже переделанный скрипт, но поле там было больше не под Небеса.
Подчистил.

На ход тратится 430-470 мс.


Зануда

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: игра типа 3 в ряд
« Reply #13 on: May 29, 2017, 03:03:32 PM »
 :) :) :) :)спасибо огромное