Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - gsukhado

Pages: 1 ... 3 4 [5] 6 7
61
Общие вопросы / Re: Виртуальная машина
« on: October 05, 2017, 11:46:45 PM »
Ну тогда сорри - я с ней ни разу не сталкивался, в Инете посмотрел что вариантов много, думал может есть какие предпочтения для Кликермана. А если нет - тогда будем экспериментировать :)

62
Общие вопросы / Виртуальная машина
« on: October 05, 2017, 10:46:01 PM »
Вообще бы хорошо создать тему с использованием виртуальной машины, потому как нубу будет трудно в этом разобраться. Не все умеют ставить виндовс, а работать в фоне нужно чуть ли не каждому. Скачать уже готовую виртуалку с портативной VirtualBox куда проще.
Сейчас тоже вышел на то, что скрипт заработал, а комп для работы нужен. Полазил здесь - хотя бы краткого введения или инструкций по виртуальной машине не нашел. Может быть что-то посоветуете или ссылочку дадите, что и как правильно применять?

63
Теперь с #define понял идею, спасибо!!! :)

64
Хорошо, если getvar / setvar совсем не к месту (да, я с таковыми ни разу еще не сталкивался), то и #include  абсолютно ни при чем - мне не надо прятать код, мне надо упростить код, когда почти в каждой строке я вынужден писать длинные выражения типа

if ((pxl($x_gr+INT((231-$x_gr)*$x_peresch),$y_vert_chat)=4144959)&(pxl($x_gr+INT((436-$x_gr)*$x_peresch),$y_vert_chat+INT(4*$y_peresch))=12566527)&(pxl($x_gr+INT((524-$x_gr)*$x_peresch),$y_vert_chat+INT(17*$y_peresch))=12566527)&(pxl($x_gr+INT((576-$x_gr)*$x_peresch),$y_vert_chat+INT(48*$y_peresch))=16744319))

я просто чисто технически где-то в скобках или знаках ошибусь.
И хочу его сократить до

if ((pxl(функция1(231),$y_vert_chat)=4144959)&(pxl(функция1(436),$y_vert_chat+функция2(4))=12566527)&(pxl(функция1(524),$y_vert_chat+функция2(17))=12566527)&(pxl(функция1(576)),$y_vert_chat+функция2(48))=16744319))
а сами "функция1" и "функция2" вынести например в подпрограмму или каким-то образом задать. Это обычные алгебраические функции.

Как это можно сделать?

65
Вот вроде нашел что-то похожее, правильным ли будет такое решение (сейчас не могу проверить на боевом алгоритме)?

