Author Topic: Типовые алгоритмы, вводные статьи (Новички, читайте!)  (Read 293140 times)

0 Members and 3 Guests are viewing this topic.

Krisp

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
ниче не понял, но ладно.
другой вопрос назрел - вот обратил внимание на отсчет количества проигранных циклов в главном окне проги. Подскажите, что надо прописать, чтобы определенные действия оно делало на каждый, например, третий цикл, если такое возможно? 

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
ниче не понял, но ладно.
другой вопрос назрел - вот обратил внимание на отсчет количества проигранных циклов в главном окне проги. Подскажите, что надо прописать, чтобы определенные действия оно делало на каждый, например, третий цикл, если такое возможно? 

Ну опять все через условия

Code: (clickermann) [Select]
INC($count,1)
IF($count = 3)
   // здесь действия на 3ем цикле
   
   $count = 0 // сброс
END_IF

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Такое возможно только после прочтения встроенной справки, она компактная и доходчивая.
Встроенная справка не поможет, тут необходимо сторон неё ПО реагирующее на команды из терминала каковым и является приведённая связка

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Встроенная справка не поможет, тут необходимо сторон неё ПО реагирующее на команды из терминала каковым и является приведённая связка
ответ был на вопрос "... что надо прописать, чтобы определенные действия оно делало на каждый, например, третий цикл..."


aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
С телефона не заметил, сори

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
С телефона не заметил, сори
Вот так понравилась идея, ещё когда первый раз обсуждали, всё лень попробовать.
Останавливает то, что мирандой не пользовался ни разу. Что, где, какая версия подходит, какая версия плагина и где искать.
Для новичков или таких ленивых как я не можешь выложить связку в виде ссылок хотя бы? Буду премного благодарен.


Barma1ey

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Наводишь мышь на окно, нажимаешь Alt+W теперь кликер перешел в оконный режим. Координаты теперь отсчитываются от начала этого окна, смотришь какие координаты и вписываешь в скрипт.
Сворачивать окно нельзя так как при этом винда ничего в нем не отрисовывает.
Проблема в том, что когда я нажимаю "Alt+W", то в любом месте окна цвет пикселя становится черным, т.е. проанализировать пиксели невозможно...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Проблема в том, что когда я нажимаю "Alt+W", то в любом месте окна цвет пикселя становится черным, т.е. проанализировать пиксели невозможно...
В браузере? Отключи аппаратное ускорение если включено.
Как и сворачивать окно, другую вкладку открывать не катит. Если нужен этот браузер, только новое окно поверх.


Krisp

  • Зашел в гости
  • *
  • Posts: 18
    • View Profile
Ну опять все через условия

Code: (clickermann) [Select]
INC($count,1)
IF($count = 3)
   // здесь действия на 3ем цикле
   
   $count = 0 // сброс
END_IF

то есть нам не надо отдельно обьявлять переменную $count заранее, она создается прямо тут же, в  INC? и еще такой вопрос: этот цикл будет происходит независимо от цикла всего скрипта, так? то есть возможно, что в течение одного цикла всего скрипта здесь пройдет 2-3 цикла (при специальной настройки)?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Я не знаю куда ты это хочешь засунуть но единовременно может выполняться только одна строка в скрипте, как только выполнение доберется до INC($count,1) тогда и произойдет наращивание.

Barma1ey

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
то есть нам не надо отдельно обьявлять переменную $count заранее, она создается прямо тут же, в  INC? и еще такой вопрос: этот цикл будет происходит независимо от цикла всего скрипта, так? то есть возможно, что в течение одного цикла всего скрипта здесь пройдет 2-3 цикла (при специальной настройки)?

1) ну, теоретически, так как она не была задана ранее, то по умолчанию она равна 0.
2) этот "цикл" будет происходить в теле основного цикла, так как это не цикл, а проверка условия на равенство $count трем, а будет оно равно трем при третьем прохождении основного цикла и обнулится
3) при специальной настройке (добавлении цикла внутри цикла при помощи FOR, WHILE) можно сколько хочешь выполнений условий.

freedom

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
$HWND = 16515858 // изменяется при каждом запуске целевой программы,
                // нужно каждый раз вписывать заного

Как можно еще привязать к окну например по запущенному процессу в системе или...?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Окно можно привязать по координате, командой HGET.
можно через поиск текста заголовка командой WNDFIND

Пример
Code: (clickermann) [Select]
HSET(HGET(100,100),1) // привязываем окно по координате 100 100 (координаты всегда абсолютные)
HSET(WNDFIND("Заголовок окна", 0),1) // привязываем окно с заданным заголовком

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Распознавание чисел
Скрипт переделан под версии 4.10+

