Author Topic: Примитивный блэк-джек  (Read 3001 times)

0 Members and 1 Guest are viewing this topic.

Kedrick

  • Освоившийся
  • **
  • Posts: 70
    • View Profile
Примитивный блэк-джек
« on: January 13, 2016, 11:54:52 AM »
Набросал робота, который будет играть в сабж.
2 вопроса к сообществу:

1.Можно ли сделать проще?
На поле 6 карт рубашкой вверх, у игрока и НПС свои. Игрок всегда начинает первым.
Партия идет до 5 побед (максимум 9 раундов).
На подпрограммы разбил в попытках разобраться почему не работает.
Код в подпрограмме (gam) взял на этом форуме.
Code: (clickermann) [Select]
SUB(gam) // рандомим цифру 1-6, берем из стека соответствующие координаты и кликаем
   $c = 0
   $m = "123456"
   WHILE($c = 0)
      $f = INT(STRCUT($m, RND(1, STRLEN($m)), 1))
      IF(STRLEN($m) > 1)
         $m = INT(STRFILTER ($m, $f, 0))
      Else
         $c = 1
      END_IF
      $r = ($f * 2 - 1)
      $j = ($r - 1)
      $k = $pic[$j]
      $l = $pic[$r]
      LCLICK($k,$l)
      WAIT(1)
      DBLCLICK(738,793)    // выделяем цифру набраных очков
      WAITMS (50)
      KEYDOWN (#CTRL)  // копируем в буфер
      WAITMS (50)
      KEYDOWN (#C)
      WAITMS (50)
      KEYUP (#C)
      KEYUP (#CTRL)
      $summ = INT(FROMCLIP())
      IF($summ > 14) // если набрано больше 14 выходим из цикла
         $c = 1
      END_IF
      WAITMS(50)
   END_CYC
   WAIT(1)
END_SUB

SUB(igra)
   LCLICK(547,573) // кликаем в поле ставки
   WAITMS(300)
   KEYPRESS(#1) // ставим копейку
   WAITMS(300)
   LCLICK(954,573)  // начинаем игру
   WAIT(3)
   // находим рубашки карт на своей половине поля и заносим их координаты в массив
   GETSCREEN
   scanpicture($pic, 433,643, 696,881, "pict.bmp")
   WHILE($pic > 0)
      gam() //кликаем в любую неоткрытую карту и проверяем сумму
      GETSCREEN // заканчиваем раунд
      IF_PICTURE_IN (900,900, 1040,970, "raund.bmp")
         LCLICK($_return1, $_return2)
         WAIT(3)
      END_IF
         GETSCREEN  // начинаем следующий раунд
         IF_PICTURE_IN (900,900, 1040,970, "next.bmp")
            LCLICK($_return1, $_return2)
            WAIT(3)
         ELSE // если закончилась партия
            UNDEFINE($pic)
            LCLICK(818,989) // начинаем новую партию
            MOVE(10,10)
            WAIT(3)
      END_IF
      WAITMS(50)
   END_CYC
END_SUB

FOR($bp, $bp < 3)  // сколько партий играть
   igra()
END_CYC

HALT

Второй вопрос ломает мне мозг уже несколько дней
На домашнем компьютере (вин7х64) кликерман не выходит из цикла по условию в 55 строке и прогоняет впустую еще один раз подпрограмму gam, после чего продолжает работать нормально. Даже если в 56 строке я прописываю жестко GOTO или HALT - они игнорируются одну итерацию цикла в строке 44.

Сейчас попробовал этот скрипт не меняя ничего на рабочем компьютере (винХР) и тут кликерман отрабатыват все отлично.

На домашнем компе куча других скриптов в подобной ситуации работают нормально.

Прошу помощи.
« Last Edit: January 13, 2016, 05:32:00 PM by Kedrick »

Луций

  • Активный участник
  • ***
  • Posts: 248
  • чат в телеге: https://t.me/klickermannchat
    • View Profile
    • Пишу скрипты на заказ:
Re: Примитивный блэк-джек
« Reply #1 on: January 13, 2016, 12:32:21 PM »
в вин хп по умолчанию отключено сглаживание и тема аэро, обычно проблема неработы в разных виндах именно в этом

Kedrick

  • Освоившийся
  • **
  • Posts: 70
    • View Profile
Re: Примитивный блэк-джек
« Reply #2 on: January 13, 2016, 12:36:58 PM »
Не вижу никакой связи между сглаживанием картинок и не отработкой условия ELSE
При том, что в другом скрипте подобное условие работает нормально.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Примитивный блэк-джек
« Reply #3 on: January 13, 2016, 12:54:25 PM »
Что делает условие ($pic > 0) ?
Просто $pic это массив, при простом сравнении сравнивается первый элемент.
После поиска
scanpicture($pic, 433,643, 696,881, "pict.bmp")
в первом элементе одна из координат Y

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

P.S. "не выходит из цикла по условию в 54 строке"... где это?


Kedrick

  • Освоившийся
  • **
  • Posts: 70
    • View Profile
Re: Примитивный блэк-джек
« Reply #4 on: January 13, 2016, 06:01:12 PM »
Стек $pic я использовал еще и как флаг, пока он больше нуля, выполняем цикл, если закончилась партия, то по условию в 56 строке флаг обнуляется. Для флага неважно что там в первом элементе, главное он больше нуля (я так посчитал нормальным).
Массив собирается перед началом партии, когда все 6 карт еще не открыты и больше не трогается, обнуляется только после окончания партии.
Этот флагомассив я замутил в одной из последних попыток, до этого там была обычная переменная создаваемая только для этого. Еще раньше я пробовал и по размеру массива проверять. Результат всегда один, ELSE в 55 строке не отрабатывается еще одну итерацию.

PS: я там неверно посчитал, в первом сообщении исправил, теперь верно все, условие ELSE в 55 строке