Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: Kedrick on January 13, 2016, 11:54:52 AM
-
Набросал робота, который будет играть в сабж.
2 вопроса к сообществу:
1.Можно ли сделать проще?
На поле 6 карт рубашкой вверх, у игрока и НПС свои. Игрок всегда начинает первым.
Партия идет до 5 побед (максимум 9 раундов).
На подпрограммы разбил в попытках разобраться почему не работает.
Код в подпрограмме (gam) взял на этом форуме.
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.
Сейчас попробовал этот скрипт не меняя ничего на рабочем компьютере (винХР) и тут кликерман отрабатыват все отлично.
На домашнем компе куча других скриптов в подобной ситуации работают нормально.
Прошу помощи.
-
в вин хп по умолчанию отключено сглаживание и тема аэро, обычно проблема неработы в разных виндах именно в этом
-
Не вижу никакой связи между сглаживанием картинок и не отработкой условия ELSE
При том, что в другом скрипте подобное условие работает нормально.
-
Что делает условие ($pic > 0) ?
Просто $pic это массив, при простом сравнении сравнивается первый элемент.
После поиска
scanpicture($pic, 433,643, 696,881, "pict.bmp")
в первом элементе одна из координат Y
Может это в данном случае и не влияет если картинка не может быть найдена вверху экрана, но так лучше не привыкать проверять. Проверяй размер массива.
P.S. "не выходит из цикла по условию в 54 строке"... где это?
-
Стек $pic я использовал еще и как флаг, пока он больше нуля, выполняем цикл, если закончилась партия, то по условию в 56 строке флаг обнуляется. Для флага неважно что там в первом элементе, главное он больше нуля (я так посчитал нормальным).
Массив собирается перед началом партии, когда все 6 карт еще не открыты и больше не трогается, обнуляется только после окончания партии.
Этот флагомассив я замутил в одной из последних попыток, до этого там была обычная переменная создаваемая только для этого. Еще раньше я пробовал и по размеру массива проверять. Результат всегда один, ELSE в 55 строке не отрабатывается еще одну итерацию.
PS: я там неверно посчитал, в первом сообщении исправил, теперь верно все, условие ELSE в 55 строке