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 - Qwerry

Pages: 1 [2] 3 4 ... 8
16
Использование / Re: «Pearls before swine»
« on: November 30, 2018, 08:26:36 PM »
Если кто предложит вариант попроще - можно попробовать.

При 6 колормоде сканпикчер довольно хорошо находит. Правда, если рядов шесть, то в последнем графика чуть меняется (пришлось сделать два шаблона жемчужин). В целом, ручной режим с подсказками готов.

Code: (clickermann) [Select]
GETSCREEN
colormode(6)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "base.bmp", -1, 90)
   //  print("base+")
   $x_b=$_return1
   $y_b=$_return2
end_if
WHILE(1)
   $l[0] = 0
   $l[1] = 0
   $l[2] = 0
   $l[3] = 0
   $l[4] = 0
   $l[5] = 0
   $l[6] = 0
   UNDEFINE($ARR_SCAN) //т.к. тут лежат координаты жемчужин, лучше будем чистить в начале, чтобы в будущем в автоматическом режиме не сильно мучиться с тем, куда кликать (сдвигать где-то на +3, +3)
   SCANPICTURE($ARR_SCAN, $x_b-55,$y_b+15,$x_b+694,$y_b+200, "pearl.bmp", -1, 98)
   SCANPICTURE($ARR_SCAN, $x_b-55,$y_b+120,$x_b+694,$y_b+200, "pearl2.bmp", -1, 97)
   Print(ARRSIZE($ARR_SCAN)/2)
   
   $A=$ARR_SCAN[1]
   $b=0
   FOR ($i=1,$i < ARRSIZE($ARR_SCAN),2)
      If($a<$ARR_SCAN[$i])
         $a=$ARR_SCAN[$I]
         INC($b,1)
      End_if
      $l[$b]=$l[$b]+1
   End_cyc
   
   //Print(" ",ARRSIZE($l))
   print($l[0] , " ", $l[1], " ",$l[2], " ", $l[3], " ",$l[4], " ", $l[5], " ",$l[6])
   
   $i = 0
   $l_mem = $l[$i]
   WHILE($l[0] ^ $l[1] ^ $l[2] ^ $l[3] ^ $l[4] ^ $l[5] ^ $l[6])     //
     
      $l[$i] = $l[$i] - 1
      IF($l[$i] = -1)
         $l[$i] = $l_mem
         inc($i)
         $l_mem = $l[$i]
      END_IF
     
   END_CYC
   If(($l[0]<2)&($l[1]<2)&($l[2]<2)&($l[3]<2)&($l[4]<2)&($l[5]<2)&($l[6]<2))
      Print("1 или 1-1-1 или 1-1-1-1-1")
   Else
      print($l[0] , " ", $l[1], " ",$l[2], " ", $l[3], " ",$l[4], " ", $l[5], " ",$l[6])
   End_if
   Print("для продолжения нажмите SHIFT")
   WHILE(ISKEYDOWN(#shift)=0)
      waitms(50)
   END_CYC
     WHILE(ISKEYDOWN(#shift)=1)
      waitms(50)
   END_CYC
    GETSCREEN ($x_b-55,$y_b+15,$x_b+694,$y_b+200)
   colormode(6,$x_b-55,$y_b+15,$x_b+694,$y_b+200)
END_CYC
halt
P.S. dramster, как в голову вообще могло прийти такое решение? Великолепно же! Я два дня рылась в справке, пытаясь понять, что там происходит и почему вообще это может работать  ;D, уже была готова сдаться и просить объяснений)

17
Общие вопросы / Re: Помогите поправить код
« on: November 29, 2018, 10:30:56 PM »
Так-с попробуем с марсианского перевести  8)
 klik >8-32 evro() - это 340 строчка, выполняется при нахождении 5 картинок с проигрышем. После этой проверки мы переходим к следующей картинке. "когда сработает Клик 32 то начинало поиск одной картинки а не пят" хм..., а вот здесь трудности перевода...
1. Если это означает, что надо заново перезапустить цикл проверки с первой картинки из папки "Image\", а не продолжать искать следующие картинки, то надо добавить 341 строчку с "$i=0" (можно бы еще и getscreen, но они вроде в подпрограмме прописаны, так что ладно).
2. Если наоборот, означает, что надо повторить поиск той же картинки, то добавить строчку 341 "$lostmax=1", а выход из цикла (373 строчку) заменить на:

Code: (clickermann) [Select]
If($lostmax=1)
$i=$i-1 //повторный поиск
$lostmax=0 //снятие метки
else
$i=9999 // завершаем цикл
End_if


Но признаться, ваш синтаксис, выбор слов и построение мыслей (как в письменной речи, так и в программе) меня несколько обескураживает. И вероятно вам требуется некий другой инопланетный вариант, так что за правильность понимания (и верность советов) не ручаюсь.

18
Использование / Re: «Pearls before swine»
« on: November 28, 2018, 12:43:51 PM »
Вот занятная интеллектуальная игруха на сайте http://www.transience.com.au/pearl3.html.
Интересно, кто-нибудь пытался с помощью КМ создать достойного противника Хуану? Такого, чтоб сам играл с ним, не проигрывая.
Поиграла немного с правильной стратегией. Невозможно создать достойного противника Хуану, чтобы  всегда выигрывать. Периодически в раунде изначально нам предлагают заведомо проигрышное количество жемчуга: придется взять жемчужину и нажать на New game, записывают как поражение. Иногда и несколько раз подряд нерабочий раунд предлагают. Создать неплохо играющего моба, который выяснит заканчиваются ли у Хуана раунды или генерируются бесконечно - вполне можно, но в целом для игры калькулятора переводящего из двоичной в десятеричную (и наоборот)  вполне хватит.
https://prnt.sc/lnyizj
Code: (clickermann) [Select]
//Перевод числа в двоичную систему
SUB(binar, $par1)
   $num=$par1
   $str=""
   While($num>0)
      $a=  $num-(2*INT($num/2))
      $str= strconcat($a, $str)
      $num= INT($num/2)
   End_cyc
   Print($str)
END_SUB
// to ten
SUB(toten, $par1)
   $num=$par1
   $str=0
   For($a=0,$a<STRLEN($num))
      $str= $str+int(STRCUT($num,(STRLEN($num)-$a),1))*POW(2,$a)
   End_cyc
   Print("=====  ",$str)
END_SUB
binar(4)
binar(6)
binar(8)
binar(10)
Print("                                 "," * ")
Print("                                 "," * ")
toten(1100)
halt

19
Использование / Re: «Pearls before swine»
« on: November 28, 2018, 12:29:34 AM »
 

 :o  :o  :o  :(  :-[

Я сейчас тоже гдето пол часа как прочел твой пост и глянул что там за игруля.

Я с трудом смог пройти второй уровень, ито с помощью твоих подсказок.  >:( Мозг вспух, щяс не смогу уснуть...   :'(

Понимаю и сочувствую) Почему-то тоже не смогла уснуть сразу после ответа, думала-гадала, ну и  решила, что раз математика, кто-то стратегию наверняка уже выложил. В общем, оказалось  ларчик открывается просто и со вкусом.
1. Прежде, чем дойти до позиций 1-2-3, 1-1-1, 2-2, надо считать жемчужины в двоичной системе счисления, написав числа друг под другом.
Как-то так: 
ч.1. https://youtu.be/Ajku3V0s6pU
ч.2. https://youtu.be/LcSZLtcUiE4

Теперь можно спать спокойно  ;D)

P.S. Ну может больше, чем полчаса. И зависала периодически на раундах, даже ранее пройденных. Просто сразу приняла за данность, что бота не переиграть, но он знает, что делать. Потому делала случайный ход, а после проигрыша, пыталась "съобезъянничать" его ходы (вернее подставить перед ним его же комбинацию), не считая особо ничего. С 5-10 раза обычно раунд поддавался. Сразу решила, что понимать там бессмысленно - для анализа попросту нет базы, а подсказать, в правильном ли направлении мыслю некому.  А так получился "китайский метод определения пола цыплят" или что-то в этом духе (пока не дошли до больших цифр, где он уже не сработал).

20
Использование / Re: «Pearls before swine»
« on: November 27, 2018, 11:31:05 PM »
Задачка, конечно, оригинальная и занятная. Но только одна проблема - перед тем, как писать код, надо четко понимать логику игры. По большому счету, реально написать может лишь тот, кто превосходно в эту игру играет вживую (ну если речь не про сбор информации, проведение сотен неудачных игр со случайным результатом, и записывании под каждый уровень нескольких  -в зависимости от поведения противника- сработавших алгоритмов).
Первый вариант не смогу, хоть игра и математическая (т.е. один неверный ход  - и ты проиграл), но ближе чем за 3 хода до конца не могу предугадать, кто кого.  Стратегий увидела несколько - если 2 строки - то оставлять противнику поровну в строчках (доведение до ситуации 2-2). При трех строчках - если в 1 строке 1 шарик, то делать так, чтобы сумма его и второй строки была равна третьей. И перевод ситуации в 1-2-3, или 2-2, или 1-1-1. Ещё кучу правил понять не удалось - хотя и полчаса там провисела, дошла лишь до 7.
Второй вариант - поиск экспериментальным путем правильных решений  и их запись для каждого уровня. Если честно, немного лениво это делать... Но если хотите, начинайте, ошибки подправить поможем. А как соберете мозайку насчет выигрышной стратегии игры, расскажите нам  - глядишь и поймем, как выигрывать незнакомые раунды и сделать бот по первому варианту)

21
Можно ли сделать снимок участка экрана и записать его в массив, чтоб потом этот массив сравнивать с другими участками?
Сохранять кусочек скриншота на диск - не вариант. Именно нужно сделанный снимок запихивать в переменную/массив.

Реально ли вообще такое и как осуществить?
Заранее благодарен за ответ.

Ну как вариант, можно записать в массив хешсумму и сравнивать ее с хешсуммами других участков экрана (но тут должны быть точные координаты). А что именно делать планируете?

22
Общие вопросы / Re: Кликать 20 минут
« on: November 16, 2018, 11:20:04 PM »
подскажите как написать такое: поиск картинки кликнуть по ней не более 30 раз, но пока она не сменит цвет, как только изменила цвет, перейти в другому действию., найти текст на картинке "провод" и кликать ниже на 50 пикселей 15 раз.
......................................................
IF_PICTURE_IN (561,563, 707,620, "file.bmp", -1, 100, 1581771)


Пожалуйста, не издевайтесь над синтаксисом. В кликермане есть шаблоны и справка, вполне способные помочь: достаточно немного подумать и правильно сформулировать задачу. А если не пытаться самому почитать и разобраться, то так никогда и не получится научиться. Пока что попробуйте так.

Code: (clickermann) [Select]
GETSCREEN (561,563, 707,620)
IF_PICTURE_IN (561,563, 707,620, "file.bmp", -1, 100) // место где появится картинка
   WHILE(PXL(631,581)=1581771)   // пока цвет =1581771
      LCLICK(631,581)  // 1581771 место клика
      WAITMS(100)
      INC($_CL)               //здесь считаем, сколько накликали
      GETSCREEN(561,563, 707,620)
      IF($_CL>29)
         PXLREPLACE(631,581, 631,581, -1, 0)
         Print("30")
      END_IF
   END_CYC
   Print("color ",PXL(631,581),", clicks= ",$_CL ) //отчет о проделанной работе: если картинка была найдена, то напишет сколько раз кликнул и новый цвет в районе клика. Если 30 кликов, то цвет =0
   $_CL=0 //обнуляем переменную
END_IF

//переходим к другому действию
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)//картинка со текстом "провод".
   FOR($a=0,$a<15) //повторить 15 раз
      LCLICK($_return1+10, $_return2+50)  //кликнуть на 50 пикселей ниже найденного текста. А также на 10 пикселей правее, потому что найден левый верхний угол, а кликать хочу ближе к центру      WAITMS(100)
   END_CYC
   print("15 кликов")
END_IF

halt

23
Общие вопросы / Re: Кликать 20 минут
« on: November 14, 2018, 06:27:11 PM »
я все читаю и смотрю, при самом переносе и чтоб не было квадратных скобок написал 2 раза одинаковое действия. кликерман открыт, скрипт выбран, но его не хочет запускать.
Code: (clickermann) [Select]
IF(($_time_h = 20)&($_time_m = 9)&($_time_s = 4))
   // действия в 20:09:04
   LCLICK(580,780)
   WAIT(1)
   LCLICK(530,105)
   WAIT(1)
   LCLICK(840,290)
   WAIT(1)
   LCLICK(830,680)
   WAIT(1)
   LCLICK(640,210)
   WAIT(1)
 
   LCLICK(525,780)
   WAIT(1)
   LCLICK(530,105)
   WAIT(1)
   LCLICK(840,290)
   WAIT(1)
   LCLICK(830,680)
   WAIT(1)
   LCLICK(640,210)
   WAIT(1)
 
   LCLICK(470,780)
   WAIT(1)
   LCLICK(530,105)
   WAIT(1)
   LCLICK(840,290)
   WAIT(1)
   LCLICK(830,680)
   WAIT(1)
   LCLICK(640,210)
   WAIT(45)
 
   $time = $_time_t + 1200 // таймер на 20 минут
   WHILE($time > $_time_t)
      LCLICK(585,340) // 1203471
      WAITMS(100)
      LCLICK(585,370) // 1203471
      WAITMS(90)
      LCLICK(585,400) // 1203471
      WAITMS(100)
      LCLICK(585,430) // 15921906
      WAITMS(100)
      LCLICK(585,460) // 14013909
      WAITMS(90)
      LCLICK(585,490) // 15000804
      WAITMS(100)
      LCLICK(585,520) // 15000804
      WAITMS(90)
      LCLICK(585,550) // 9540755
      WAITMS(90)
      LCLICK(585,580) // 10197915
      WAITMS(100)
      LCLICK(585,610) // 5670044
      WAITMS(100)
   END_CYC
WAIT(1)
LCLICK(640,210)
WAIT(30)
HALT
else
//print("not now")
wait(1)
END_IF

Вы запускаете скрипт не ровно в назначенное время, а чуть раньше. Так что завершать его работу после первого же прохода (и не сработавшего условия) не надо, завершать надо лишь после того, как 20 минут кликало (полагаю последний LCLICK(640,210) должен быть перед закрытием). Перемещаем клик и halt в конец скрипта, добавляем Else и время ожидания, если время не дошло. Вот так должно бы  работать правильно.

24
Если навскидку, то вероятно что-то не так с координатами, выбранными для анализа (вариант - добавить в конце подпрограммы перед "END_SUB" строчку "SCREENSHOTEX($x1,$y1, $x2,$y2, "Image_", 0)". Увидите, полностью ли в область анализа попало число (иначе, почему пропадает последняя цифра?), а также не попало ли что-то лишнее.

Судя по коду скрипта, букве взяться неоткуда, кроме как из образца "Letters\d.bmp" . Возможно, полное имя файла другое, но начинается определенно на "D". Если важны для анализа только цифры, то можете просто убрать это файл оттуда (первопричиной, вероятно, служит то, что 7 узкая, и анализируется также следующий знак, вместе с ней образующий эту картинку - например "7." читается как "7 Двоеточие").
Вообще, если формат строки известен заранее (где точки, где двоеточия в числе/дате предугадать не  сложно) - можно оставить только 10 образцов (цифры 0-9), а двоеточия и точки расставлять вместо пробелов программно. Такой вариант позволит справляться с изменяющимся фоном (заменяем "-1" в "recognize(147,783, 219,809, -1, 100)" на цвет фона у картинок-образцов).

25
Проще всего воспользоваться встроенными шаблонами СМ. Удобно, просто, быстро, минимальный риск накосячить.
Вам подойдут Шаблоны>Графика>Ожидание картинки/Ожидание картинки с таймером

Для создания картинок для поиска можно там же выбрать режим или скриншот лупы использовать (alt+G).


P.S.: уже не актуально, но если обсуждается не конкретная игра (с выкладыванем не до конца работающего кода), то тему лучше создавать в Общих вопросах.

26
А что это вообще за координаты? IF_pixel_in(228,1337 ,322,666,1234567) 
Ведь схема IF_PIXEL_IN(0,0, $_xmax,$_ymax, 255) - сперва описывается левый верхний угол (х, у), после - правых нижний, но не наоборот.

27
Круто,  использовать запись в .ini , это я бы никогда бы и не подумал бы, главное все просто и без всяких там сложных заморочек  :D. Где-то уже встречал похожее использование записи в ини на этом форуме...
Просто буквально первый скрипт (от тех прекрасных времен, когда и для меня на форуме справку скриншотили  ;D) был викториной, сделанной при помощи ини. На автомате через этот формат и было сделано)
Quote
А мне в голову немного другая идея сразу пришла. Естественно через массив, но, с "подвохом".
Я решил удалять уже подсчитанные пиксели из буфера pxlreplac-ам.
По скорости выполнения вышло почти в два раза быстрее, скорее всего зависит от количества цветов в области. Сравнивал на одинаковых областях 100х100 с 43-мя цветами в ней.
При написании этого варианта, сразу вспомнилась тема-предложение по функционалу "IF_NOT_PIXEL_IN" http://crapware.aidf.org/forum/index.php?topic=2390.0 Как-раз то, что  помогло бы в моем примере  ::).
Если цветов много, то почти в 2 раза, а если анализировать, например, редактор кликера: несколько цветов на белом фоне, то получается в 3 раза быстрее (800 против 2400). 
Хмм, надо будет повнимательнее к изменениям графики в буфере отнестись - ведь через массивы вместо изящного решения (даже не подумала, что можно бы упростить всё через pxlreplac), у меня бы банальный поиск по массиву был прикручен (что занимало бы вечность)).