Code: (clickermann) [Select]
sub(x_multi, $tmp_znach)
  $tmp_znach1=getvar($tmp_znach)
  setvar($tmp_znach, $x_gr+INT(($tmp_znach1-$x_gr)*$x_peresch)
end_sub

sub(y_multi, $tmp_znach)
  $tmp_znach1=getvar($tmp_znach)
  setvar($tmp_znach, $y_gr+INT(($tmp_znach1-$y_gr)*$y_peresch)
end_sub

// Основная программа

ldown(x_multi(253)),y_multi(133))


66
День добрый.

Требуется задавать масштабируемые значения для переменных, т.е. чтобы координаты для формул прописывались не в явном виде, а как функция = ($x_gr+INT(($x_ishodnoe-$x_gr)*$x_peresch)) от координаты $x_ishodnoe

Вручную везде по тексту вводить конструкции типа
ldown($x_gr+INT(($x_ishodnoe-$x_gr)*$x_peresch),$y_gr+INT(($y_ishodnoe-$y_gr)*$y_peresch))

или
if ((pxl($x_gr+INT(($x_ishodnoe-$x_gr)*$x_peresch),$y_vert_chat)=4144959)&(pxl($x_gr+INT(($x_ishodnoe-$x_gr)*$x_peresch),$y_vert_chat+INT(4*$y_peresch))=12566527)&(pxl($x_gr+INT(($x_ishodnoe-$x_gr)*$x_peresch),$y_vert_chat+INT(17*$y_peresch))=12566527)&(pxl($x_gr+INT(($x_ishodnoe-$x_gr)*$x_peresch),$y_vert_chat+INT(48*$y_peresch))=16744319))

- просто замучаешься. Наверняка есть возможность задания подобных функций, чтобы можно было сокращать до примерно
ldown(функция($x_ishodnoe),функция($y_ishodnoe))
Но увы в описаниях не нашел. Если просто через обычную подпрограмму - то надо вводить какие-то дополнительные переменные чтобы вернуть рассчитанное значение... Явно я что-то в хэлпах не обнаружил? подскажите плз...

67
Использование / Re: Помогите пожалуйста
« on: September 15, 2017, 12:32:14 PM »
А если попробовать применить COLORMODE (6 или 7) и уменьшить точность нахождения картинки со 100% на пониже? 
Плюс в конце halt добавить, чтобы понять что цикл завершился, а не запускается бесконечно

68
А в чем именно проблема?
Номер вроде виден четко, для расшифровки чисел скрипты на форуме есть. Соответственно номер определить можешь.
"Врата" так понимаю отображаются одной и той же картинкой, соответственно просканировать область и найти их место тоже можно...

69
Предложения / Re: Анализ текста в окне
« on: September 09, 2017, 06:43:52 PM »
Тогда может быть вообще было бы правильней сравнивать с $h_str  ? Чтобы любые символы ниже минимальной высоты строки не учитывались?

Code: (clickermann) [Select]
FOR($char=0,$char<arrsize($x1_char_arr))
 
   IF($y2_char_arr[$char]-$y1_char_arr[$char] > ($h_str-1))
      shape($x1_char_arr[$char],$y1_char_arr[$char],$x2_char_arr[$char],$y2_char_arr[$char])
      reader($shape_str,$char, $file_name_to_raspoznav_vhod)
   END_IF
 
END_CYC

70
Предложения / Re: Анализ текста в окне
« on: September 08, 2017, 07:10:54 PM »
ммм...
Но это означает, если я правильно понимаю, что алгоритм не отсеивает малые строки, что должна делать переменная $h_str ? Или я не правильно понял ее значение?

Чтобы было не совсем абстрактно, привожу полностью код, с которым вожусь. Блок по распознаванию - строка 412. Предполагаю, что все-таки что-то не то с подпрограммой lines, строка 33.
... опс, "Сообщение превышает максимально допустимую длину (20000 знаков).", придется обрезать

Code: (clickermann) [Select]
#name "Фарм Наземный"

//   Начало основной программы - строка 800

//   Изменяемые переменные
$glob_map_SUMMARNO=500 // общее число повторений работы по карте
$glob_map_for_centrirovanie_MAX_1=15 // как часто прыгаем в начало, минимальное значение
$glob_map_for_centrirovanie_MAX_2=20 // как часто прыгаем в начало, максимальное значение
$max_lvl_shaht=15 // максимальный уровень шахт, которые можем атаковать
$verojatn_proverki_voisk=1 // доля вероятности проверки войск, чем выше - тем реже проверяем
$rezhim_obuchenia=0 // если =1 то при не вводе цифры будет остановка программы

////////////////////////////////////////////////////////////////////////////////
//////////  описание важных подпрограмм                                            ////
////////////////////////////////////////////////////////////////////////////////
//lines($x1_text,$y1_text,$x2_text,$y2_text) // определяет координаты строк
//ответ - массивы   $x1_line_arr,$y1_line_arr,$x2_line_arr,$y2_line_arr
/////////
//pos_size($x1_line,$y1_line,$x2_line,$y2_line) // координаты и количество символов
//ответ - массивы   $x1_char_arr,$y1_char_arr,$x2_char_arr,$y2_char_arr
////////
//shape($x1_char,$y1_char,$x2_char,$y2_char)  //очертание каждого символа
//ответ - строка очертания вида  01110311112042200240~
////////
//reader($shape)  //обучение и распознавание
//если цифра не распознана, то вылезет окно ввода, где нужно вписать нужную цифру, на эту цифру указывает курсор.
//ответ - строка $all_str

////////////////////////////////////////////////////////////////////////////////
/////////разбивает текст на строки//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

SUB(lines,$x1_text,$y1_text,$x2_text,$y2_text)
   UNDEFINE ($x1_line_arr)
   UNDEFINE ($y1_line_arr)
   UNDEFINE ($x2_line_arr)
   UNDEFINE ($y2_line_arr)
   //   print("===>подпрогр Lines")
   
   IF_PIXEL_IN($x1_text,$y1_text, $x1_text,$y2_text, $char_color)
      print("...(текст не влазит в границы распознавания слева)")
      $uspeh_raspoznav=0
      GOTO(to_end_lines)
   END_IF
   
   IF_PIXEL_IN($x2_text,$y1_text, $x2_text,$y2_text, $char_color)
      print("...(текст не влазит в границы распознавания справа)")
      $uspeh_raspoznav=0
      GOTO(to_end_lines)
   END_IF
   
   IF(PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)<$x2_text-$x1_text+1)
      print("...(первая строка обрезана, НЕ учитывается)") // в т.ч. скидывает помехи?
      while(PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)<$x2_text-$x1_text+1)
         inc($y1_text)
      END_CYC
      if ($y1_text=$y2_text)   //т.е. вообще везде какие-то помехи
         $uspeh_raspoznav=0
         GOTO(to_end_lines)
      end_if
   END_IF
   
   while($y1_text<$y2_text)
      //      print("исходное $y1_text= ", $y1_text, " и $y2_text=", $y2_text)
      while((PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)=$x2_text-$x1_text+1)&($y1_text<$y2_text))
         inc($y1_text)
      END_CYC
      //      print("взяли для границ цифр $y1_text= ", $y1_text)
     
      IF($y1_text<$y2_text)
         arrpush($x1_line_arr, $x1_text)
         arrpush($y1_line_arr, $y1_text)
         
         $h_str_temp=0
         while(($h_str_temp<$h_str)&($y1_text<$y2_text))
           
            while((PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)<$x2_text-$x1_text+1)&($y1_text<$y2_text))
               inc($y1_text)
               inc($h_str_temp)
            END_CYC
            //            print("сюда дошли?_2-1 $h_str_temp=", $h_str_temp, " $h_str=", $h_str, " $y1_text=", $y1_text, " $y2_text=", $y2_text)     
            IF(($h_str_temp<$h_str)&($y1_text<$y2_text))
               
               while((PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)=$x2_text-$x1_text+1)&($y1_text<$y2_text))
                  inc($y1_text)
               END_CYC
               $h_str_temp = 0
               $del_arr = arrpop($x1_line_arr)
               $del_arr = arrpop($y1_line_arr)
               arrpush($x1_line_arr, $x1_text)
               arrpush($y1_line_arr, $y1_text)
            END_IF
         END_CYC
      END_IF
     
      IF(PXLCOUNT($x1_text,$y1_text,$x2_text,$y1_text,$back_color)=$x2_text-$x1_text+1)
         arrpush($x2_line_arr, $x2_text)
         arrpush($y2_line_arr, $y1_text-1)
      else
         print("...(последняя строка обрезана, НЕ учитывается)")
         $del_arr = arrpop($x1_line_arr)
         $del_arr = arrpop($y1_line_arr)
      END_IF
   END_CYC
   
   //   print("итог Lines- количество строк = ",arrsize($x1_line_arr))
   
   // координаты в лог и скрины
   //FOR($a=0,$a<arrsize($x1_line_arr))
   //      print($x1_line_arr[$a]," ",$y1_line_arr[$a]," ",$x2_line_arr[$a]," ",$y2_line_arr[$a])
   //   SCREENSHOTEX($x1_line_arr[$a],$y1_line_arr[$a],$x2_line_arr[$a],$y2_line_arr[$a], ["подпрогр_Lines_скрин_итога_"])
   //END_CYC
   
   IF(arrsize($x1_line_arr)=0)
      print("...(текста не найдено)")
      $uspeh_raspoznav=0
      GOTO(to_end_lines)
      //      ggclick1(795, 15, 3)  //свернули окно игры
      //      halt
   END_IF
   
   to_end_lines:
   
