Poll

Считаете ли Вы, что игра «Pearls before swine» являтся игрой для интеллектуалов?

Да, эта игра требует определенного интеллектуального развития
1 (33.3%)
Да, но здесь играет свою роль не интеллект, а математические способности и память
0 (0%)
Не знаю, пробовал играть самостоятельно, но без подсказки быстро проигрываю
0 (0%)
Пробовал играть самостоятельно, но интересней смотреть как играет бот
1 (33.3%)
Нет, это совсем не игра, по сравнению со стрелялками это совершенно скучно
1 (33.3%)

Total Members Voted: 3

Author Topic: «Pearls before swine»  (Read 15315 times)

0 Members and 2 Guests are viewing this topic.

Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: «Pearls before swine»
« Reply #15 on: November 29, 2018, 05:36:05 PM »
Ключевое слово здесь "ждите"  :) :D

Почти по Библии: ;)
"Ждите, и обрящете"
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: «Pearls before swine»
« Reply #16 on: November 29, 2018, 06:23:12 PM »
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: «Pearls before swine»
« Reply #17 on: November 29, 2018, 11:39:52 PM »
Вы подеритесь еще  ;D . Нашли место... Тут глобальные вопросы решаются, а вы...



По теме:
Не, не катит через ксор, 3 ряда еще рулит, а дальше пургу гонит.
Вообщето катит, мой код верный  >:( . Просто кликерман считает както не правильно  :-\

Оказывается, если писать оператор словом "xor", то при выполнении он считает чертичто. Если заменить на символ "^", то глюки исчезают  :-\ . Придется учитывать в будущем.
Code: (clickermann) [Select]
$l[0] = 3     //вводим данные по рядам
$l[1] = 4
$l[2] = 5
$l[3] = 6
$l[4] = 0
$l[5] = 0
$l[6] = 0

print($l[0] ^ $l[1] ^ $l[2] ^ $l[3] ^ $l[4] ^ $l[5] ^ $l[6]) //результат = 4
print(((($l[0] xor $l[1] xor $l[2]) xor $l[3] xor $l[4]) xor $l[5]) xor $l[6]) //результат = 2

Короче, вот рабочий вариант. Тоже самое что и было, только написано иначе  :D
Code: (clickermann) [Select]
$l[0] = 3     //вводим данные по рядам
$l[1] = 4
$l[2] = 5
$l[3] = 6
$l[4] = 0
$l[5] = 0
$l[6] = 0

$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


print($l[0] , " ", $l[1], " ",$l[2], " ", $l[3], " ",$l[4], " ", $l[5], " ",$l[6])
halt

Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: «Pearls before swine»
« Reply #18 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, уже была готова сдаться и просить объяснений)
« Last Edit: November 30, 2018, 09:17:15 PM by Qwerry »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: «Pearls before swine»
« Reply #19 on: November 30, 2018, 10:02:30 PM »
Если кто предложит вариант попроще - можно попробовать.
При 6 колормоде сканпикчер довольно хорошо находит. Правда, если рядов шесть, то в последнем графика чуть меняется (пришлось сделать два шаблона жемчужин). В целом, ручной режим с подсказками готов.

Да я тогда в первую очередь и попробовал сканпикчер. Но чето не находило... находило не то что нужно... да я в принципе сильно и не старался, забил :D .
Но, насчет универсальности я был прав  :( . У меня графику отрисовывает совсем по другому, незнаю почему так  :-\. Картинка шаров совсем не такая, переделал.  base.bmp находит в другом месте, увеличил процент до 94 - стала на место.
В итоге все заработало  :D.
Здорово. Осталось дописать клики по шарам.


P.S. dramster, как в голову вообще могло прийти такое решение? Великолепно же! Я два дня рылась в справке, пытаясь понять, что там происходит и почему вообще это может работать  , уже была готова сдаться и просить объяснений)

  :-\ так я же ничего и не придумал  ;D . Глянув мельком найденное тобой видео я мало что понял, в англ слабоват  :( . Но уже тогда глядя в таблицу в видео понял, что это оператор xor. А далее Graubart более понятно показал на одном примере с пояснениями. Так тут и сразу видно ( пример 5 6 9):

0101   5
xor
0110   6
=
0011   не важно какое число

0011   это получившееся число
xor
1001   9
=
1010   -  хз какое число, но это наша ним сумма как в примере Graubart

Ну и уменьшаем каждое число по порядку, пока ним сумма не станет нулем. Проще некуда  :).
« Last Edit: November 30, 2018, 10:04:25 PM by dramster »

Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: «Pearls before swine»
« Reply #20 on: December 01, 2018, 05:21:47 PM »
Вообщето катит, мой код верный  >:( . Просто кликерман считает както не правильно  :-\
Оказывается, если писать оператор словом "xor", то при выполнении он считает чертичто. Если заменить на символ "^", то глюки исчезают  :-\ . Придется учитывать в будущем.
Супер! А я как зациклился когда-то на вычислении ним-суммы через бинар, так даже и не думал о другом варианте. Класс! Код получился легче и красивее. А то раньше мне надо было сначала заполнить массив бинар:
Code: (clickermann) [Select]
FOR($n=0,$n<31)
 $c=0
 $q=0
 $d=$n
   WHILE($d!0)
 $o=$d-2*INT($d/2)
 $c=$c+$o*POW(10,$q)
 $q=$q+1
 $d=INT($d/2)
   END_CYC
 $bin[$n]=$c
    END_CYC
А потом код вычислял ним-сумму сначала для определения хода:
Code: (clickermann) [Select]
$nim=0
   FOR($n=1,$n<(STRLEN($nin)+1))
 $ni=STRCUT($nin,$n,1)
 $ni=$ni-2*INT($ni/2)
 $nim=$nim+$ni*POW(10,(STRLEN($nin)-$n))
   END_CYC
 $lin=0
 $lin1=0
  FOR($n=1,$n<8)
   IF($ball[$n]!0)
 $lin=$lin+1
   END_IF
   IF($ball[$n]=1)
 $lin1=$lin1+1
 $liv=$n
   END_IF
  END_CYC
Потом, если ход мой, прога вычисляет где и сколько снимать:
Code: (clickermann) [Select]
  FOR($li=1,$li<8)
   FOR($bl=0,$bl<($ball[$li]+1))
 $nim=0
 $nin=0
    FOR($pr=1,$pr<(8))
     IF($pr!$li)
 $m=$ball[$pr]
 $nin=$nin+$bin[$m]
     END_IF
    END_CYC
 $nin=$nin+$bin[$bl]
    FOR($n=1,$n<(STRLEN($nin)+1))
 $ni=STRCUT($nin,$n,1)
 $ni=$ni-2*int($ni/2)
 $nim=$nim+$ni*POW(10,(STRLEN($nin)-$n))
    END_CYC
   END_CYC
  END_CYC
А сейчас проще намного. Вот последний полностью оформленный под #autorun вариант:
Code: (clickermann) [Select]
#autorun

 $mes0=STRCONCAT("Помощник для игры «Pearl before swine»")
 $mes0=STRCONCAT($mes0,char(13),char(10))
 $mes0=STRCONCAT($mes0,"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")

begin:
  FOR($n=1,$n<8) // Обнуляем массив
 $ball[$n]=0
  END_CYC

 $mes=STRCONCAT($mes0,char(13),char(10))
 $mes=STRCONCAT($mes,"        ВВОД КОЛИЧЕСТВА ШАРОВ",char(13),char(10),char(13),char(10))
 $mes=STRCONCAT($mes,"           Не более 7 рядов!")
 $inp=INPUTBOX($mes,"Вводи числа, разделяя пробелом",1000000)
  IF($inp="")
 HALT(1)
  END_IF
 $strlen=STRLEN($inp)

// Избавляемся от случайных ошибок ввода
  FOR($n=1,$n<$strlen+1)
   IF((STRCUT($inp,$n,1)<"0") OR (STRCUT($inp,$n,1)>"9"))
 $inp=STRCONCAT(STRCUT2($inp,1,$n-1)," ",STRCUT2($inp,$n+1,$strlen))
   END_IF
  END_CYC
 $strlen=STRLEN($inp)
  FOR($n=1,$n<$strlen+1)
   IF(STRCUT($inp,$n,2)="  ")
    WHILE(STRCUT($inp,$n,2)="  ")
 $inp=STRCONCAT(STRCUT2($inp,1,$n-1),STRCUT2($inp,$n+1,$strlen))
 $strlen=STRLEN($inp)
    END_CYC
   END_IF
  END_CYC
  WHILE(STRCUT($inp,1,1)=" ")
 $inp=STRCUT2($inp,2,$strlen)
 $strlen=STRLEN($inp)
  END_CYC
   WHILE(STRCUT($inp,$strlen,1)=" ")
 $inp=STRCUT2($inp,1,$strlen-1)
 $strlen=STRLEN($inp)
   END_CYC
 $inp=STRCONCAT($inp," ")
 $strlen=STRLEN($inp)

 $lin=0
 $beg=1
  FOR($n=1,$n<$strlen+1)
   IF(STRCUT($inp,$n,1)=" ")
  INC($lin)
 $ball[$lin]=STRCUT2($inp,$beg,$n-1) // Загружаем массив
 $beg=$n+1
   END_IF
  END_CYC
 $linTotal=$lin

   IF($linTotal>7)
 $linTotal=7
   END_IF

 $lin1=0
  FOR($n=1,$n<$linTotal+1)
   IF($ball[$n]=1)
  INC($lin1)
   END_IF
  END_CYC

 $lin=1
 $ball_mem=$ball[$lin]
   WHILE($ball[1]^$ball[2]^$ball[3]^$ball[4]^$ball[5]^$ball[6]^$ball[7])
 $ball[$lin]=$ball[$lin]-1
    IF($ball[$lin]<0)
 $ball[$lin]=$ball_mem
  INC($lin)
 $ball_mem=$ball[$lin]
    END_IF
   END_CYC

  IF($linTotal=1)
 $ball[$lin]=1
  END_IF
   IF(($linTotal-2*(INT($linTotal/2))=0) AND ($lin1>$linTotal-2))
 $ball[$lin]=0
   END_IF
   IF(($linTotal-2*(INT($linTotal/2))>0) AND ($lin1=$linTotal-1))
 $ball[$lin]=1
   END_IF

   IF ($ball_mem=$ball[$lin])
 $mes=STRCONCAT($mes0,char(13),char(10),"                 Передай ход Хуану!")
 $mr=DIALOGBOX($mes,1)
  IF ($mr=2)
 HALT(1)
  END_IF
 GOTO(begin) 
   END_IF

 $mes=$mes0
  FOR($n=1,$n<$linTotal+1)
 $mes=STRCONCAT($mes,char(13),char(10),"    ",$n," ряд  -  ")
   IF($n=$lin)
 $mes=STRCONCAT($mes,$ball_mem,"      <<==  сними ",$ball_mem-$ball[$lin],", оставь ",$ball[$lin])
   ELSE
 $mes=STRCONCAT($mes,$ball[$n])
   END_IF
  END_CYC
 $mr=DIALOGBOX($mes,1)
  IF ($mr=2)
 HALT(1)
  END_IF
 GOTO(begin)
« Last Edit: December 01, 2018, 05:48:52 PM by Graubart »
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: «Pearls before swine»
« Reply #21 on: December 01, 2018, 05:40:51 PM »
Теперь буду бот переделывать под твой алгоритм.  :'(
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: «Pearls before swine»
« Reply #22 on: December 04, 2018, 05:46:52 PM »
При 6 колормоде сканпикчер довольно хорошо находит.
Со сканпикчера я начинал. Это не универсальное решение. В разных браузерах бывают сбои. Я пошел другим путем. Приспособил стабильный плеер в отдельном окне. Обошелся PXLCOUNT(10х10 пкс). Рядом прилепил Лог. Слелал озвучку ходов в ответ на реплики Хуана. Скрин внизу.
Что никак не получается, то это освободить мышку, задействовав SENDMESSAGE/POSTMESSAGE/GETMESSAGE. Не могу найти все константы "WM_", да и не занимался этим. Может подсобите или dramster. Но мне кажется вы уже утратили интерес к этой игре.

Quote
Правда, если рядов шесть, то в последнем графика чуть меняется (пришлось сделать два шаблона жемчужин).
Рядов максимум 7 после 23 уровня. Да, графика меняется и меняется размер жемчужин с увеличением рядов. Еще один аргумент в пользу плеера.

Quote
P.S. dramster, как в голову вообще могло прийти такое решение? Великолепно же!
Это великолепно, это супер! Настолько новый взгляд, что я уже переделал все свои проекты под новый алгоритм, хотя и старый работал устойчиво. Просто меня порадовала простота кода в нем.
Кстати, я не стал ждать компилятора от Джонни, а сделал эксешку, вполне нормально рабочую. Зипованная около 6 мег. Могу всем желающим скинуть на мыло в личку, здесь размер файла не позволяет.
« Last Edit: December 04, 2018, 05:48:35 PM by Graubart »
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: «Pearls before swine»
« Reply #23 on: December 04, 2018, 10:10:20 PM »
Что никак не получается, то это освободить мышку, задействовав SENDMESSAGE/POSTMESSAGE/GETMESSAGE. Не могу найти все константы "WM_", да и не занимался этим.
Вот все константы для мышки - https://docs.microsoft.com/ru-ru/windows/desktop/inputdev/mouse-input-notifications
Для клавы - https://docs.microsoft.com/ru-ru/windows/desktop/inputdev/keyboard-input-notifications
Пример по использованию - http://crapware.aidf.org/forum/index.php?topic=33.msg562#msg562
Готовые к применению подпрограммы  - http://crapware.aidf.org/forum/index.php?topic=2111.0

Работоспособность зависит от твоего плеера. Может достаточно просто привязаться и все заработает без  всяких постмесаджей?

Кстати, а что за плеер такой? И как он работает?


Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: «Pearls before swine»
« Reply #24 on: December 05, 2018, 12:00:40 AM »
Вот все константы для мышки...
Вот спасибо за это. Искать некогда, да и идея недавно возникла.

Quote
Может достаточно просто привязаться и все заработает без  всяких постмесаджей?
Да вроде привязался, может не так как надо  :) Но фокусировку бот всё равно похищает при своём ходе. А главное, сбои происходят при перекрытии окна плеера всплывающими окнами.

Quote
Кстати, а что за плеер такой? И как он работает?
Обыкновенный стандартный плеер, немного под себя подфигачил.
Могу ексешку прислать на мыло, если не против, заценишь всё  ;D
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: «Pearls before swine»
« Reply #25 on: December 05, 2018, 12:39:02 AM »
Обыкновенный стандартный плеер, немного под себя подфигачил.

 :-\ Не думал, что такие еще существуют. Не пользовался со времен оффлайнового просмотра swf типа масяни и прочего  :D

Скачал макромедиа флеш плеер. Запустил игру. Первое что испытал, это обычная привязка к окну.  :D И, как оказалось, привязка работает без нареканий. И картинку видит, и кликает, и все это в неактивном окне.
Так что ничего не нужно придумывать, просто привязаться к плееру, переписать нужные координаты под режим привязки, и будет он работать не мешая основной работе на пк.


Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: «Pearls before swine»
« Reply #26 on: December 05, 2018, 03:43:04 PM »
И картинку видит, и кликает, и все это в неактивном окне.

Да, но когда кликает, окно становится активным. И если в это время другое окно перекроет или мышку дернуть, один клик может быть пропущен - проигрыш. Хуан ошибок не прощает! >:(
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: «Pearls before swine»
« Reply #27 on: December 06, 2018, 11:10:12 PM »
Предлагаю всем желающим протестировать последнюю версию
https://fex.net/get/470614221998/1016552491
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: «Pearls before swine»
« Reply #28 on: December 06, 2018, 11:38:11 PM »
 :o Шикарно.

 Работу скрипта даже не проверял  ;D, верю, работает. А шикарно то другое... КАК ты так сламал кликерман, что он невидим, ни окна, ни редактора, и никак не открыть его  :o ? ПРИЗНАВАЙСЯ!!!
 Еще бы файл скрипта както закодировать (дастал его за минуту  ;D)... Как вариант, можно както его заархивировать, и при запуске разархивировать куда-нибудь подальше от глаз пользоватиля, а далее уже запускать разархивированный скрипт. 


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: «Pearls before swine»
« Reply #29 on: December 07, 2018, 10:31:07 AM »
Одну партию помогло и захватило мышь в центр кнопки GO.
Пока не прибил, не отпускало.