28
А вот такой вопрос - зачем считать пиксели в другой программе, если в самом кликермане теперь есть функция PXLCOUNT?
Вот например, такой вариант (сделано через .ini, хотя можно было и с массивами поработать): относительно быстрый, хотя есть что улучшать - например прикрутить проверку, чтобы сразу завершал работу, если найденный максимум по цвету больше, чем осталось пикселей проверять.
Code: (clickermann) [Select]
$x_0= 700
$y_0= 153
$x_1= 775
$y_1= 226


$time=$_ms
TFCLEAR("out1.ini", 0) // очищение файла с предыдущим результатом
GETSCREEN
FOR($y=$y_0, $y<=$y_1)
   FOR($x=$x_0, $x <= $x_1)
      $str = INIREAD("out1.ini", PXL($x,$y))
      If($str="")
         $num =PXLCOUNT($x_0,$y_0,$x_1,$y_1,PXL($x,$y))
        // Print(PXL($x,$y)," $num ",$num )
         INIWRITE ("out1.ini", PXL($x,$y), $num)
         If($num1<$num)
          $num1=$num
          $col= PXL($x,$y)
         end_if
      End_if
   END_CYC
END_CYC
print($col, " colour= ",$num1) // собственно результат: номер самого распространенного цвета и количество
//SCREENSHOTEX($x_0,$y_0,$x_1,$y_1, "Image_", 0)// сохранить область, где считали пиксели
//Print(($y_1-$y_0)*($x_1-$x_0)  ," all pxls")// сколько всего пикселей в области
//Print(TFCOUNT("out1.ini")-2," colours")// сколько цветов встретилось в области (строк с номерами цветов)
print("time=",$_ms-$time) // затраченное на работу время в мс
print("")
halt