END_SUB

////////////////////////////////////////////////////////////////////////////////
/////////размер и количество символов в строке//////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
SUB(pos_size,$x1_line,$y1_line,$x2_line,$y2_line)
   //   print("===>подпрогр pos_size")
   UNDEFINE ($x1_char_arr)
   UNDEFINE ($y1_char_arr)
   UNDEFINE ($x2_char_arr)
   UNDEFINE ($y2_char_arr)
   
   
   FOR($x1_line_temp=$x1_line,$x1_line_temp<$x2_line+1)
      FOR($y1_line_temp=$y1_line,$y1_line_temp<$y2_line+1)
         IF(pxl($x1_line_temp,$y1_line_temp)=$char_color)
            arrpush($x1_char_arr,$x1_line_temp)
            while(PXLCOUNT($x1_line_temp,$y1_line,$x1_line_temp,$y2_line,$back_color)<$y2_line-$y1_line+1)
               inc($x1_line_temp)
            END_CYC
            arrpush($x2_char_arr,$x1_line_temp-1)
         END_IF
      END_CYC
   END_CYC
   
   FOR($i_char=0,$i_char<arrsize($x1_char_arr))
      SCANPXL ($pix_temp,$x1_char_arr[$i_char],$y1_line,$x2_char_arr[$i_char],$y2_line,$char_color)
      arrpush($y1_char_arr,$pix_temp[1])
      arrpush($y2_char_arr,$pix_temp[arrsize($pix_temp)-1])
      UNDEFINE ($pix_temp)
   END_CYC
   
   
   //   print("количество символов в строке - ",arrsize($x1_char_arr))
   
   //скрины каждого символа
   //   FOR($a=0,$a<arrsize($x1_char_arr))
   //      SCREENSHOTEX($x1_char_arr[$a],$y1_char_arr[$a],$x2_char_arr[$a],$y2_char_arr[$a], ["подпр_Pos_size_очертание_символа_"])
   //   END_CYC
   