Источник
Вот набросал распознавалку чисел. В основном для использования в играх, т.к. есть ограничения...
Старался сделать универсальным и настраиваемым. Не важно выравнивание идёт по первому или последнему разряду.
Вариант скрипта с последовательным перебором разрядов.
Хотел обойтись без текстовых файлов, только переменные. Использование текстовых файлов уменьшило бы размер скрипта, но я думаю сказалось бы незначительно на скорости работы и удобстве настройки.
Скрипт при внедрении лучше организовать как подпрограмму.

О ограничениях.
  • Только целые положительные числа. Думаю для игр этого хватит, здоровье там всякое, сила и т.п.
  • Максимум 10 разрядов. Если кровь из носа - можно переписать скрипт на другое кол-во  :)
  • Расположение цифр равномерное. Что это значит: разряды должны идти через равный промежуток
    299000, а не 299 000 и т.п.
  • Определение конца числа по маркеру (картинке) либо по отсутствию найденных цифр. Файл *11.bmp должен быть всё равно, например мой digit_11.bmp

Настройка.
Не пугаться! Письменно выглядит много, но всё на самом деле просто.
  • Необходимо заготовить картинки с цифрами 1,2,3,4,5,6,7,8,9,0 дать им соответствующие имена digit_1.bmp-digit_0.bmp
    Можно заготовить маркер окончания digit_11.bmp
  • Замерить шаг разрядов - расстояние в пикселах от начала одной цифры до начала следующей и присвоить переменной $sdvig значение чуть меньше (можно на 1-2 пиксела, для больших шрифтов можно и больше).
  • Если в пределах вашего скрипта буде распознаваться несколько шрифтов, при вызове подпрограммы нужно каждый раз задавать $sdvig и префикс имён файлов $pref. Если шрифт один - только один раз.
  • При вызове задаём координаты поля в котором будет искаться число
    $field_x1, $field_y1, $field_x2=, $field_y2
  • Результат возвращается в переменную $res, если не найдено $res=-1.

Скрипт "Распознавание чисел 1.2.cms" подключается к исполняемому скрипту через include.
Открываем "Скрипт.cms"
В вызове подпрограммы указываем область в которой будут распознаваться цифры и сдвиг
распознавание(300,577, 362,597, 6)

В архиве находится пример распознавания числа в поле редактора "Цвет:". или HWND
Если распознаются не все числа, нужно подрегулировать сдвиг (больше/меньше)
« Last Edit: November 01, 2014, 03:27:40 PM by Oraven »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
хочу предложить свой вариант определения чисел. я думаю он немного быстрее и легче в настройке.

данный скрипт в данном виде настроен на определения числа номера цвета в км (естественно на моем пк)

Code: (clickermann) [Select]
$1 = 2598951422
$2 = 3563910420
$3 = 1725485783
$4 = 2439610189
$5 = 1142298982
$6 = 1619652509
$7 = 1251613421
$8 = 3997989515
$9 = 228076718
$0 = 1886634037

$x1 =  813 //координаты первой цифры, необязательно чтобы цифра полностью влазила в эти координаты
$y1 =  621
$x2 =  818
$y2 =  630

GETSCREEN
//$n = 1
//WHILE($n ! 9) //определение значений переменных, в км номер цвета 8-значный, поэтому в начале определяем от 1 до 8, а вторым кругом 9 и 0. естественно выставляем цвет номер 12345678, вторым кругом 90. после определеня их нужно вписать в переменные выше.
//
//   $count = PXLCRC ($x1,$y1,$x2,$y2)
//   print($n," = ", $count)
//   INC($n,1)
//   INC($x1,7)//шаг между цифрами
//   INC($x2,7)
//END_CYC
//halt

WHILE($n ! 1) //непосредственно определение цифр и запись их в массив
   $n = PXLCRC($x1,$y1, $x2,$y2)
   
   switch($n)
   case($0)
      ARRPUSH ($var, 0)
   case($1)
      ARRPUSH ($var, 1)
   case($2)
      ARRPUSH ($var, 2)
   case($3)
      ARRPUSH ($var, 3)
   case($4)
      ARRPUSH ($var, 4)
   case($5)
      ARRPUSH ($var, 5)
   case($6)
      ARRPUSH ($var, 6)
   case($7)
      ARRPUSH ($var, 7)
   case($8)
      ARRPUSH ($var, 8)
   case($9)
      ARRPUSH ($var, 9)
   default
      $n = 1
   end_switch
   
     INC ($x1,7)
     INC ($x2,7)         
END_CYC


$num = 0
$r = 1
WHILE(ARRSIZE ($var) ! 0)//с помощью математики собираем всё в единое число
   $num = int(arrpop($var))*$r+$num
   $r = $r*10   
END_CYC

print($num)

halt
« Last Edit: November 02, 2014, 12:24:29 AM by dramster »