29

писалось не помню в каком но щяс Clickermann v4.13 x64
писалось гдето пол года назад
На щет добавления кода я к сожелению не обладаю такими знаниями но нашол в папке с кликером тест которий запустил и он видал в логе что картинка не била найдена(
Если понадобится еще чтото я зделаю уш больно сильно хочю разобратса с етой проблемой.

На предложенном скрине игры ваших картинок попросту нет. Как вы их делали - не знаю, но видимо не слишком правильно.
В Clickermann v4.13  есть такая великолепная вещь, как скриншот лупы (alt+G). Наводите курсор на место бота (вы ведь его ищите?), жмете  (alt+G) - и в папке рядом со скриптом появляется рисунок (.bmp). Остается его обрезать и переименовать.
По поводу кода - можно и улучшить, но в целом работать должно. Хотя и не надо бы столько GETSCREEN-ов, ну и не вижу смысла прокликивать все 4 картинки да и вообще искать картинки после первой обнаруженной (это через ELSE  и вложенные условия сделать можно бы). Для улучшения поиска есть цветокоррекция и процент совпадения, но возможно и без них всё ок будет.
После создания новых картинок ВСЕГДА проверяете правильность нахождения на простых картинках и в игре без привязки (просто окно поставьте так, чтобы игра попадала в область поиска).

По поводу привязки - если уж захотелось пользоваться и есть реальная необходимость, то старайтесь  хотя бы сначала смотреть, правильно ли привязалось. Самый простой способ - открываете редактор, сверху кликаете на лупу (1), смотрите на картинку (2), наводите курсор на ваше окно, пробуете привязаться, смотрите осталось ли изображение игры под курсором (2) да - хорошо, черный/серый экран - значит проблемы, отвязываемся, привязываемся по новой  (может курсор на "шапку" окна надо наводить), не вышло - возможно в игре теперь защита, так что не судьба. Можно смотреть, как всё выглядит в разных режимах цветокоррекции (3) (ну и сразу в нужном режиме делать заготовки, как выше описывалось).

Пожалуйста, учитывайте всё, что сказал kiril про трудности привязки. Проблемы могут возникать по куче различных причин и в абсолютно разных местах - так что сперва проверяете всё досконально, чтобы работало на скринах и в игре без привязки. И лишь потом, если необходимо, как-то экспериментируйте с ней.

30
Полагаю, рациональнее всего было бы выложить свой код, чтобы метры проверили на ошибки.
Ну и картинку+скрин окна, где искать ее надо. Если привязка к окну, разумеется, скриншот того, как кликер это видит (может банально серый экран вместо игры получился?). Полагаю, назвать версию кликера, в которой писалось, и какую сейчас используете, тоже не помешает.
А вообще, если сами хотите посмотреть, то попробуйте в разных частях кода добавить строчки вывода в лог. Допустим при поиске картинки, если нашел PRINT("картинка №1 найдена"), после else PRINT(" не найдено, картинка №1").

Pages: 1 [2] 3 4 ... 8