END_SUB
////////////////////////////////////////////////////////////////////////////////
////////////////очертание символов//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
SUB(shape,$x1_char,$y1_char,$x2_char,$y2_char)
   //   print("===>подпрогр shape")
   UNDEFINE($left_1)
   UNDEFINE($left_2)
   UNDEFINE($left_3)
   UNDEFINE($left_4)
   UNDEFINE($left_5)
   UNDEFINE($right_1)
   UNDEFINE($right_2)
   UNDEFINE($right_3)
   UNDEFINE($right_4)
   UNDEFINE($right_5)
   UNDEFINE($up_1)
   UNDEFINE($up_2)
   UNDEFINE($up_3)
   UNDEFINE($up_4)
   UNDEFINE($up_5)
   UNDEFINE($down_1)
   UNDEFINE($down_2)
   UNDEFINE($down_3)
   UNDEFINE($down_4)
   UNDEFINE($down_5)
   int(($y2_char-$y1_char+1)/2)
   
   //лево
   FOR($temp=$x1_char,(pxl($temp,$y2_char)!$char_color)&($temp<$x2_char))
      inc($left_1)
   END_CYC
   $left_1 = ROUND($left_1/($x2_char-$x1_char+1)/$accur,-1)*10
   IF($left_1 > 9)
      $left_1 = 9
   END_IF
   FOR($temp=$x1_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp<$x2_char))
      inc($left_2)
   END_CYC
   $left_2 = ROUND($left_2/($x2_char-$x1_char+1)/$accur,-1)*10
   IF($left_2 > 9)
      $left_2 = 9
   END_IF
   FOR($temp=$x1_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/2,0))!$char_color)&($temp<$x2_char))
      inc($left_3)
   END_CYC
   $left_3 = ROUND($left_3/($x2_char-$x1_char+1)/$accur,-1)*10
   IF($left_3 > 9)
      $left_3 = 9
   END_IF
   FOR($temp=$x1_char,(pxl($temp,$y1_char+ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp<$x2_char))
      inc($left_4)
   END_CYC
   $left_4 = ROUND($left_4/($x2_char-$x1_char+1)/$accur,-1)*10
   IF($left_4 > 9)
      $left_4 = 9
   END_IF
   FOR($temp=$x1_char,(pxl($temp,$y1_char)!$char_color)&($temp<$x2_char))
      inc($left_5)
   END_CYC
   $left_5 = ROUND($left_5/($x2_char-$x1_char+1)/$accur,-1)*10
   IF($left_5 > 9)
      $left_5 = 9
   END_IF
   
   //право
   FOR($temp=$x2_char,(pxl($temp,$y2_char)!$char_color)&($temp>$x1_char),-1)
      inc($right_1)
   END_CYC
   $right_1 = $right_1 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
   $right_1 = ROUND($right_1/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
   IF($right_1 > 9)
      $right_1 = 9
   END_IF
   FOR($temp=$x2_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp>$x1_char),-1)
      inc($right_2)
   END_CYC
   $right_2 = $right_2 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
   $right_2 = ROUND($right_2/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
   IF($right_2 > 9)
      $right_2 = 9
   END_IF
   FOR($temp=$x2_char,(pxl($temp,$y2_char-ROUND(($y2_char-$y1_char)/2,0))!$char_color)&($temp>$x1_char),-1)
      inc($right_3)
   END_CYC
   $right_3 = $right_3 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
   $right_3 = ROUND($right_3/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
   IF($right_3 > 9)
      $right_3 = 9
   END_IF
   FOR($temp=$x2_char,(pxl($temp,$y1_char+ROUND(($y2_char-$y1_char)/4,0))!$char_color)&($temp>$x1_char),-1)
      inc($right_4)
   END_CYC
   $right_4 = $right_4 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
   $right_4 = ROUND($right_4/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
   IF($right_4 > 9)
      $right_4 = 9
   END_IF
   FOR($temp=$x2_char,(pxl($temp,$y1_char)!$char_color)&($temp>$x1_char),-1)
      inc($right_5)
   END_CYC
   $right_5 = $right_5 + (int(($y2_char-$y1_char+1)/2)-($x2_char-$x1_char))
   $right_5 = ROUND($right_5/(int(($y2_char-$y1_char+1)/2))/$accur,-1)*10
   IF($right_5 > 9)
      $right_5 = 9
   END_IF
   
   //верх
   FOR($temp=$y1_char,(pxl($x1_char,$temp)!$char_color)&($temp<$y2_char))
      inc($up_1)
   END_CYC
   $up_1 = ROUND($up_1/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($up_1 > 9)
      $up_1 = 9
   END_IF
   FOR($temp=$y1_char,(pxl($x1_char+ROUND(($x2_char-$x1_char)/4,0),$temp)!$char_color)&($temp<$y2_char))
      inc($up_2)
   END_CYC
   $up_2 = ROUND($up_2/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($up_2 > 9)
      $up_2 = 9
   END_IF
   FOR($temp=$y1_char,(pxl($x1_char+ROUND(($x2_char-$x1_char)/2,0),$temp)!$char_color)&($temp<$y2_char))
      inc($up_3)
   END_CYC
   $up_3 = ROUND($up_3/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($up_3 > 9)
      $up_3 = 9
   END_IF
   FOR($temp=$y1_char,(pxl($x2_char-ROUND(($x2_char-$x1_char)/4,0),$temp)!$char_color)&($temp<$y2_char))
      inc($up_4)
   END_CYC
   $up_4 = ROUND($up_4/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($up_4 > 9)
      $up_4 = 9
   END_IF
   FOR($temp=$y1_char,(pxl($x2_char,$temp)!$char_color)&($temp<$y2_char))
      inc($up_5)
   END_CYC
   $up_5 = ROUND($up_5/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($up_5 > 9)
      $up_5 = 9
   END_IF
   
   //низ
   FOR($temp=$y2_char,(pxl($x1_char,$temp)!$char_color)&($temp>$y1_char),-1)
      inc($down_1)
   END_CYC
   $down_1 = ROUND($down_1/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($down_1 > 9)
      $down_1 = 9
   END_IF
   FOR($temp=$y2_char,(pxl($x1_char+ROUND(($x2_char-$x1_char)/4,0),$temp)!$char_color)&($temp>$y1_char),-1)
      inc($down_2)
   END_CYC
   $down_2 = ROUND($down_2/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($down_2 > 9)
      $down_2 = 9
   END_IF
   FOR($temp=$y2_char,(pxl($x1_char+ROUND(($x2_char-$x1_char)/2,0),$temp)!$char_color)&($temp>$y1_char),-1)
      inc($down_3)
   END_CYC
   $down_3 = ROUND($down_3/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($down_3 > 9)
      $down_3 = 9
   END_IF
   FOR($temp=$y2_char,(pxl($x2_char-ROUND(($x2_char-$x1_char)/4,0),$temp)!$char_color)&($temp>$y1_char),-1)
      inc($down_4)
   END_CYC
   $down_4 = ROUND($down_4/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($down_4 > 9)
      $down_4 = 9
   END_IF
   FOR($temp=$y2_char,(pxl($x2_char,$temp)!$char_color)&($temp>$y1_char),-1)
      inc($down_5)
   END_CYC
   $down_5 = ROUND($down_5/($y2_char-$y1_char+1)/$accur,-1)*10
   IF($down_5 > 9)
      $down_5 = 9
   END_IF
   
   
   //   print($left_1," ",$left_2," ",$left_3," ",$left_4," ",$left_5)
   //   print($right_1," ",$right_2," ",$right_3," ",$right_4," ",$right_5)
   //   print($up_1," ",$up_2," ",$up_3," ",$up_4," ",$up_5)
   //   print($down_1," ",$down_2," ",$down_3," ",$down_4," ",$down_5)
   
   $shape_str=STRCONCAT($left_1,$left_2,$left_3,$left_4,$left_5,$right_1,$right_2,$right_3,$right_4,$right_5,$up_1,$up_2,$up_3,$up_4,$up_5,$down_1,$down_2,$down_3,$down_4,$down_5,"~")
   
   //print($shape_str)
   
END_SUB

////////////////////////////////////////////////////////////////////////////////
////////////////распознавание и обучение////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

SUB(reader,$shape,$n_char,$file_name_to_raspoznav)
   
   //   print("===>подпрогр reader")
   FOR($n_str=1,$n_str<TFCOUNT($file_name_to_raspoznav)+1)
      IF(STRPOS (TFREAD ($file_name_to_raspoznav,$n_str), $shape) > 0)
         $t_char = STRCUT(TFREAD ($file_name_to_raspoznav,$n_str), 1, STRPOS(TFREAD($file_name_to_raspoznav,$n_str),":~")-1)
         //         print("символ: ", $t_char)
         strfilter($t_char, "*", 0 )
         $all_str = STRCONCAT ($all_str,$t_char)
         $n_str=TFCOUNT($file_name_to_raspoznav)+1
         $check=0
      else
         $check=1
      END_IF
   END_CYC
   
   IF($check=1)
      move(int(($x2_char_arr[$n_char]-$x1_char_arr[$n_char])/2)+$x1_char_arr[$n_char],$y2_char_arr[$n_char])
      $char_write = INPUTBOX(STRCONCAT("введи цифру под номером ",$n_char+1), "", 120)
      IF($char_write = "")
         if ($rezhim_obuchenia=1)
            print("cancel - полный останов")
            halt
         else
            print("cancel - цифру не распознали и не знаем, НО продолжаем")
            $uspeh_raspoznav=0
            $all_str = STRCONCAT (99,$all_str)
         end_if
      END_IF
      $all_str = STRCONCAT ($all_str,$char_write)
      $check=0    //////////////////
     
      FOR($n_str=1,$n_str<TFCOUNT($file_name_to_raspoznav)+1)
         IF(STRPOS (TFREAD ($file_name_to_raspoznav,$n_str), STRCONCAT($char_write,":~")) =1)
            TFWRITE ($file_name_to_raspoznav,STRCONCAT(TFREAD($file_name_to_raspoznav,$n_str),$shape))
            TFDELETE ($file_name_to_raspoznav,$n_str)
            $n_str=TFCOUNT($file_name_to_raspoznav)+1
            $check=0
         else
            $check=1
         END_IF
      END_CYC
      IF($check=1)
         TFWRITE ($file_name_to_raspoznav,STRCONCAT($char_write,":~",$shape))
      END_IF
   END_IF
   
END_SUB

/////////////////////////////////////////////////////////////////////////////////
//==============================================================================
// головная подпрограмма для распознавания                                ///////
/////////////////////////////////////////////////////////////////////////////////
IF(TFCOUNT("data_gorizont.ini") = 0)
   TFWRITE ("data_gorizont.ini"," ")
END_IF
IF(TFCOUNT("data_number_voisk.ini") = 0)
   TFWRITE ("data_number_voisk.ini"," ")
END_IF

UNDEFINE ($all_str)
$all_str = ""
UNDEFINE ($uspeh_raspoznav)
$uspeh_raspoznav = 1  // если $uspeh_raspoznav=0 то был сбой в распознавании

sub(raspoznav, $rasp_x1,$rasp_y1,$rasp_x2,$rasp_y2,$file_name_to_raspoznav_vhod)
   
   UNDEFINE ($all_str)
   $all_str = ""
   UNDEFINE ($uspeh_raspoznav)
   $uspeh_raspoznav = 1  // если $uspeh_raspoznav=0 то был сбой в распознавании
   
   //   GETSCREEN()
   //   COLORMODE(6)
   //       SCREENSHOT(["my_analiz-Тестовый__6_до_"])
   
   //обязательная обработка изображения до двух цветов
   GETSCREEN($rasp_x1,$rasp_y1,$rasp_x2,$rasp_y2)
   COLORMODE(7, $rasp_x1,$rasp_y1,$rasp_x2,$rasp_y2)
   
   //   print("координаты к распозн: ", $rasp_x1, " ", $rasp_y1, " ", $rasp_x2, " ", $rasp_y2)
   SCREENSHOTEX($rasp_x1,$rasp_y1,$rasp_x2,$rasp_y2, ["my_analiz_уровень_шахты_ИЛИ_цифры_- до обработки"])
   
   
   PXLREPLACE ($rasp_x1,$rasp_y1,$rasp_x2,$rasp_y2, 8355839, 8355711)
   PXLREPLACE ($rasp_x1,$rasp_y1,$rasp_x2,$rasp_y2, 8388607, 8355711)
   PXLREPLACE ($rasp_x1,$rasp_y1,$rasp_x2,$rasp_y2, 8388479, 8355711)
   PXLREPLACE ($rasp_x1,$rasp_y1,$rasp_x2,$rasp_y2, 11632561, 8355711)

   PXLREPLACE(234,80,234,100, -1, 8355711)      //это вручную для количества войск
   PXLREPLACE(200,100,234,100, -1, 8355711)
   PXLREPLACE(200,80,234,100, 16353673, 15724527)  //  синий
   PXLREPLACE(200,80,234,100, 14778337, 8355711)  //    розовый


   
   SCREENSHOTEX($rasp_x1,$rasp_y1,$rasp_x2,$rasp_y2, ["my_analiz_уровень_шахты_ИЛИ_цифры_- в рамках распознавания"])
   
 
   lines($rasp_x1,$rasp_y1,$rasp_x2,$rasp_y2)
   //   print("подпрогр Lines закончили, начинаем цикл")
   if ($uspeh_raspoznav=1)
      FOR($line=0,$line<arrsize($x1_line_arr))        // цикл можно убрать, т.к. все в одну строчку
         pos_size($x1_line_arr[$line],$y1_line_arr[$line],$x2_line_arr[$line],$y2_line_arr[$line])
         
         FOR($char=0,$char<arrsize($x1_char_arr))
            shape($x1_char_arr[$char],$y1_char_arr[$char],$x2_char_arr[$char],$y2_char_arr[$char])
            reader($shape_str,$char, $file_name_to_raspoznav_vhod)
         END_CYC
      END_CYC
   else
      $all_str = 0
   end_if
   
   if ($uspeh_raspoznav=0)
      $all_str = 0
   end_if
   
   //   print("итог распознавания в подпрогр= ", $all_str)
end_sub


////////////////////////////////////////////////////////////////////////////////
//        ОСНОВНАЯ ПРОГРАММА                                               /////
////////////////////////////////////////////////////////////////////////////////

print("--------------")
print("Начинаем фармить на поверхности")

//   параметры для распознавания
$char_color = 16777215   // цвет символов
$back_color = 8355711  //  цвет фона
$accur = 5       //точность  (1 - макс точность; рекомендуется =5)
$h_str = 7     //минимальная высота строки
         
 
....



потести.
Сейчас только обратил внимание, что в процитированном коде условие строки 9 должно выполняться всегда, т.к. идентично строке 2 ? У меня это соответственно строки 75 и 72

71
Предложения / Re: Анализ текста в окне
« on: September 08, 2017, 01:16:43 AM »
За скрипт спасибо, буду тестировать потом отпишусь
Докладываю: для однотипных цифр работает просто влет, схватил по паре-тройке разных вариантов написания и уверенно все распознает.
В конкретной игре, с которой вожусь - большинство цифр плавающие, по шрифту одни и те же, но размер может отличаться до полутора раз. Поэтому скриптом уже наловилось по 30-40 их вариантов, и обучение еще не завершилось. Но алгоритм распознавания отличный ))
Правда, обнаружилась еще бяка - иногда по экрану в игре гуляют произвольные человечки, которые топчутся и по цифрам, и в итоге при распознавании может выдать ошибку (см скрин). Редко, но бывает. Можно ли как-то на эту ошибку сразу программно реагировать и просто говорить что сценарий прерывать не надо?

72
Предложения / Re: Анализ текста в окне
« on: August 29, 2017, 10:49:23 PM »
...
по идее можно было просто минимальную высоту $h_str уменьшить, и все проблемы.
Нет, вариант уменьшения высоты не подойдет - а вдруг артефакт окажется высотой в одну пикселю? :)
За скрипт спасибо, буду тестировать потом отпишусь

73
Предложения / Re: Анализ текста в окне
« on: August 29, 2017, 07:07:28 PM »
вот накалякал под вышеуказанную заготовку
dramster, для ситуации глюкнутой картинки (изначально по ряду причин захват не той области для распознавания), как во вложении - у меня происходит зацикливание строк 43-62. Если я правильно понимаю, то это за счет строки 54 $h_str_temp = 0 и того, что нижний артефакт меньше чем $h_str.
Не подскажешь, как убрать зацикливание, какие дополнительные проверки ввести?

74
Vint
Круто, ОГРОМНОЕ СПАСИБО!

...а скрины вот здесь http://crapware.aidf.org/forum/index.php?topic=3389.msg23167#msg23167 ты в каком редакторе делал? У меня в Кликермане ни пробелы, ни табы не видны, просто пустое место и все (хочу визуально проверить коды, в которых подобные ошибки появлялись)

75
Здесь совсем непонятно. Если предположить, что
Code: (clickermann) [Select]
$tmp_x = 62
$tmp_y = 27
то $x1, $y1 считает верно, 31 84
а $x2, $y2 нет.
Даже без учёта того что с кодировкой что-то не то.
31 = x-26-5        x = 62
49 = x+6+3+5    x = 35
x != x
Как это понимать? Или ответ не от этого примера?
Мог опечататься по конкретным значениям координат когда переносил...

Текущий рабочий пример, с которым пытаюсь разобраться:
взял код отсюда http://crapware.aidf.org/forum/index.php?topic=88.msg23101#msg23101 и вставил в свой скрипт. И не работает. Свой скрипт порезал, оставил только ключевой блок для распознавания, чтобы найти ошибку, и подобавлял скриншотов и Print-ов. Четкий пример - строка 81 (была в исходном коде) не печатает, а сделал строку 80 - из нее в листинг информация выводится.
Скрин окончания листинга прилагается.
Также привожу сделанный скриптом скрин части экрана для распознавания - судя по нему, подпрограмма Lines должна выдавать количество строк не равное нулю.

Да, данный конкретный код копировал с форума в Блокнот, а не напрямую в Кликер. А потом редактировал уже в Кликере. Если это принципиально - попробую напрямую в Кликер сразу.
Версия Кликера - 4.12

Pages: 1 ... 3 4 [5] 6 7