Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ UO Pilot _ Научить пилот логике в игре Небеса

Автор: veiron 2.1.2013, 10:47

Подскажите(скрипт за меня писать не прошу, сам буду пробовать сделать), можно как то заставить пилот соображать, что и как передвинуть и какие действия ему надо задать.
Изображение
Как его научить, что бы он если видит 2 желтых, а рядом еще 1, то он бы взял и подвинул 1 желтый к двум. или два зеленых и 1 есть рядом, он бы подвинул его. Координаты не задашь, они постоянно в разных местах, все варианты тоже прощитать не возможно.

Автор: DarkMaster 2.1.2013, 21:21

Видимо переезжаем сюда.
Основных варианта вижу два.
Первый:
1) Находим изображение элемента.
2) Относительно найденного изображения задаем координаты второму финдимиджу. В полезных советах есть пример клика со смезением - смысл тот же самый.
3) Если нашли, то ищем третий элемент со смещением относительно второго(тут необходимо будет сделать исключение на самый первый элемент.
Второй:
1) Находим все картинки, получаем поноценный массив из типов изображений.
2) В найденном массиве сличаем элементы.

Второй вариант будет тормознутый на первом этапе поиска, однако затем он покажет намного превосходящую производительность.

Автор: veiron 2.1.2013, 21:47

Цитата(DarkMaster @ 2.1.2013, 22:21) *

Видимо переезжаем сюда.
Основных варианта вижу два.
Первый:
1) Находим изображение элемента.
2) Относительно найденного изображения задаем координаты второму финдимиджу. В полезных советах есть пример клика со смезением - смысл тот же самый.
3) Если нашли, то ищем третий элемент со смещением относительно второго(тут необходимо будет сделать исключение на самый первый элемент.
Второй:
1) Находим все картинки, получаем поноценный массив из типов изображений.
2) В найденном массиве сличаем элементы.

Второй вариант будет тормознутый на первом этапе поиска, однако затем он покажет намного превосходящую производительность.


Спасибо за ответ. В полезных советах есть только Findcolor, там нашел смещение, правда оно с заданными параметрами, на сколько задашь, на столько и сместится. На вики посмотрел, то есть для нескольки картинок в одном Findimage массив,такой должен получится.

set $а Findimage ($kartinka_x $kartinka_y ( $kartinka_RED ) %crds 2 90 1 2 )
%crds[1 1] + #deltaX // x первой картинки
%crds[2 2] + #deltaY // y первой картинки
%crds[3 3]+ #deltaX // x второй картинки
%crds[4 4] + #deltaY // y второй картинки

Автор: DarkMaster 2.1.2013, 23:30

Цитата
x второй картинки %crds[3 3]

цифирки массива не понимаете зачем нужны smile.gif
Это координаты переменной в массиве. Вы двигаетесь по диагонали.
А смещение всегда и будет фиксированное. Зачем оно нужно динамическое в данном случае?

Автор: veiron 2.1.2013, 23:38

Цитата(DarkMaster @ 3.1.2013, 0:30) *

цифирки массива не понимаете зачем нужны smile.gif
Это координаты переменной в массиве. Вы двигаетесь по диагонали.
А смещение всегда и будет фиксированное. Зачем оно нужно динамическое в данном случае?


Почему то сразу пишет ошибку символ не распознан:
%crds[2 2] + #deltaY // y первой картинки

Автор: DarkMaster 3.1.2013, 0:19

Цитата

Почему то сразу пишет ошибку символ не распознан:
%crds[2 2] + #deltaY // y первой картинки

А потому что не разобрались что за циферки и движитесь по диагонали.

Автор: veiron 3.1.2013, 0:24

Цитата(DarkMaster @ 3.1.2013, 1:19) *

А потому что не разобрались что за циферки и движитесь по диагонали.


С этим я разобрался. кликнул с одной картинки в 3 разных места. в принципе длинный скрипт если на поле всего одна картинка с 2 шариками вместе находится я уже более мение придумал. а вот если на поле их акажется 2, тогда что пилот в массив запишет, первую найденную или 2 или вообще запутается и выдаст ошибку.

Автор: DarkMaster 3.1.2013, 0:29

а это как раз недавний спор про финдимидж, 1 и -1. Внимательно прочитайте синтаксис - там указывается количество найденных картинок и каким образом они будут расположены в массиве.

Автор: xolost 3.1.2013, 0:35

Цитата(DarkMaster @ 3.1.2013, 1:29) *

а это как раз недавний спор про финдимидж, 1 и -1. Внимательно прочитайте синтаксис - там указывается количество найденных картинок и каким образом они будут расположены в массиве.

tongue.gif

Простите...

Автор: veiron 3.1.2013, 0:38

Цитата(DarkMaster @ 3.1.2013, 1:29) *

а это как раз недавний спор про финдимидж, 1 и -1. Внимательно прочитайте синтаксис - там указывается количество найденных картинок и каким образом они будут расположены в массиве.


Про count в финдимидже прочитал, мне в принципе 2 найденное и не надо, одного хватит. Состряпал не большой скриптик на финдимидже, нашел первым финдимиджем 2 красных шарика вместе, вторым нашел 1 красный и все стопор. 1 незнает где есть еще один, а 2 не знает где ему еще пару найти и так пилот гонял по кругу пока не проиграл)

Цитата(xolost @ 3.1.2013, 1:35) *

tongue.gif

Простите...

Во время зашел))

Автор: xolost 3.1.2013, 0:47

Цитата(veiron @ 3.1.2013, 1:38) *

Во время зашел))

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

Автор: DarkMaster 3.1.2013, 0:48

Цитата
2 найденное и не надо

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

Тренироваться лучше на скриншоте. Имхо проще. Для эмитации разных комбинаций можно закрашивать некоторые элементы.

Цитата
tongue.gif

Простите...

-1 все равно не правильно)

Автор: veiron 3.1.2013, 0:52

Цитата(xolost @ 3.1.2013, 1:47) *

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

Я надеюсь, что Дарк поможет, без него я не осилю. Да и на Ваш скриптик, как напишите, хотелось бы взгянуть smile.gif

Цитата(DarkMaster @ 3.1.2013, 1:48) *

Надо. Потому, что первым может быть изображение найденное предыдущим поиском.

А зачем мне предыдущее, я сделаю, проверил красных нет, пошел к зеленым, и так пока все не посмотрел. Потом стану в вайт пока бой через 30 секунд не обновится и заново начну поиск.

Автор: DarkMaster 3.1.2013, 0:56

Я помогу советом, вариантами алгоритмов, как я их вижу, но писать не буду) У меня своя коза глючная есть, ее надо полировать.

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

Автор: veiron 3.1.2013, 1:04

Цитата(DarkMaster @ 3.1.2013, 1:56) *

Я помогу советом, вариантами алгоритмов, как я их вижу, но писать не буду) У меня своя коза глючная есть, ее надо полировать.

Я и не прошу, за меня сделать, мне самому интересно его сделать, пускай он будет и огромный, мне главное на данный момент освоить как его делать.
Цитата
Кстати я наверно все же делал полноценный массив со всеми изображениями

Такое мне врятли осилить, даже при помощи Ваших советов. Мне чем проще тем лучше.Пока я только понял, что я могу найти изображение из 2 одинаковых шариков, потом обкликать его со всех сторон, потом перешел к другому цвету и так дальше, пока не переберу все цвета. а вот как если не обкликивая, найти вторым финдимиджем и придвинуть его к 2 найденным рание, я так понять и не могу.

Автор: DarkMaster 3.1.2013, 1:36

1) найдите интересующий вас шарик
2) найдите прилежащие шарики, которые находятся в области рядом с найденными первый раз
3) ваш массив попадут новые шарики(если они есть) и уже найденные ранее
4) сравните результаты первого и второго финдимиджа, определите те, которые появились только во втором поиске(новые координаты)

Таким образом у нас будет найдена пара. Затем по тому же самому алгоритму мы сможем найти еще один шарик, который нужно сдвинуть. Хочу обратить внимание, что если шарики будут расположены вот так:
X0X
0X
То придется прорабатывать более слжный алгоритм, что передвинуть центральный шарик.

Автор: veiron 3.1.2013, 1:46

Цитата(DarkMaster @ 3.1.2013, 2:36) *

1) найдите интересующий вас шарик
2) найдите прилежащие шарики, которые находятся в области рядом с найденными первый раз
3) ваш массив попадут новые шарики(если они есть) и уже найденные ранее
4) сравните результаты первого и второго финдимиджа, определите те, которые появились только во втором поиске(новые координаты)
Таким образом у нас будет найдена пара. Затем по тому же самому алгоритму мы сможем найти еще один шарик, который нужно сдвинуть.

Вот я и не могу понять как сравнить результат первого со вторым. К примеру у меня есть массив arr от первого финдимиджа и массив cars от второго финдимиджа, и как их сравнить и еще к тому же заставить идти к друг другу, не представляю пока.
Цитата
Хочу обратить внимание, что если шарики будут расположены вот так:
X0X
0X
То придется прорабатывать более слжный алгоритм, что передвинуть центральный шарик.

Об этом я даже НЕ мечтаю. мне бы собрать те которые рядом стоят)

Автор: DarkMaster 3.1.2013, 1:52

Тут вам пригодится for, size(чтобы задать максимальное значение for), дальше берете элемент из первого массива и сравниваете с каждым элементов второго массива.

Автор: veiron 3.1.2013, 1:59

Цитата(DarkMaster @ 3.1.2013, 2:52) *

Тут вам пригодится for, size(чтобы задать максимальное значение for), дальше берете элемент из первого массива и сравниваете с каждым элементов второго массива.

C for я уже сталкивался, а size мне вот это надо:
Цитата
'set size (%arr <x> <y>)'

Автор: DarkMaster 3.1.2013, 2:12

Отадаленно узнаю знакомые черты)
Тут пропущенна переменная которой присваивается значение. В таком виде будет уничтожен массив, если не ошибаюсь, хотя откуда тогда тут взялись <x><y> не понятно. Вобщем или пропустили или лишнего добавили, в зависимости от того, чего хотели.

Автор: veiron 3.1.2013, 2:27

Цитата(DarkMaster @ 3.1.2013, 3:12) *

Отадаленно узнаю знакомые черты)
Тут пропущенна переменная которой присваивается значение. В таком виде будет уничтожен массив, если не ошибаюсь, хотя откуда тогда тут взялись <x><y> не понятно. Вобщем или пропустили или лишнего добавили, в зависимости от того, чего хотели.


Это я с Вики стащил)) Там еще, что то есть, но я там не понял ни чего, вот и выбрал самое простое)

Автор: DarkMaster 3.1.2013, 2:32

Я оказался почти прав) Убрав <x> <y> будет задан нулевой размер, т.е. массив будет уничтожен.
А вики правду говорит, вам нужно вот это:
set %q [4 3] test string here
set %q [7 5] 0
set $q 123 + 8645
set #q 12
msg size (%q [ 4 3 ] ) // 16 - длина элемента массива
msg size (%q [ 4 ] ) // 5 - вторая размерность массива
msg size (%q ) // 7 - первая размерность массива
msg size ($q) // 10 - длина строки
msg size (#q) // 2 - количество разрядов
msg size ( another test string ) // 19 - длина строки.

msg size (%q) - вот так в вашем случае.

Автор: veiron 3.1.2013, 2:40

Цитата(DarkMaster @ 3.1.2013, 3:32) *

Я оказался почти прав) Убрав <x> <y> будет задан нулевой размер, т.е. массив будет уничтожен.
А вики правду говорит, вам нужно вот это:
set %q [4 3] test string here
set %q [7 5] 0
set $q 123 + 8645
set #q 12
msg size (%q [ 4 3 ] ) // 16 - длина элемента массива
msg size (%q [ 4 ] ) // 5 - вторая размерность массива
msg size (%q ) // 7 - первая размерность массива
msg size ($q) // 10 - длина строки
msg size (#q) // 2 - количество разрядов
msg size ( another test string ) // 19 - длина строки.

msg size (%q) - вот так в вашем случае.


Интересно, как это мне поможет, я тут только понял, что заменяя здесь(set %q [7 5] 0) цифру 7, на любое число к примеру 22, то и результат msg size (%q) тоже будет 22

Автор: DarkMaster 3.1.2013, 2:43

Цитата
set %q [7 5] 0)

А этого вам делать и не надо. С какой целью вы задаете размер массива? Вам его узнать надо, а не задать. Накидайте себе любой тестовый массивчик, посмотрите что возвращается. Пример кстати очень неплохой, показывает все грани, но над ним надо думать.

Автор: veiron 3.1.2013, 9:34

Цитата(DarkMaster @ 3.1.2013, 3:43) *

А этого вам делать и не надо. С какой целью вы задаете размер массива? Вам его узнать надо, а не задать. Накидайте себе любой тестовый массивчик, посмотрите что возвращается. Пример кстати очень неплохой, показывает все грани, но над ним надо думать.

Набросал, первую двойную картинку нашел и выдал мне вот это:
Код
         msg - 0
         msg - 0
         msg - 0
         msg - 2
         msg - 2
         msg - 19

только не могу понять, что мне это дало, координат ведь тут нет. И вот, что интересно, в каком месте картинка не находится, эти цифры не меняются.

Автор: DarkMaster 3.1.2013, 10:36

Цитата
msg size (%q) - вот так в вашем случае

Вас интересует только этот момент. Он вернет количество найденных изображений.

Автор: veiron 3.1.2013, 10:53

Цитата(DarkMaster @ 3.1.2013, 11:36) *

Вас интересует только этот момент. Он вернет количество найденных изображений.

Вот что у меня вышло:
Код

if $a > 1
wait 2s
set %q [4 3] test string here
set %q [7 5] 0  
msg size (%q ) // 7 - первая размерность массива
end_if


только почемутио сколько нету изображений на поле, все равно пишет 7

Автор: DarkMaster 3.1.2013, 11:02

дык потому, что вы ручками задаете элемент массива в 7 строке. Соответсвенно у вас и размер массива 7 показывает.

Автор: veiron 3.1.2013, 11:05

Цитата(DarkMaster @ 3.1.2013, 12:02) *

дык потому, что вы ручками задаете элемент массива в 7 строке.

А я и смотрю, что на какое число я 7 не заменю, такое мне и показывает. Заменил 7 на n, показывает 1,хотя их 3 .Так на вики так написано, вот и я так пишу, я верю тому, что там написано. А про то, как самому не задавать, там нету.

Автор: veiron 3.1.2013, 11:50

попробовал так:

Код
 
set %q [1 8]
msg size (%q ) // найдено изображений

Было 3 и ообразило, что найдено 3. Вроде нашел, то что надо, такое же сделал для 1 шарика, там вообще полный капец, он их много нашел. А как теперь это связать?

Автор: DarkMaster 3.1.2013, 12:30

Цитата
там вообще полный капец, он их много нашел.

Можно как-то более технически обосновано и точно?
Цитата
там вообще полный капец, он их много нашел.

Ну логику я вам уже писал. Фор, сравниваете каждую координату с каждой предыдущего поиска.

Автор: veiron 3.1.2013, 12:38

Цитата(DarkMaster @ 3.1.2013, 13:30) *

Можно как-то более технически обосновано и точно?

Извините.Впредь буду более обоснованным.
Цитата
Ну логику я вам уже писал. Фор, сравниваете каждую координату с каждой предыдущего поиска.

Так у меня же нет координат, у меня есть только количество картинок, найденных на поле?

Автор: DarkMaster 3.1.2013, 12:40

А в массиве финдимиджа что возвращается?

Автор: veiron 3.1.2013, 12:46

Цитата(DarkMaster @ 3.1.2013, 13:40) *

А в массиве финдимиджа что возвращается?

Непонял вопроса? у меня в финдимидже массив %q , указана область поиска координаты всего поля.

Код

set $a
set $a Findimage
while ( $a <= 0 )
set $a Findimage (leftX rightY  ($RED2) %q 2 60 -1 2 )
if $a > 1
wait 2s
set %q [1 7]
msg size (%q ) // найдено картинок c двумя шарами
end_if
end_while
set $b
set $b Findimage
while ( $b <= 0 )
set $b Findimage (leftX rightY  ($RED1) %u 2 60 -1 2 )
if $b > 1
wait 2s
set %u [1 7]
msg size (%u ) // найдено картинок с одним шаром
end_if
end_while

Вот, что у меня вышло, и так 1 для 2 шариков вместе, второе для 1 шарика, и ни какие координаты, вроде ни где не пишутся и не отображаются!

Автор: DarkMaster 3.1.2013, 13:11

Цитата
%q , указана область поиска координаты всего поля.

ничего подобного. там координаты найденных изображений. вы же сами по ним кликали.

Автор: veiron 3.1.2013, 13:18

Цитата(DarkMaster @ 3.1.2013, 14:11) *

ничего подобного. там координаты найденных изображений. вы же сами по ним кликали.


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

Автор: veiron 3.1.2013, 16:38

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

Код
set - (21): Символ не распознан (pos:1)

Автор: veiron 3.1.2013, 17:36

Цитата(veiron @ 3.1.2013, 17:38) *

Код
set - (21): Символ не распознан (pos:1)


С этим тоже разобрался. Но с команде FOR ни как ни выходит. Не могу сообразить и на форуме ни чего не нашел, как к с его помощью к 2 шарам найти и подставить еще 1

Автор: DarkMaster 3.1.2013, 19:18

показывай, что делал с фором.

Автор: veiron 3.1.2013, 20:03

Цитата(DarkMaster @ 3.1.2013, 20:18) *

показывай, что делал с фором.

Вот только это и смог сделать:
Код

For #i #q 5 10 1  
  set #X %q[#i 1]
  set #Y %q[#i 2]
Left #x, #y
end_for

Он все равно не работает, сразу ошибку пилот выдает.
Код

for #i 1 1 1
    for #n 1 1 1
        set %q [ #i #n ]
Left #x, #y
end_for
end_for

Этот пробовал,ошибку не выдает, но и ни чего не делает.

Автор: DarkMaster 3.1.2013, 21:16

Цитата
For #i #q 5 10 1

Цитата
for #i 1 1 1

количество операндов посчитай. Ошибся. Ну а во втором варианте все логично:
выплняем цикл фор прибавляя к переменной #i(стартовое значение 1) единицу, пока переменная #i меньше 1.

ну а смысл уловил верно.

Автор: veiron 3.1.2013, 21:30

Цитата(DarkMaster @ 3.1.2013, 22:16) *

ну а смысл уловил верно.

Код

for #i 1 1 1
    for #n 1 1 1
        set %q [ #i #n ]
Left #x, #y
wait 1s
  Left #x1, #y1
   wait 1s
  Left #x2, #y2
end_for
end_for

Попробовал такой код, он повторяет все те же действия, что и в Findimage, прокликал на каждой найденной картинку и на этом все.

Автор: DarkMaster 4.1.2013, 1:43

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

Автор: xolost 4.1.2013, 5:43

Арррр...
Бросил все свои дела и занялся этой задачкой.
На столько вот она меня заинтриговала.

2 часа бился с тем, что бы собрать в один массив все элементы.
Когда понял почему результат был в корне неверный целый 1 час и 35 минут, чуть не лопнул!

Вероятно из-за конвертации в гиф текущей картинки, все - абсолютно все ячейки очень конкретно отличаются друг от друга! ! !
поэтому пришлось тупо откопипастить все 5 элементов на все 36 ячейки. И всё сразу заработало как надоsmile.gif

Осталось написать алгоритм передвижения ячеек.
Как происходит процесс?
Делаем 1 клик на одну ячейку, затем на соседнюю 1 клик и ячейки меняются местами?


P.S. на скрипт сбора всех элементов в один массив уходит 171 мс (В моем случае). Интересно узнать сколько в ваших случаях получается.

Автор: DarkMaster 4.1.2013, 5:52

Цитата
Вероятно из-за конвертации в гиф текущей картинки, все - абсолютно все ячейки очень конкретно отличаются друг от друга! ! !

Если вам конвертнуть содержимое сайта в транслит на китайский, то у вас проблем не возникнет?) Гиф не поддерживается. Только бмп. Неоффициально было обнаружено, что пнг кушает, но тут без гарантий.
Цитата
на скрипт сбора всех элементов в один массив уходит 171 мс (В моем случае). Интересно узнать сколько в ваших случаях получается.

Тут очень много зависит от размера картинок. При вашем алгоритме полностью оставляется карта всего поля или только определенных шариков?

Автор: xolost 4.1.2013, 5:56

Цитата
Если вам конвертнуть содержимое сайта в транслит на китайский, то у вас проблем не возникнет?) Гиф не поддерживается. Только бмп. Неоффициально было обнаружено, что пнг кушает, но тут без гарантий.

ХАхаха.. не.. тут по другому. Я скачал этот гиф, из него нарезал 5 видов шариков в бмп. Ну и ищу их в этой общей картинке.

Цитата
Тут очень много зависит от размера картинок. При вашем алгоритме полностью оставляется карта всего поля или только определенных шариков?

Если вопрос я понял верно, то, разумеется всё поле. Т.е. получается массив с 36 ячейками как на картинке.
Но что-то мне подсказывает, что неверно я его понял...

Автор: xolost 4.1.2013, 7:37

Цитата(DarkMaster @ 2.1.2013, 22:21) *

2) В найденном массиве сличаем элементы.


Хм... это какая-то функция специальная?

Автор: veiron 4.1.2013, 9:42

Цитата(xolost @ 4.1.2013, 6:43) *

2 часа бился с тем, что бы собрать в один массив все элементы.
Когда понял почему результат был в корне неверный целый 1 час и 35 минут, чуть не лопнул!

Огоооооо, если у Вас на это уходит столько времени, то у меня на это наверно уйдут ГОДЫ.
Цитата
Я скачал этот гиф, из него нарезал 5 видов шариков в бмп. Ну и ищу их в этой общей картинке.

То есть, 2 шарика вместе не надо, надо както пытаться искать по одному?




Цитата(DarkMaster @ 4.1.2013, 2:43) *

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

Если я заменю единицу, то фор будет на одно действие выполнять много раз, а мне надо проверил и перешел дальше. Я попробовал, записать в массив найденных 2 шарика, потом потом одному шарику указал область поиска вокруг найденных двух. Ведь возле двух всего 6 точек нахождения 1 шара, который можно использовать, а потом попытался кликнуть в каждую точку из 6 и подвинуть к найденным 2 шарам. Первый раз вроде сработало, а потом не хочет, вроде есть шары, можно двигать, а он проходит мимо. Да и скрипт если взять все цветы выйдет такой длинный, что 30 секунд отведенных на бой не хватит.

Автор: Zeleax 4.1.2013, 9:52

Пардон за оффтоп: это вы хотите сделать алгоритм автоматической игры для "Небеса"?

Автор: veiron 4.1.2013, 9:53

Цитата(Zeleax @ 4.1.2013, 10:52) *

Пардон за оффтоп: это вы хотите сделать алгоритм автоматической игры для "Небеса"?

Да, автоматическое ведение боя

Автор: Zeleax 4.1.2013, 9:56

ясно...

Автор: veiron 4.1.2013, 10:02

Цитата(Zeleax @ 4.1.2013, 10:56) *

ясно...

Хорошо когда ясно..., а тут один туман)

Автор: veiron 4.1.2013, 10:24

Я вашу программу в этой игре рекламирую, переодически. Уже 4 перса забанили за рекламу.

Автор: xolost 4.1.2013, 10:33

Цитата(veiron @ 4.1.2013, 10:42) *

Огоооооо, если у Вас на это уходит столько времени, то у меня на это наверно уйдут ГОДЫ.

Неет. Я же говорю, на разработку логики и написание ушло 25 минут. А Остальное время - отладка, т.е. выяснение, почему же не работала логика. Оказалось всё просто, дело было не в бабине - дело было в картинке. )) Да и я ещё сам зелен, мне ещё учиться и учиться.

Просто данная задачка для меня новая, ранее в ботах что я писал - не требовалось такой. Вот меня и заинтересовала она. Причем очень)
Цитата

То есть, 2 шарика вместе не надо, надо както пытаться искать по одному?

Ну, если искать только по два шарика, то как найти один, который нам нужно подвинуть к двум другим?

Цитата

Ведь возле двух всего 6 точек нахождения 1 шара, который можно использовать, а потом попытался кликнуть в каждую точку из 6 и подвинуть к найденным 2 шарам.

Стоп! Правильно ли я понял, при каких-то условиях шарики не будут двигаться? Я имею ввиду логику самой игры?
вообще, можете правила чуть описать? что надо делать и что можно делать?

Автор: veiron 4.1.2013, 10:43

Цитата(xolost @ 4.1.2013, 11:33) *


Ну, если искать только по два шарика, то как найти один, который нам нужно подвинуть к двум другим?
Стоп! Правильно ли я понял, при каких-то условиях шарики не будут двигаться? Я имею ввиду логику самой игры?
вообще, можете правила чуть описать? что надо делать и что можно делать?


Принцип боя прост. Собираешь красные, желтые, зеленые и тебе дается манна. Черепа это урон. А кресты это лечилки. Шарики не двигаются только в том случаи, если они немогут составится хотябы в одну тройку шаров, может быть составление от 3 до 6 шаров вместе. Вернее он двигается и сразу возвращается на свое место, если нет совпадения нужного цвета.

ТАм больше чем 6 точек. Но если два шара находятся друг возле друга, то остается только 6 точек откуда можно подвинуть еще шар и тройка будет собрана(пример: имеем 2 шара вертикально,значит к нему можно прдставить только сверху слева и справа и по центру через одну клетку. Снизу точно также. Все остальные точки расположения одиночного шара, будут не срабатываемыми, для составления тройки.

Автор: Zeleax 4.1.2013, 10:52

xolost
вы б зарегились быстрее и глянули, если интересно
Стало бы понятно гораздо быстрее...

Автор: veiron 4.1.2013, 10:52

Еще есть вариант по вертикали, когда 1 шар вверху потом клетка с другим шаром и потом опять нужный, и что бы составить, з шар должен быть или слева или справа по центру. по горизонтали точно также.

Автор: xolost 4.1.2013, 10:58

Всё понятно. Едрёна кочерышка. Я думал задача более сложная(
Теперь она для меня стала скучной)) Но все равно спасибо.
Хотя, плюс я извлек для себя.

Автор: Zeleax 4.1.2013, 11:01

Цитата(xolost @ 4.1.2013, 11:58) *

Всё понятно. Едрёна кочерышка. Я думал задача более сложная(
Теперь она для меня стала скучной)) Но все равно спасибо.
Хотя, плюс я извлек для себя.

Если напишете полноценный выигрышный алгоритм- сниму шляпу и поставлю пиво.

З.Ы.: у меня не получилось ))
Это значит не то, что написать алгоритм невозможно, а то что я отказался это делать за определенную сумму.
Сложность логики достаточно высокая. Для победы её нужно просчитывать на несколько ходов вперед.

Автор: xolost 4.1.2013, 11:02

Цитата(DarkMaster @ 2.1.2013, 22:21) *

2) В найденном массиве сличаем элементы.

Хотя вот про это мне всё ещё хочется сильно узнать.

Представим что задача такая какой я понял её изначально.
Т.е. мы имеем массив как на картинке, только вместо графических элементов - названия картинок.
Как их сличивать?

Цитата

Если напишите полноценный выигрышный алгоритм- сниму шляпу и поставлю пиво.
З.Ы.: у меня не получилось ))

Ого!!! Ради такого стоит зайти туда и завершить дело)))
Ясно дело что вы справитесь, если будет стоящая мотивация))
ВОобщем, попробую, скажу как что.

Автор: veiron 4.1.2013, 11:11

Цитата(xolost @ 4.1.2013, 12:02) *

Ого!!! Ради такого стоит зайти туда и завершить дело)))
Ясно дело что вы справитесь, если будет стоящая мотивация))
ВОобщем, попробую, скажу как что.

Я ради такого благого дела могу дать аакаунт с персом 2 уровня

Автор: Zeleax 4.1.2013, 11:20

Цитата(xolost @ 4.1.2013, 12:02) *

Хотя вот про это мне всё ещё хочется сильно узнать.

Представим что задача такая какой я понял её изначально.
Т.е. мы имеем массив как на картинке, только вместо графических элементов - названия картинок.
Как их сличивать?

Даю подсказку:
- каждую картинку кодируете числом. Одинаковые картинки имеют одинаковое числовое значение
- отличающиеся картинки имеют различный приоритет важности, т.е. одни картинки собирать предпочтительнее, чем другие, чтобы выиграть.
- в итоге получаете матрицу 6x6 типа

1 1 2 3 4 3
1 3 5 7 4 5
...
3 4 5 3 1 2

Осталось малое - написать логику перестановки соседних ячеек для достижения оптимального результата )

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

Автор: veiron 4.1.2013, 11:41

Да еще забыл сказать, в игре очень часто случаются тормоза. То есть,нашел нужный шарик, кликаешь переместить в нужную точку, и ни чего не происходит, так может продолжаться и 5 секунд, потом ход отвиснет и шар переместится.

Автор: xolost 4.1.2013, 15:59

Цитата(Zeleax @ 4.1.2013, 12:20) *

Даю подсказку:
- каждую картинку кодируете числом. Одинаковые картинки имеют одинаковое числовое значение
- отличающиеся картинки имеют различный приоритет важности, т.е. одни картинки собирать предпочтительнее, чем другие, чтобы выиграть.
- в итоге получаете матрицу 6x6 типа

1 1 2 3 4 3
1 3 5 7 4 5
...
3 4 5 3 1 2

Осталось малое - написать логику перестановки соседних ячеек для достижения оптимального результата )

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


1 1 2 3 4 3
1 3 5 7 4 5
...
3 4 5 3 1 2

Именно так у меня и выглядит текущий массив, цифрами.
Т.е. а дальше по прежнему иф на ифе ифом погоняет для этих перестановок?

Цитата
Я ради такого благого дела могу дать аакаунт с персом 2 уровня

не требуется) я уже глянул в кратце, жестковато-то там)

Цитата
Да еще забыл сказать, в игре очень часто случаются тормоза. То есть,нашел нужный шарик, кликаешь переместить в нужную точку, и ни чего не происходит, так может продолжаться и 5 секунд, потом ход отвиснет и шар переместится.

да это ерунда.

Автор: Zeleax 4.1.2013, 16:51

Цитата
Т.е. а дальше по прежнему иф на ифе ифом погоняет для этих перестановок?

for/while ифом погоняет.
Переставлять несложно. Сложно правильно переставлять )
Как и в шахматах

Автор: xolost 4.1.2013, 16:56

Цитата(Zeleax @ 4.1.2013, 17:51) *

for/while ифом погоняет.
Переставлять несложно. Сложно правильно переставлять )
Как и в шахматах

Плин. А говоришь осталось малое ))))
Да это наоборот, самая сложная часть, в таком случае...

Автор: Zeleax 4.1.2013, 17:00

Цитата(xolost @ 4.1.2013, 17:56) *

Плин. А говоришь осталось малое ))))
Да это наоборот, самая сложная часть, в таком случае...

так отож smile.gif

Автор: Санчес 4.1.2013, 18:35

Хм smile.gif оказалось не только я этим занимаюсь..Ну тогда во первых всех с Новым Годом,а во вторых кое что напишу по теме...
Пилот изучаю недавно и некоторые люди тут уже мне помогли советом,я тоже думал как решить "афк режим" для "Небес",уложился в 200 строк,один скрипт работает с учетом приоритетов по цветам(но не колличеству,пока не дописал еще за ненадобностью).Скрипт перебирает камни(не просто тычет беспорядочно как я думал сначала "отделаться",но из за тормозов сети получался бардак на поле),а теперь он тычет только если комбинация есть.Если интересно поделюсь опытом и кое какие нюансы расскажу wink.gif


Цитата(Zeleax @ 4.1.2013, 10:20) *

Даю подсказку:
- каждую картинку кодируете числом. Одинаковые картинки имеют одинаковое числовое значение
- отличающиеся картинки имеют различный приоритет важности, т.е. одни картинки собирать предпочтительнее, чем другие, чтобы выиграть.
- в итоге получаете матрицу 6x6 типа

1 1 2 3 4 3
1 3 5 7 4 5
...
3 4 5 3 1 2

Осталось малое - написать логику перестановки соседних ячеек для достижения оптимального результата )

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


Я разметил для себя это поле по принципу морсокого боя smile.gif от A1 до F6,удобно..

Да..заклинания тоже включены в скрипт(сначала в разных делал) и работаю по приоритету с учетом уровня маны(правда не так точно как хотелось бы из за именяемого ее колличества) и камни перебираются только если заклинания не могут быть выполнены.

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

так как про переменные мне тут доходчиво объяснили и их использование,как я и ожидал,упростили решение,скрипт получился короче чем в ранних его версиях,команды/операторы использовал простые - findcolor,repeat,if....

Автор: Zeleax 4.1.2013, 18:37

А просчет сделали на появление новых комбинаций после сдвига существующих?

Автор: Санчес 4.1.2013, 18:55

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


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

так как на сам ход уходит некоторое время сделал задержку после того как переставил камни,если ход перешел то обычным "гото" скрипт стоит в начале и ждет пока снова ход не перейдет ко мне


в целом добился полного "афк" в бою,ну и небольшие скриптики(отдельные) для других функций(выбор противника,начало боя,завершение,забор или продажа предметов,и снова выбор противника),но это уже другая история smile.gif

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

Автор: Zeleax 4.1.2013, 18:55

Тоже неплохо.
Просчёт "вперед" штука нужная, конечно, но потребует много времени на проверку всемозможных комбинаций.

Автор: Санчес 4.1.2013, 18:56

да,комбинаций много,поэтому над этим сейчас и думаю но уже с помощью файдимидж.Не сразу дошло что с jpg не работает,теперь другие вопросы есть,думаю smile.gif

Автор: veiron 4.1.2013, 19:53

Такой длинный топик получился, и ни одного примера, все одни слова. Только сведующие люди и понимают о чем вы все тут пишите. А простым смертным этих слов и не понять то.

Автор: DarkMaster 4.1.2013, 20:11

Дык пиши, что не понятно. "Вы написали <цитата>, я попробовал сделать, вот мой код: <код>. При работе кода возникают следующие проблем: <список>.

Автор: Санчес 4.1.2013, 20:51

Цитата
Такой длинный топик получился, и ни одного примера, все одни слова. Только сведующие люди и понимают о чем вы все тут пишите. А простым смертным этих слов и не понять то.

Вейрон,я Саша,если че smile.gif давай так,схема действий сначала а ответы потом ок ?


Я написал в самом начале что у меня получилось и спросил кому интересно,ты ничего не написал,я не предлагаю потому как,повторюсь,только начинающий в этом деле,поэтому возможно то что я сделал кому то покажется громоздким например,а может много лишнего и именно поэтому я не выкладываю скрипт а пишу то решение которое я в нем реализовал.Я же прочитал то что было написано на предыдущих страницах,и не все что там написано я понял,поэтому,так как я не DarkMaster и Zeleax и не любой другой знающий чел а такой же,как ты выразился "смертный" то я тебя понимаю и готов помочь тем что знаю,ты главное конкретный вопрос задай,тебе нужно только "вот это" или "это,и это,и потом это".

Автор: veiron 4.1.2013, 20:51

Цитата(Санчес @ 4.1.2013, 21:43) *

Вейрон,я Саша,если че smile.gif давай так,схема действий сначала а ответы потом ок ?

Я Андрей. Давай.
Я нахожу Findimage на поле к примеру 2 красных шара, потом другим Findimage ищу еще один красный, вот я ни как и не могу понять, как 3 шар направить к 2 уже найденным

Автор: Санчес 4.1.2013, 21:06

независимо от вопроса скажу об одном нюансе,так получилось что когда писал этот скрипт то сделал так чтобы файндколор искал камни не на всем поле,а по рядам сверху вниз(хотя на мой взгляд было бы лучше,но у меня не вышло,ошибку написал,видать не предусмотрено или я просто не знаю пока как это сделать),и когда все заработало так как я хотел,я задался вопросом а почему по рядам?Решил подправить так чтобы все таки все поле охватить - не вышло,поэтому пока так и оставил.Все это к тому что если тебя устраивает такая схема - допустим:
поиск цвета в 1ом ряду по горизонтали..
во 2ом...
3
4
5
6...
Если не найдено ни одной комбинации (из трех камней),пять и четыре это дополнительные строки которые я пока не хочу добавлять,о другом думаю,ТО переход на другой цвет и снова сверху вниз по рядам.
Хочешь - поделюсь smile.gif

у нас немного разные схемы,во первых я пользуюсь файндколором.потому как мне кажется это быстрее,и так как достаточно надежно я на нем и остался,во вторых ИФом,смотри....
Ищем цвет в ряду,если нет переходим на следующий ряд(но это else),основное же тело ИФа это проверить есть ли камни рядом для того чтобы сложилась комбинация из трех в ряд(ну или случайно из 4 или 5.

конечно с файндимижджем поиск упрощается,потому как тебе не нужны некоторые параметры которые нужны при юзании файндколора,но так как я только изучаю все ето дело я воспользовался тем что мне подошло на тот момент.

Автор: veiron 4.1.2013, 21:06

Цитата(Санчес @ 4.1.2013, 22:04) *

независимо от вопроса скажу об одном нюансе,так получилось что когда писал этот скрипт то сделал так чтобы файндколор искал камни не на всем поле,а по рядам сверху вниз(хотя на мой взгляд было бы лучше,но у меня не вышло,ошибку написал,видать не предусмотрено или я просто не знаю пока как это сделать),и когда все заработало так как я хотел,я задался вопросом а почему по рядам?Решил подправить так чтобы все таки все поле охватить - не вышло,поэтому пока так и оставил.Все это к тому что если тебя устраивает такая схема - допустим:
поиск цвета в 1ом ряду по горизонтали..
во 2ом...
3
4
5
6...
Если не найдено ни одной комбинации (из трех камней),пять и четыре это дополнительные строки которые я пока не хочу добавлять,о другом думаю,ТО переход на другой цвет и снова сверху вниз по рядам.
Хочешь - поделюсь smile.gif

у нас немного разные схемы,во первых я пользуюсь файндколором.потому как мне кажется это быстрее,и так как достаточно надежно я на нем и остался,во вторых ИФом,смотри....
Ищем цвет в ряду,если нет переходим на следующий ряд(но это else),основное же тело ИФа это проверить есть ли камни рядом для того чтобы сложилась комбинация из трех в ряд(ну или случайно из 4 или 5.


Ты спрашиваешь хочу ли я) Меня устроит любой вариант. Мне вообще то и не нужен полноценный супер логический скрипт для этого боя. Если ты в нее играешь, то знаешь, что 2 пропущенных хода заканчиваются поражением, и если у тебя кончились крест и квадрат ты тоже ждешь 30 секунд. Так вот я хочу сделать скрипт что бы он не пропускал ходы, а складывал шарики и передавал ход. А завалить я его завалю своим дамагом.

Автор: Санчес 4.1.2013, 21:17

Меня волновал тот же вопрос что и тебя в общем,"Как объяснить шарику,именно тому шарику который был найден,а не тем которые рядом с ним,что Если(один из вариантов,всего их у меня получилось 16) через три ячейки от него шарик того же цвета и (and) через 2 ячейки тоже шарик того же цвета,то клик по нему и по соседней ячейке в направлении тех двух.Ща попробую закинуть картинку с шаблоном.

Цитата
знаешь, что 2 пропущенных хода заканчиваются поражением, и если у тебя кончились крест и квадрат ты тоже ждешь 30 секунд. Так вот я хочу сделать скрипт что бы он не пропускал ходы, а складывал шарики и передавал ход.

Знаю и именно поэтому занялся вплотную этим вопросом,хотя сначала просто рандомно "лефтал" по полю со скростью 100мс и ничего хорошего из этого не вышло smile.gif все камни скучковались в одной точке и фиг поймешь что там где,слишком много запросов на сервер видать он и виснет..


Ну а раз устроит то объясню..

меня еще один момент озадачил к этому это "Удачный ход" smile.gif он тоже мешает потому как и крест и квадрат использованы,а у "Девы" нет другого заклинания завершающего ход(а даже если бы и был то не факт что не будет третьего удачного).

Автор: veiron 4.1.2013, 21:18

Цитата(Санчес @ 4.1.2013, 22:15) *

все камни скучковались в одной точке и фиг поймешь что там где,слишком много запросов на сервер видать он и виснет..
Ну а раз устроит то объясню..
меня еще один момент озадачил к этому это "Удачный ход"

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

Я против удачного хода, даже голым выходил на бой, что бы его не ловить, и все равно он выпадает, и 5 камней еще надаедают не меньше. Мне не бой важен, а пройгыш, но что бы быстрый. Мне надо, армии мультов поднять уровни.

Автор: Санчес 4.1.2013, 21:25

тут напрямую картинку нельзя кинуть,только через урл??

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

вот поэтому я тоже решил сделать так чтобы не тыкал в каждый а проверял и только потом,в случае если условие ИФа соблюдено,тыкать.


Вот таким шаблоном я пользовался,для наглядности выложил,чтобы проще было писать


получается так что при одной из 4ех комбинаций,после того как файндколор нашел красный в первом ряду(учтено только три камня в ряд,если еще ставить приоритет на 5,4 а потом только три то добавится еще 12 выриантов)


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: veiron 4.1.2013, 21:27

Цитата(Санчес @ 4.1.2013, 22:25) *

тут напрямую картинку нельзя кинуть,только через урл??
вот поэтому я тоже решил сделать так чтобы не тыкал в каждый а проверял и только потом,в случае если условие ИФа соблюдено,тыкать.
Вот таким шаблоном я пользовался,для наглядности выложил,чтобы проще было писать
получается так что при одной из 4ех комбинаций,после того как файндколор нашел красный в первом ряду(учтено только три камня в ряд,если еще ставить приоритет на 5,4 а потом только три то добавится еще 12 выриантов)


Так это получается 36 точек поиска + ему еще надо проверить каждый раз 7 точек вокруг. Тут наверно 30 секунд боя не хватит.

Автор: Санчес 4.1.2013, 21:39

Изначально не нужно было чтобы камень из С1 сдвинулся на С2 ,НО это нужно сделать только в том случае если есть два камня в д2 и е2,или в а2 и б2,или в с3 и с4..Файндколор обнаружив камень в с1 должен сделать его координаты как бы нулевыми иначе не предусмотреть все варианты,и именно поэтому пришлось задавать ему проверять именно по рядам а не все поле сразу.

Если бы он не успевал я бы не рассказывал об этом,в худшем случае,а это бывает Очень редко,он тратить 20 сек на проверку всех пяти видов фигур,есть еще нюанс это стрелочки которые появляются над фигурами на 20ой секунде,они не всегда позволяют распознать цвет,но это тоже очень редко.

так как проверять приходится по рядам то координаты задал не всего поля а только верхнего ряда,но это в первом файндколоре,есть еще и второй который будет отталкиваться от тех значений которые задал первый,это нужно для того чтобы скрипт перешел на второй ряд в случае если в первом нет НИ ОДНОГО камня.

переменные очень помогают в этом,потому как можно прибавлять не к изначальным значениям а к тем которые файндколор записал в эти переменные

Автор: veiron 4.1.2013, 21:40

Цитата(Санчес @ 4.1.2013, 22:39) *

Изначально не нужно было чтобы камень из С1 сдвинулся на С2 ,НО это нужно сделать только в том случае если есть два камня в д2 и е2,или в а2 и б2,или в с3 и с4..Файндколор обнаружив камень в с1 должен сделать его координаты как бы нулевыми иначе не предусмотреть все варианты,и именно поэтому пришлось задавать ему проверять именно по рядам а не все поле сразу.

Если бы он не успевал я бы не рассказывал об этом,в худшем случае,а это бывает Очень редко,он тратить 20 сек на проверку всех пяти видов фигур,есть еще нюанс это стрелочки которые появляются над фигурами на 20ой секунде,они не всегда позволяют распознать цвет,но это тоже очень редко.

так как проверять приходится по рядам то координаты задал не всего поля а только верхнего ряда,но это в первом файндколоре,есть еще и второй который будет отталкиваться от тех значений которые задал первый,это нужно для того чтобы скрипт перешел на второй ряд в случае если в первом нет НИ ОДНОГО камня.

переменные очень помогают в этом,потому как можно прибавлять не к изначальным значениям а к тем которые файндколор записал в эти переменные


Я такую задумку пытаюсь сделать с Findimage, но пока ни чего не выходит. Ты находишь каждый 1 шар, а Findimage можно найти 2, к примеру: d2 и e2, у тебя остается 5 точек поиска, это c1, d2, c3, f1, f3, но вот связать все это вместе не получается.

Автор: Санчес 4.1.2013, 21:44

я пользуюсь массивом 1 1 и 1 2 и все,остальные не нужны так как файндколор проверяет ряд,находит три камня например,и когда проверяет первый из найденных и не находит комбинации то "убегает" в конец скрипта,там меняются координаты и поиск повторяется но не сначала а "после" этого первого камня.Короче замудрил я тут похоже smile.gif

Автор: veiron 4.1.2013, 21:45

Цитата(Санчес @ 4.1.2013, 22:44) *

я пользуюсь массивом 1 1 и 1 2 и все,остальные не нужны так как файндколор проверяет ряд,находит три камня например,и когда проверяет первый из найденных и не находит комбинации то "убегает" в конец скрипта,там меняются координаты и поиск повторяется но не сначала а "после" этого первого камня.Короче замудрил я тут похоже smile.gif


Ну да, дело ясное, что дело темное) А так принцип тот же, я так понимаю. Тебе надо проверять ряды, а тут надо проверять как то точки возле найденных двух.

Автор: Санчес 4.1.2013, 21:46

Цитата
не выходит. Ты находишь каждый 1 шар, а Findimage можно найти 2,

фаиндколор также находит все камни в том ряду в котором задан поиск
сет логгинг это показывает и очень хорошо что есть такая полезная вешь,респект автору smile.gif

Автор: veiron 4.1.2013, 21:50

Цитата(Санчес @ 4.1.2013, 22:46) *

фаиндколор также находит все камни в том ряду в котором задан поиск
сет логгинг это показывает и очень хорошо что есть такая полезная вешь,респект автору smile.gif

Попробовал set logging интересно работает. Только у меня почемуто вместо в логе не отобразились слова: УДАЧА , показывает $luck. Я так понимаю раз есть set $luck удача, то показать должно просто слово УДАЧА

Автор: Санчес 4.1.2013, 21:52

единственное отличие которое я вижу между твоей задей и моей в свое время,это искать третий по наличию двух,в то время как я "искал" два по наличию одного,хотя я пробовал и так как ты предлагаешь и скажу что для проверки всех "трех-каменых" комбинаций в квадрате 3*3=9 ячеек(а не 6*6=36) и только одного цвета,мне пришлось написать условия на 24 варианта,и когда я подумал сколько их придется писать на все поле,да еще и на пять цветов...я передумал smile.gif

И подумал что быстрее будет перейти на следующий ряд..

Автор: veiron 4.1.2013, 21:58

Цитата(Санчес @ 4.1.2013, 22:52) *

единственное отличие которое я вижу между твоей задей и моей в свое время,это искать третий по наличию двух,в то время как я "искал" два по наличию одного,хотя я пробовал и так как ты предлагаешь и скажу что для проверки всех "трех-каменых" комбинаций в квадрате 3*3=9 ячеек(а не 6*6=36) и только одного цвета,мне пришлось написать условия на 24 варианта,и когда я подумал сколько их придется писать на все поле,да еще и на пять цветов...я передумал smile.gif

И подумал что быстрее будет перейти на следующий ряд..

Принцип твоего скрипта понимаю, а как реализовать нет. Это та же картина что и я пытаюсь сделать, только наоборот. я ищу 2 и хочу добавить 3, а у тебя поиск 1 и добавляется 2.

Автор: Санчес 4.1.2013, 22:10

Я стараюсь не пользоваться словами которые могут применять в зарезевированых переменных и вообще английскими,хотя неплохо знаю его,именно по причине конфликтов поэтому попробуй любое другое слово даже на кирилице,это первое,во вторых...

я не присваивал переменным записи в лог а просто писал сет логгинг Удача

Цитата
наоборот. я ищу 2 и хочу добавить 3, а у тебя поиск 1 и добавляется 2.

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

представь сколько вариантов нужно учесть при проверке соседних ячеек..
навскидку это... 12 вариантов,но при этом двигать с одной стороны нужно относительно первого камня,а если с другой стороны то относительно второго,и по вертикали также...
я пока не совсем "вижу" схему действий..


нужно же чтобы все три камня "знали" о положении других относительно себя..

Автор: veiron 4.1.2013, 22:10

Как я понял я должен сделать что то такое:

Цитата

финдколор(цвет) красный цвет координаты а1
if // нашел
end_if
финдколор(цвет) красный цвет координаты b1
if // нашел
end_if
финдколор(цвет) красный цвет координаты c1
if // нашел
end_if
финдколор(цвет) красный цвет координаты d1
if // нашел
end_if
финдколор(цвет) красный цвет координаты e1
if // нашел
end_if
финдколор(цвет) красный цвет координаты f1
if // нашел
end_if

и так далее пока не укажу все ячейки?

Автор: DarkMaster 4.1.2013, 22:16

Для этого есть for и массивы. Уже сколько раз писал) Почитай что делает фор.

Автор: veiron 4.1.2013, 22:21

Цитата(DarkMaster @ 4.1.2013, 23:16) *

Для этого есть for и массивы. Уже сколько раз писал) Почитай что делает фор.

у меня фор постоянно открыт, я его скоро как гимн СССР на изусть буду знать. Только спеть смогу, а написать новый нет. Так и про фор, то что там на вики про фор написано уже скоро на изусть выучу.
А так вот, на что меня хватило
Код

for  #i #i + 1
Findimage/финдколор (картинка или цвет) // красный цвет
if #i > 1  // нашел
end_if
end_for

Автор: Zeleax 4.1.2013, 22:32

Покажите, пожалуйста, любой пример с вики или с Полезных советов, где написано что-либо подобное:
for #i #i + 1

...
Ладно, можете не искать. Нет такого

Автор: Санчес 4.1.2013, 22:34

smile.gif Я с ним тоже пока не разбирался,а насчет того что ты понял - координаты не каждой ячейки а области,в моем случае это один ряд из 6ти ячеек,а сколько их там надется и по каким координатам файндколор запишет в массив 1 1 и 1 2 если найден только один,если же найдено больше то тоже запишет в 21 22,31 32 и теде,но в моем случае мне важны только координаты первого найденного


ты говоришь файндколору искать с а1 до ф1 и все что найдет записать в массив

Автор: veiron 4.1.2013, 22:50

Цитата(Санчес @ 4.1.2013, 23:34) *

smile.gif Я с ним тоже пока не разбирался,а насчет того что ты понял - координаты не каждой ячейки а области,в моем случае это один ряд из 6ти ячеек,а сколько их там надется и по каким координатам файндколор запишет в массив 1 1 и 1 2 если найден только один,если же найдено больше то тоже запишет в 21 22,31 32 и теде,но в моем случае мне важны только координаты первого найденного
ты говоришь файндколору искать с а1 до ф1 и все что найдет записать в массив


Вот что получилось, и так нада сделать 6 раз для всех от а1 до а6 ??
Код

set $a findcolor (280, 204 365, 325  1 1 786554  %s 2)
set #w size (%s)
for #i 1
    set #x %s [1 1]
    set #y %s [1 2]
end_for

Только он нашел в одной линии 2 шара далеко друг от друга. С Findimage проще там нарезал картинку сразу на два шара. а как findcolor сделать, что бы он 2 вместе искал.


Цитата(Zeleax @ 4.1.2013, 23:32) *

Покажите, пожалуйста, любой пример с вики или с Полезных советов, где написано что-либо подобное:
for #i #i + 1

...
Ладно, можете не искать. Нет такого

Знаю, что нет. Это я от таймера пытался кусок кода добавить.

Автор: Санчес 4.1.2013, 23:04

Цитата
Вот что получилось, и так нада сделать 6 раз для всех от а1 до а6 ??
Код

set $a findcolor (280, 204 365, 325  1 1 786554  %s 2)
set #w size (%s)
for #i 1
    set #x %s [1 1]
    set #y %s [1 2]
end_for


насчет фора ничего не скажу так как не понимаю его пока,а насчет фколора по идее координаты должны меняться только по горизонтали раз ты проверяешь ряд то есть 280, 204 365, 204!
и шаг 1 1 может ошибочно найти два пикселя в одном камне а считать их за два камня

Цитата
что бы он 2 вместе искал.

фколор наверное не найдет два,но с помощью ифа можно проверить есть ли рядом с найденым еще один или больше

Автор: veiron 4.1.2013, 23:13

Цитата(Санчес @ 5.1.2013, 0:04) *

насчет фора ничего не скажу так как не понимаю его пока,а насчет фколора по идее координаты должны меняться только по горизонтали раз ты проверяешь ряд то есть 280, 204 365, 204!
и шаг 1 1 может ошибочно найти два пикселя в одном камне а считать их за два камня
фколор наверное не найдет два,но с помощью ифа можно проверить есть ли рядом с найденым еще один или больше


Убрал фор,сделал шаг 1 2 задал область поиска от а1 до f1 , нашлось два шара нужного цвета, только находились они далеко друг от друга. Как с помощью ифа проверить что бы в этой линии искал два которых рядом ?
Код

set $a findcolor (278, 124 324, 371  1 1 786554  %s 2)
if $a > 0
    set #x %s [1 2]
    set #y %s [1 2]
    msg нашел  //  красный найден
    else
  msg красный не найден
end_if

Автор: Санчес 4.1.2013, 23:21

насколько я понимаю у фколора нет функции сравнения координат,он только находит и записывает положение,а чтобы указать рядом они или нет я использую иф,но это уже проверка соседних ячеек...


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

Автор: veiron 4.1.2013, 23:22

Цитата(Санчес @ 5.1.2013, 0:21) *

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

А как если не одной строкой, я просто не представляю как это выполнить ? В findimage немного проще, там нарезал картинку с 2 шарами и он их сразу найдет.

Автор: Санчес 4.1.2013, 23:32

Я вижу такую схему
Ищем есть ли красные и сколько
если есть то проверяем в ячейке рядом
если рядом есть то проверяем через один в том же ряду
иначе
переходим ко второму найденому
повторяем все заново



Цитата
картинку с 2 шарами и он их сразу найдет.

Поправка "Найдет" или "Находит"???

и потом фимидж записывает координаты верхнего левого угла найденной картинки,это тоже нужно учесть,а фколор координаты точки.

Автор: veiron 4.1.2013, 23:32

Цитата(Санчес @ 5.1.2013, 0:27) *

Поправка "Найдет" или "Находит"???

уже не один раз пробовал, и сейчас попробовал, 2 вместе он находит легко, сколько их будет на поле столько и найдет. единственное это надо 2 картинки: 1 вертикально 2 шара и вторая горизонтально 2 шара. Поле стандартное, надо сделать смещение от левого угла картинки. Я это представляю наглядно, а как это выйдет в скрипте не представляю

Автор: Санчес 4.1.2013, 23:34

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

Автор: veiron 4.1.2013, 23:34

Вернее не представляю, как реализовать все это.

Автор: Санчес 4.1.2013, 23:37

Цитата
Я это представляю наглядно, а как это выйдет в скрипте не представляю

Можно путем прибавления,если ячейка 20*20 то
set #x @x + 10
set #y #y + 10

Автор: veiron 4.1.2013, 23:37

Цитата(Санчес @ 5.1.2013, 0:34) *

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

Это к ДаркМастеру, мне бы хотя бы к 2 еще одного найти. Да и на поле практически всегда есть 2 вместе какого нибудь цвета.

Автор: Санчес 4.1.2013, 23:38

Цитата
set #x @x + 10

собака случайно вышла smile.gif

Автор: DarkMaster 4.1.2013, 23:39

пробуйте писать. что угодно пишите. представлять сразу легче будет.
картинки ищие финдом? - пишите финд
результат в массиве? - работать надо с массивом
надо сравнивать? - пишите if
нужно перебрать массив? - используйте for

Автор: Санчес 4.1.2013, 23:43

Цитата
всегда есть 2 вместе какого нибудь цвета.

для меня важно потому как мне лучше чтобы сложил три красных в шахматном,чем три желтых из двух и одного



Хотя как я понял тебе главное чтобы ход произошел,а из чего сложит не важно

если это так то можно было бы и иначе поступить,но это меняет суть

Автор: veiron 4.1.2013, 23:46

Цитата(Санчес @ 5.1.2013, 0:37) *

Можно путем прибавления,если ячейка 20*20 то
set #x @x + 10
set #y #y + 10

Я говорил уже, если делать findimage, то 6 точек проверки, возле каждых 2 найденных шаров. Только получается как то кликнуть надо в 2 места если в какой то области из 6 он найдет нужный. 1 раз на сам шар. 2 клик, что бы совместить. Наверно так
set #x @x + 10
set #y #y + 10
ячейки стандартные, попробую, может что и получится. Все равно с финдколором я не смогу сделать, с фором как советует ДаркМастер тоже. Это наверно мой единственный шанс если получится.

Цитата(Санчес @ 5.1.2013, 0:43) *

если это так то можно было бы и иначе поступить,но это меняет суть

Иначе это как? Да мне важен ход, даже основным персом. там я чуть что, уроном добью.


Цитата(DarkMaster @ 5.1.2013, 0:39) *

пробуйте писать. что угодно пишите. представлять сразу легче будет.
картинки ищие финдом? - пишите финд
результат в массиве? - работать надо с массивом
надо сравнивать? - пишите if
нужно перебрать массив? - используйте for


Да, я так и хочу попробовать. Найти финдом, потом им же найти в 6 соседних точках. и тупо кликнуть, с одной точки в другую, все равно для меня фор это не понять. а так может что и выйдет.

Автор: DarkMaster 4.1.2013, 23:47

Цитата
@x

очепятка

Автор: Санчес 4.1.2013, 23:51

есть еще гетколор...я думаю что можно с помощью него скомбинировать поиск с фколором,но не знаю как и фимиджем,только обойтись без "иф" не получится

Автор: veiron 4.1.2013, 23:55

Цитата(Санчес @ 5.1.2013, 0:51) *

есть еще гетколор...я думаю что можно с помощью него скомбинировать поиск с фколором,но не знаю как и фимиджем,только обойтись без "иф" не получится

Не я как сильно ни чего не понимаю, буду пробовать фимиджем, я хоть с ним уже хоть немного разобрался. Тупо нарежу 2 шара вместе и 1 шар отдельный, координаты 6 точек буду отталкивать от левого угла найденной картинки, боев за 10 думаю я их прощитаю, а дальше как пойдет.

Автор: Санчес 5.1.2013, 0:00

Цитата(DarkMaster @ 4.1.2013, 22:47) *

очепятка

Можно ли как то комбинировать в одной строке "энд" и "ор"
например
if x1,y1 and x2,y2 or x1,y1 and x3,y3
напрямую не получается.

Автор: xolost 5.1.2013, 0:09

Цитата(Санчес @ 5.1.2013, 1:00) *

Можно ли как то комбинировать в одной строке "энд" и "ор"
например
if x1,y1 and x2,y2 or x1,y1 and x3,y3
напрямую не получается.

скобки ставьте.

не знаю как с корами, но с переменными четко работает.

if (#a = 1 and #b > 5) or ($a < 10 and #b != 1)

Автор: DarkMaster 5.1.2013, 0:24

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

Код
set #sizeArr findcolor .... %arr
set #sizeArr2 findcolor .... %arr2
set #resultArrN 1
if #sizeArr > 0 and #sizeArr2 > 0
    for #i 1 #sizeArr2 1
         set #hit 0
         for #n 1 #sizeArr 1
              if  %arr [ #i 1 ] = %arr2 [ #n 1 ] and %arr [ #i 2 ] = %arr2 [ #n 2 ]
                  break
              else
                  if #n = #sizeArr
                     set %resulArr [ #resultArrN 1 ] %arr2 [ #n 1 ]
                     set %resulArr [ #resultArrN 2 ] %arr2 [ #n 2 ]
                     set #resultArrN #resultArrN + 1
                  end_if
              end_if
         end_for
    end_for
end_if

навскидку примерно так. Не запуск. Медитируйте)

Я бы все-таки пошел чуть иным путем.
Код
set #startX 123 // Область поиска
set #startY 321
set #offsetX 20 // Размер квадратика
set #offsetY 20

for #i 1 6 1 // Размер поля же 6 на 6 вроде?
     for #n 1 6 1
          set #resultArr [ #i #n ] 0 // Забиваем матрицу нулями, флаг бесполезного шарика.
     end_for
end_for

set #sizeArr findcolor .... %arr // Ищем шарики
for #i 1 #sizeArr 1
     set #matrixX ( %arr [ #i 1 ] - #startX ) / #offsetX + 1
     set #matrixY ( %arr [ #i 2 ] - #startY ) / #offsetY + 1
     set %resultArr [ #matrixX #matrixY ] 1 // 1 - это индекс искомого шарика
     // можно будет задать для других шариков другие индексы и
     // получить полноценую матрицу
end_for

Тоже не запускал, но как-то так должно быть.

Автор: veiron 5.1.2013, 0:34

Цитата(DarkMaster @ 5.1.2013, 1:24) *

навскидку примерно так. Не запуск. Медитируйте)

ohmy.gif blink.gif И Вы мне про этот Фор говорили!!! За скрипт СПАСИБО.

Автор: Санчес 5.1.2013, 0:43

Цитата(xolost @ 4.1.2013, 23:09) *

скобки ставьте.

не знаю как с корами, но с переменными четко работает.

if (#a = 1 and #b > 5) or ($a < 10 and #b != 1)

Попробую wink.gif

Автор: Санчес 5.1.2013, 2:28

Цитата
// перед запуском скрипта не забываем привязать скрипт к рабочему окну (Ctrl+A)
set #startX 345
set #startY 345
set #endX 345
set #endY 345
set $path C:\Program Files\UOPilot\images\
set %cash[1] картинка // будем искать картинку из файла C:\Program Files\UOPilot\images\картинка.bmp
set $a findimage (#startX #startY #endX #endY ($path%cash[1].bmp) %crds 2)
if $a > 0
msg Изображение найдено в координатах X= %crds[1 1] Y= %crds[1 2]. Кликнем на нём...
left %crds[1 1] %crds[1 2] // кликнули
else msg Изображение не найдено
end_if

Можно ли чтобы искал две и более картинок?
%cash[1] Синтаксис такой почему? В смысле цифра в скобках.

Автор: xolost 5.1.2013, 3:37

Цитата(Санчес @ 5.1.2013, 3:28) *

Можно ли чтобы искал две и более картинок?


Разумеется, при помощи цикла for
Код
set $path c:\images\
set %loko[1] Вася
set %loko[2] Лена
set %loko[3] Петя
set %loko[4] Марина
set %loko[5] Оксана

for #i 1 5
   set $a findimage (#startX #startY #endX #endY ($path%loko[#i].bmp) %crds 2)
end_for

Автор: veiron 5.1.2013, 8:57

Цитата(xolost @ 5.1.2013, 4:37) *

Разумеется, при помощи цикла for
Код
set $path c:\images\
set %loko[1] Вася
set %loko[2] Лена
set %loko[3] Петя
set %loko[4] Марина
set %loko[5] Оксана

for #i 1 5
   set $a findimage (#startX #startY #endX #endY ($path%cash[#i].bmp) %crds 2)
end_for



Вот спасибо, Вы помогли мне скрипт уменьшить сразу на 500 строк.

Автор: xolost 5.1.2013, 9:01

Цитата(veiron @ 5.1.2013, 9:57) *

Вот спасибо, Вы помогли мне скрипт уменьшить сразу на 500 строк.

Я же говорил, со временем уменьшите во много раз))
Нужно только терпение и правильные вопросы.

Автор: xolost 5.1.2013, 9:12

Так. Раз уж Дарк решил выложить готовый скрипт на матрицу(хоть и не проверенный), то я тоже выложу что ли))

Получайте.
Для работы скрипта нужно сделать 6 картинок:
с названиями рамка.bmp, 1.bmp, 2.bmp 3... 4... 5...
1-5 это картинки центров шариков пикселов так 5 на 5
и рамка - левый-верхний угол 10 на 10 пикселов

Можно скачать http://zalil.ru/34136618

А вот сам скрипт.

Код
set #startX 0 
set #startY 0
set #endX 1280
set #endY 1024
set #sosed 40   // отступ в сторону для поиска шарика в соседней ячейке
set $bmp .bmp
   // ищем левый-верхний угол рамки
   set $ramka findimage (#startX #startY #endX #endY (c:\images6\рамка.bmp) %crds 2 100 1)  
   if $ramka > 0    
      set #x1 %crds[1 1] + 10        // задаем область для поиска ячейки относительно рамки
      set #y1 %crds[1 2] + 10
      set #x2 #x1 + #sosed
      set #y2 #y1 + #sosed
      for #b 1 6
         for #a 1 6
            for #s 1 5
               set $s1 findimage (#x1 #y1 #x2 #y2 (c:\images6\#s$bmp) %crds2 2 100 1)  
               if $s1 > 0
                  set %pole[#b #a] #s     // нашли шарик - записали его в общий массив на своё место
                  set #x1 #x1 + #sosed
                  set #x2 #x2 + #sosed
                  break
               end_if  
            end_for
         end_for
         set #x1 %crds[1 1] + 10
         set #x2 #x1 + #sosed
         set #y1 #y1 + #sosed  
         set #y2 #y2 + #sosed
      end_for
   end_if
   save_array %pole c:\images6\pole.txt    // записали в файл получившийся массив.
end_script

Автор: veiron 5.1.2013, 9:12

Цитата(xolost @ 5.1.2013, 10:01) *

Я же говорил, со временем уменьшите во много раз))
Нужно только терпение и правильные вопросы.

А как теперь сделать, что бы такое заработало
Код

while ( $a = 0 ) and ( $b = 0 )
set $a Findimage....%arr
set $b Findimage....%crds
if $a > 1
   set #x %arr[1 1]
   set #y %arr[1 2]  
   Left #x, #y
end_if
if $b > 1
   set #x %crds[1 1]
   set #y %crds[1 2]  
   Left #x, #y
end_if
end_while

раньше у меня было 2 массива, а теперь только 1.

За скрип, огромное спасибо.

Автор: xolost 5.1.2013, 10:07

Код

while ( $a = 0 ) and ( $b = 0 )
set $a Findimage....%arr
set $b Findimage....%crds
if $a > 1
   set #x %arr[1 1]
   set #y %arr[1 2]  
   Left #x, #y
end_if
if $b > 1
   set #x %crds[1 1]
   set #y %crds[1 2]  
   Left #x, #y
end_if
end_while

раньше у меня было 2 массива, а теперь только 1.
[/code]

А что тут вообще?
Я вижу что тут говорится крутим в цикле пока не найдется хоть одна из двух картинок. Как бы с виду может работать, но зависит от того что в findimage.

Автор: veiron 5.1.2013, 11:27

Цитата(xolost @ 5.1.2013, 11:07) *

А что тут вообще?
Я вижу что тут говорится крутим в цикле пока не найдется хоть одна из двух картинок. Как бы с виду может работать, но зависит от того что в findimage.

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

Автор: Санчес 5.1.2013, 11:42

Цитата
Разумеется, при помощи цикла for
Код
set $path c:\images\
set %loko[1] Вася
set %loko[2] Лена
set %loko[3] Петя
set %loko[4] Марина
set %loko[5] Оксана

for #i 1 5
   set $a findimage (#startX #startY #endX #endY ($path%cash[#i].bmp) %crds 2)
end_for


Спасибо smile.gif

Автор: xolost 5.1.2013, 12:37

я опечатался там, вместо %cash в данном случае %loko разумеется)


Цитата
ждем когда появится одна из двух картинок, если видим первую картинку, кликаем в нее, если втолую то клик по ней.


И в чем вопрос?)

Автор: veiron 5.1.2013, 12:45

Цитата(xolost @ 5.1.2013, 13:37) *

я опечатался там, вместо %cash в данном случае %loko разумеется)
И в чем вопрос?)

Разобрался, это я запутался и вас путаю.

Автор: xolost 5.1.2013, 12:50

Ну, если я верно понял, то что-то в этом роде:

Код

set $a findimage (#startX #startY #endX #endY ($path%cash[#i].bmp) %crds 2)
   if $a > 0
      if #i = 1
         set #x %crds[1 1] + 50
         set #y %crds[1 2]  - 20
      end_if
      if #i = 2
         set #x %crds[1 1] + 180
         set #y %crds[1 2]  - 190
      end_if
          Left #x, #y // клик по первой найденной картинки
   end_if

Автор: Санчес 5.1.2013, 16:17

Цитата
Код
set $path c:\images\
set %loko[1] Вася
set %loko[2] Лена
set %loko[3] Петя
set %loko[4] Марина
set %loko[5] Оксана

for #i 1 5
   set $a findimage (#startX #startY #endX #endY ($path%cash[#i].bmp) %crds 2)
end_for


Попробовал конструкцию,с переменной #i не находит а просто повторяет цикл,если же вместо [#i] ставлю [1] или любую другую цифру до пяти то норм..правда цикл становится ненужным..
Код:
// For
set #startX 5
set #startY 3
set #endX 380
set #endY 400

set $path C:\Uopilot\Images\

set %loko[1] 1.bmp
set %loko[2] 2.bmp
set %loko[3] 3.bmp

for #i 1 3
set $a findimage (#startX #startY #endX #endY ($path%loko[3]) %crds 2 80 3 10)
if $a > 0
left %crds[1 1],%crds[1 2]
left %crds[2 1],%crds[2 2]
left %crds[3 1],%crds[3 2]
end_if
end_for

Автор: Zeleax 5.1.2013, 16:19

сначала запишите полное имя файла в переменную, а потом уже её подставляйте в findimage

Автор: Санчес 5.1.2013, 16:21

Глупый вопрос,но ...почему именно crds а не fkigt например?Аббревиатура или гон?

полное это как? 1.bmp это неполное??

Автор: Zeleax 5.1.2013, 16:27

Код
for #i 1 3
set $name $path%loko[#i]
set $a findimage (#startX #startY #endX #endY ($name) %crds 2 80 3 10)
...
end_for

Автор: Санчес 5.1.2013, 16:33

Значит полное имя это означает set $name путь к файлу + имя?

Автор: Zeleax 5.1.2013, 16:35

Цитата(Санчес @ 5.1.2013, 17:33) *

Значит полное имя это означает set $name путь к файлу + имя?

полное имя - это путь к файлу+имя+расширение
записываем его в перемнную $name , а потом переменную вставляем в findimage

Автор: Санчес 5.1.2013, 16:39

пишет нот валид на строке set $name $path%loko[#i]

Автор: Zeleax 5.1.2013, 16:46

А вы в свой скрипт его ставили?

Код
Код
set #startX 5
set #startY 3
set #endX 380
set #endY 400

set $path C:\Uopilot\Images\

set %loko[1] 1.bmp
set %loko[2] 2.bmp
set %loko[3] 3.bmp

set $a 0
for #i 1 3
  set $name $path%loko[#i]
  log $name
  //set $a findimage (#startX #startY #endX #endY ($path%loko[3]) %crds 2 80 3 10)
  if $a > 0
    left %crds[1 1],%crds[1 2]
    left %crds[2 1],%crds[2 2]
    left %crds[3 1],%crds[3 2]
  end_if
end_for

end_script

Автор: Санчес 5.1.2013, 16:59

Цитата(Zeleax @ 5.1.2013, 15:46) *

А вы в свой скрипт его ставили?
Код
Код
set #startX 5
set #startY 3
set #endX 380
set #endY 400

set $path C:\Uopilot\Images\

set %loko[1] 1.bmp
set %loko[2] 2.bmp
set %loko[3] 3.bmp

set $a 0
for #i 1 3
  set $name $path%loko[#i]
  log $name
  //set $a findimage (#startX #startY #endX #endY ($path%loko[3]) %crds 2 80 3 10)
  if $a > 0
    left %crds[1 1],%crds[1 2]
    left %crds[2 1],%crds[2 2]
    left %crds[3 1],%crds[3 2]
  end_if
end_for

end_script


само собой
Цитата
// For
set #startX 5
set #startY 3
set #endX 380
set #endY 400
set $path C:\Uopilot\Images\
set %loko[1] 1.bmp
set %loko[2] 2.bmp
set %loko[3] 2.bmp
for #i 1 3
set $name $path%loko[#i]
set $a findimage (#startX #startY #endX #endY ($name) %crds 2 80 3 10)
if $a > 0
left %crds[1 1],%crds[1 2]
left %crds[2 1],%crds[2 2]
eft %crds[3 1],%crds[3 2]
end_if
end_for



с переменной ошибку пишет,с цифрой норм..

нет только set $a 0 и log $name

я не совсем догоняю как в for понимает что нужно подставлять адреса картинок в #i

Где в этой конструкции указание на такие действия?

Должно быть типа set #i или я запутался??

Автор: Zeleax 5.1.2013, 17:00

тот скрипт, что я выложил под спойлером ошибку пишет??

Автор: Санчес 5.1.2013, 17:14

написал set #i 1 перед for...никаких изменений....

Zeleax именно так,мне кажется что [#i] его смущает.

Автор: Zeleax 5.1.2013, 17:15

так где ошибка то?
а меня без ошибок мой скрипт работает

Автор: Санчес 5.1.2013, 17:16

я не знаю где ошибка,думал ты знаешь smile.gif останавливается на строке и пишет нот валид

Автор: Zeleax 5.1.2013, 17:25

Цитата(Санчес @ 5.1.2013, 18:16) *

я не знаю где ошибка,думал ты знаешь smile.gif останавливается на строке и пишет нот валид

Да я ваш скрипт скопировал - работает!
https://forum.uokit.com/index.php?s=&showtopic=25306&view=findpost&p=183165

Автор: Санчес 5.1.2013, 17:44

Мда sad.gif теперь дошло..сорри,но если бы я знал то не засорял бы эфир,пилот у меня на рабочем столе и в пути присутствует это,видать из за кириллицы,в переменную он не хочет ее записывать,напрямую работает норм,перенес пилот на С в корень.Работает,сорри еще раз за напрасно отнятое время

Я всегда избегаю кириллицы в любых вопросах по компам,а тут че то тупанул

Наверное об этом где то написано ,но я пропустил этот момент

Автор: Санчес 5.1.2013, 18:17

Цитата
set $path c:\images\
set %loko[1] Вася
set %loko[2] Лена
set %loko[3] Петя
set %loko[4] Марина
set %loko[5] Оксана

for #i 1 5
   set $a findimage (#startX #startY #endX #endY ($path%loko[#i].bmp) %crds 2)
end_for

xolost твой первоначальный вариант тоже работает норм,видимо дело было только в этом

Автор: Zeleax 5.1.2013, 18:25

Добавил этот нюанс в описание findimage на уовики

Автор: DarkMaster 5.1.2013, 18:30

чет сомнения у меня про крилиллицу. вопрос скорее в пробеле

Автор: veiron 5.1.2013, 18:55

Код
Код
set linedelay 1
while 1 = 1
   set #timeoff  timer + 200
   set #sob 0 Findimage
   set #dzh 0 Findimage
   while ( #vor <= 0 ) and ( timer < #timeoff ) or ( #b <= 0 ) and ( timer < #timeoff ) or ( #dzh <= 0 ) and ( timer < #timeoff )  
      wait 10
      set #sob Findimage ($sobitiaj_x $sobitiaj_y ($sobitiaj) %bit 2 90 1 2 )
      wait 10
      set #dzh Findimage (166, 73 312, 131  ($dzhek) %kpot 2 90 1 2 )
   end_while
   if #sob = 0 or #dzh > 0
      break
   end_if
    if #sob > 1  
      hint сработало    
       set #a 0 Findimage
set #a Findimage (137, 121 168, 161 ($vixod_arxiv) %arr 2 90 1 2 )
      set #as_x %arr[1 1]                          //////////////////  ОШИБКА проверте правильность работы скрипта
      set #as_y %arr[1 2]
      Left #as_x, #as_y  // клик закрыть  
   end_if
end_while

Скажите почему на 5 строке с низу выбивает ошибку, проверте правильость работы скрипта и пишет set #as_x %arr[1 1]

Автор: Zeleax 5.1.2013, 19:00

значит в массиве ничего нет (картинка не найдена).
Надо обязательно #a проверять после поиска

Автор: Санчес 5.1.2013, 19:04

Цитата
чет сомнения у меня про крилиллицу. вопрос скорее в пробеле


DarkMaster я пару часов потратил и пробела пробовал и много чего другого,но вам конечно виднее,я совершенно точно могу сказать только одно,как только перенес пилот со стола в корень диска заработали обе конструкции

Автор: veiron 5.1.2013, 19:05

Цитата(Zeleax @ 5.1.2013, 20:00) *

значит в массиве ничего нет (картинка не найдена).
Надо обязательно #a проверять после поиска


как это сделать, что бы проверить #a ?

Автор: Санчес 5.1.2013, 19:06

Цитата
как это сделать, что бы проверить #a ?

Сет логгиннг в помощь smile.gif

Автор: Zeleax 5.1.2013, 19:07

Цитата(veiron @ 5.1.2013, 20:05) *

как это сделать, что бы проверить #a ?

Код
if #a > 0
  ляляля
end_if

Автор: Санчес 5.1.2013, 19:07

Кстати Zeleax, а почему ты написал в скрипте просто log?

Автор: Zeleax 5.1.2013, 19:18

Цитата(Санчес @ 5.1.2013, 20:07) *

Кстати Zeleax, а почему ты написал в скрипте просто log?

Это сокращенная форма команды. Тоже работает, и удобнее

Автор: veiron 5.1.2013, 19:22

Цитата(Zeleax @ 5.1.2013, 20:07) *

Код
if #a > 0
  ляляля
end_if


Код

    if #sob > 0     //  заменил 1 на 0
      hint сработало    
       set #a 0 Findimage
set #a Findimage (137, 121 168, 161 ($vixod_arxiv) %arr 2 90 1 2 )
      set #as_x %arr[1 1]                          //////////////////  ОШИБКА проверте правильность работы скрипта
      set #as_y %arr[1 2]
      Left #as_x, #as_y  // клик закрыть  
   end_if

Заменил в if единицу на 0, та же ошибка осталась.

Автор: Zeleax 5.1.2013, 19:24

Салфеткой нужно рот вытирать после еды, а не до еды )

Автор: Санчес 5.1.2013, 19:27

Цитата
Это сокращенная форма команды. Тоже работает, и удобнее
ее можно писать вместо сет логгинг не задумываясь или есть различия?

Автор: veiron 5.1.2013, 19:29

Цитата(Санчес @ 5.1.2013, 20:06) *

Сет логгиннг в помощь smile.gif

Поставил выдал он мне
Код

18:11:44 0 (, 9): msg - Изображение не найдено
18:13:48 0 (, 9): msg - Изображение не найдено
18:14:25 0 (, 7): msg - Изображение найдено

Как мне это может помочь. Картинка есть, еслли проверять msg, как только вставляю set #as_x %arr[1 1] так сразу ошибка. Если просто лефт поставить и кликнуть, то ошибки нет, а с этим есть set #as_x %arr[1 1]

Автор: Zeleax 5.1.2013, 19:32

Цитата(Санчес @ 5.1.2013, 20:27) *

ее можно писать вместо сет логгинг не задумываясь или есть различия?

Вроде нет никаких проблем с заменой. Вдруг найдутся - отпишитесь

Автор: veiron 5.1.2013, 19:38

Цитата(Zeleax @ 5.1.2013, 20:24) *

Салфеткой нужно рот вытирать после еды, а не до еды )


Если это мне про салфетку, то я так и не понял. Я поменял в ифе 1 на 0, и куда бы я не вставлял этот иф, везде ошибка.

Автор: Zeleax 5.1.2013, 19:39

Цитата(veiron @ 5.1.2013, 20:38) *

Если это мне про салфетку, то я так и не понял. Я поменял в ифе 1 на 0, и куда бы я не вставлял этот иф, везде ошибка.

проверять нужно После findimage, а не До

Ну вот же Санчес уже сделал:
https://forum.uokit.com/index.php?s=&showtopic=25306&view=findpost&p=183165

Автор: xolost 5.1.2013, 20:07

Цитата(veiron @ 5.1.2013, 20:38) *

Если это мне про салфетку, то я так и не понял. Я поменял в ифе 1 на 0, и куда бы я не вставлял этот иф, везде ошибка.


Вы говорите пилоту - кликай в по координатам из массива, которых в нём нету.

Поэтому, нужно всегда ставить условие:
Код
if $a > 0
   set #x %crds тра-та-та
   тра-та-та
end_if

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



Цитата(Санчес @ 5.1.2013, 19:17) *

xolost твой первоначальный вариант тоже работает норм,видимо дело было только в этом

Конечно мой скрипт работает. Мои скрипты всегда работают. smile.gif)))

Автор: veiron 5.1.2013, 20:59

Цитата(Zeleax @ 5.1.2013, 20:39) *

проверять нужно После findimage, а не До

Ну вот же Санчес уже сделал:
https://forum.uokit.com/index.php?s=&showtopic=25306&view=findpost&p=183165


Код
Код

set $path C:\logs\
set %cash[1] 3
// будем искать картинку из файла C:\Program Files\UOPilot\images\картинка.bmp
set $a findimage (180, 75 689, 416  ($path%cash[1].bmp) %crds 2)
if $a > 0
  msg Изображение найдено.
  wait 1s
  left %crds[1 1] %crds[1 2] // кликнули
  wait 3s
else
  msg Изображение не найдено
end_if
end_script

первым кодом все картинки находятся всегда. а вторым вообще ни куда ни кликает, просто по фор прогнал 3 раза и стоп. код полность скопирован по вашей ссылке.
Код
Код

set $path C:\logs\

set %loko[1] 1.bmp
set %loko[2] 2.bmp
set %loko[3] 3.bmp

set $a 0
for #i 1 3
  set $name $path%loko[#i]
  log $name
  //set $a findimage (94, 35 701, 445  ($path%loko[3]) %crds 2 80 3 10)
  if $a > 0
    left %crds[1 1],%crds[1 2]
    left %crds[2 1],%crds[2 2]
    left %crds[3 1],%crds[3 2]
  end_if
end_for
end_script

Лог пишет вот это:
20:57:31 0 (, 13): C:\logs\1.bmp
20:57:31 0 (, 13): C:\logs\2.bmp
20:57:31 0 (, 13): C:\logs\3.bmp

Автор: veiron 5.1.2013, 21:17

нашел ошибку у себя, перед финимеджем поставлены //, убрал. и сразу на лефте пилот выдал ошибку: проверте правильность работы скрипта. я так понимаю, что выскакивает она из за того, что окно с картинками уже закрыто. а как тогда сделать, что бы пилот посмотрел 3 картинки, по 2 нужным кликнул, потом закрыл окно и завершил цикл.

Автор: DarkMaster 5.1.2013, 22:16

Цитата
left %crds[1 1],%crds[1 2]
left %crds[2 1],%crds[2 2]
left %crds[3 1],%crds[3 2]

А зачем ты пытаешься кликнуть по 2 и 3 найденной картинке?

Причем даже не проверяя их существование.

Автор: veiron 5.1.2013, 22:26

Цитата(DarkMaster @ 5.1.2013, 23:16) *

А зачем ты пытаешься кликнуть по 2 и 3 найденной картинке?

Причем даже не проверяя их существование.


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

Автор: Санчес 5.1.2013, 22:35

Цитата
set %loko[1] 1.bmp
set %loko[2] 2.bmp
set %loko[3] 3.bmp

set $a 0
for #i 1 3
  set $name $path%loko[#i]
  log $name
  set $a findimage (94, 35 701, 445  ($path%loko[3]) %crds 2 80 1 10)
  if $a > 0
    left %crds[1 1],%crds[1 2]
  end_if
end_for
end_script

попробуй так
искать будет одну картинку а не три одинаковых,и тыкать по ней,потом вторую и тоже тыкать и теде в зависимости от ФОРа.


Цитата
....%crds 2 80 1 10)

в данном случае параметры поиска 2-быстрый,80-точность,1-количество ОДИНАКОВЫХ картинок,10-погрешность.В том что я написал раньше было искать в области 3 картинки 1.бмп,3 картинки 2.бмп,и 3 3.бмп.
Если не находит не одной то в массив 11 12 нечего записывать и выдает ошибку.


Цитата
искать в области 3 картинки 1.бмп,3 картинки 2.бмп,и 3 3.бмп.

то есть в области поиска они были,всего девять и по три каждой,я просто в папку кинул картинки и включил отображение эскизов страниц.он нашел как и ожидалось сначала первую в трех экземплярах и тыкнул по очереди по каждой из них,потом вторую и теде,но если написать еще массив 41 42 то на этой строке выдаст ошибку,потому как четвертой картинки там нет.

Автор: veiron 5.1.2013, 22:36

Цитата(Санчес @ 5.1.2013, 23:31) *

попробуй так
искать будет одну картинку а не три одинаковых,и тыкать по ней,потом вторую и тоже тыкать и теде в зависимости от ФОРа.
в данном случае параметры поиска 2-быстрый,80-точность,1-количество ОДИНАКОВЫХ картинок,10-погрешность.В том что я написал раньше было искать в области 3 картинки 1.бмп,3 картинки 2.бмп,и 3 3.бмп.
Если не находит не одной то в массив 11 12 нечего записывать и выдает ошибку.

Спасибо,так получается, кликнуть в ту которую надо. А можно как то фор заменить на while, фор не удобен тем, что в нем определенное количество циклов, а я не знаю сколько раз кликнуть надо, иногда 2, а может и 15.

Автор: Санчес 5.1.2013, 22:41

Цитата
что бы пилот посмотрел 3 картинки, по 2 нужным кликнул, потом закрыл окно и завершил цикл.

лефт массив 11 12 первая нужная картинка
лефт массив 21 22 вторая...третью он не запишет так как она не нужна
лефт на кнопку закрытия
енд фор

Автор: xolost 5.1.2013, 22:44

Цитата(veiron @ 5.1.2013, 23:26) *

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


А вот это я для кого писал?
Цитата
Вы говорите пилоту - кликай в по координатам из массива, которых в нём нету.

Поэтому, нужно всегда ставить условие:
Код
Код
if $a > 0
   set #x %crds тра-та-та
   тра-та-та
end_if


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

Автор: Санчес 5.1.2013, 22:45

Цитата
А можно как то фор заменить на while, фор не удобен тем, что в нем определенное количество циклов, а я не знаю сколько раз кликнуть надо, иногда 2, а может и 15.

Можно и while и if они в принципе выполнят функцию одинаково,и там и там идет сначала проверка например:
иф картинка нужна
лефт по ней
енд иф

Автор: veiron 5.1.2013, 22:52

Цитата(Санчес @ 5.1.2013, 23:45) *

Можно и while и if они в принципе выполнят функцию одинаково,и там и там идет сначала проверка например:
иф картинка нужна
лефт по ней
енд иф

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

Автор: Санчес 5.1.2013, 22:56

Цитата
тоесть видит картинку и кликает, пока они не закончатся,как закончились переходим дальше.

тогда так:

Цитата

:старт
иф картинка нужна
лефт по ней
гото старт
енд иф

будет тыкать пока не кончатся

Автор: veiron 5.1.2013, 23:08

Цитата(Санчес @ 5.1.2013, 23:56) *

тогда так:
будет тыкать пока не кончатся

В принципе так и делал, только через gosub, а не гото. Просто думал, можно 6 findimage, заменить на 1.

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

Автор: Санчес 5.1.2013, 23:10

Цитата
6 findimage, заменить на 1.

не совсем понимаю почему шесть?Тебе нужно 6 разных картинок искать по очереди?

Автор: veiron 5.1.2013, 23:13

Цитата(Санчес @ 6.1.2013, 0:10) *

не совсем понимаю почему шесть?Тебе нужно 6 разных картинок искать по очереди?

Не по очереди, а какая появится в данный момент.Мне бонусы в игре собирать надо. Я уже понял, что тут другой принцып. Оставлю на findimage, он ищет и кликает нормально. только много строк занимает.

Автор: Санчес 5.1.2013, 23:17

Цитата
что бы пилот ждал, пока загрузится игра,

найди объект который меняет цвет или размер только после загрузки и на него поставь иф


Цитата
Не по очереди, а какая появится в данный момент

Появляются каждая на своем месте или все в одном или все в разных местах?

Автор: veiron 5.1.2013, 23:17

Цитата(Санчес @ 6.1.2013, 0:15) *

найди объект который меняет цвет или размер только после загрузки и на него поставь иф

там 5 вариантав не загрузки может быть.

Я думал одним скриптом сделать, а так видно придется,отдельными блоками еще и проверку как то делать. через gosub.

Автор: veiron 6.1.2013, 21:00

Можно как то сделать, у меня в окне есть 4 вида кнопок, я их нахожу, кликаю по ним , но иногда может появится 5 кнопка, или еще пилот может что то не прочитать и цикл While стоновится бесконечным, гоняет его постоянно. что надо сделать, что бы когда, что то пошло не так, завершить цикл While.

Автор: xolost 6.1.2013, 23:21

Цитата(veiron @ 6.1.2013, 22:00) *

Можно как то сделать, у меня в окне есть 4 вида кнопок, я их нахожу, кликаю по ним , но иногда может появится 5 кнопка, или еще пилот может что то не прочитать и цикл While стоновится бесконечным, гоняет его постоянно. что надо сделать, что бы когда, что то пошло не так, завершить цикл While.


Код
set timer  // обнуляем таймер
while 1 = 1
   if timer > 5000           // если таймер больше 5 секунд, что-нибудь делаем
      break            // например выходим
   end_if
end_while

Автор: veiron 6.1.2013, 23:33

Цитата(xolost @ 7.1.2013, 0:21) *

Код
set timer  // обнуляем таймер
while 1 = 1
   if timer > 5000           // если таймер больше 5 секунд, что-нибудь делаем
      break            // например выходим
   end_if
end_while


Спасибо, помог скриптик.

Автор: veiron 8.1.2013, 22:17

Цитата(xolost @ 5.1.2013, 10:12) *


Код
set #startX 0 
set #startY 0
set #endX 1280
set #endY 1024
set #sosed 40   // отступ в сторону для поиска шарика в соседней ячейке
set $bmp .bmp
   // ищем левый-верхний угол рамки
   set $ramka findimage (#startX #startY #endX #endY (c:\images6\рамка.bmp) %crds 2 100 1)  
   if $ramka > 0    
      set #x1 %crds[1 1] + 10        // задаем область для поиска ячейки относительно рамки
      set #y1 %crds[1 2] + 10
      set #x2 #x1 + #sosed
      set #y2 #y1 + #sosed
      for #b 1 6
         for #a 1 6
            for #s 1 5
               set $s1 findimage (#x1 #y1 #x2 #y2 (c:\images6\#s$bmp) %crds2 2 100 1)  
               if $s1 > 0
                  set %pole[#b #a] #s     // нашли шарик - записали его в общий массив на своё место
                  set #x1 #x1 + #sosed
                  set #x2 #x2 + #sosed
                  break
               end_if  
            end_for
         end_for
         set #x1 %crds[1 1] + 10
         set #x2 #x1 + #sosed
         set #y1 #y1 + #sosed  
         set #y2 #y2 + #sosed
      end_for
   end_if
   save_array %pole c:\images6\pole.txt    // записали в файл получившийся массив.
end_script



Пробовал сегодня скрипт, так и не начал он у меня работать. В файл pole.txt ни одной строки не записало.

Автор: xolost 9.1.2013, 0:52

Цитата(veiron @ 8.1.2013, 23:17) *

Пробовал сегодня скрипт, так и не начал он у меня работать. В файл pole.txt ни одной строки не записало.


Пути верные? сделай пути такие же как у меня.
картники шариков и рамки правильно нарезал? покажи как вышло.

Автор: veiron 9.1.2013, 0:55

Цитата(xolost @ 9.1.2013, 1:52) *

Пути верные? сделай пути такие же как у меня.
картники шариков и рамки правильно нарезал? покажи как вышло.

Пути и такие указывал и изменял. А нарезать, не нарезал. Я твои в папку кинул. Я когда с одного компа на другой переношу, только пути исправляю, а картинки не перескриниваю.

Автор: xolost 9.1.2013, 3:02

Цитата(veiron @ 9.1.2013, 1:55) *

Пути и такие указывал и изменял. А нарезать, не нарезал. Я твои в папку кинул. Я когда с одного компа на другой переношу, только пути исправляю, а картинки не перескриниваю.

Ну, показать можешь как ты их нарезал? по инструкции которой я описал или нет

Автор: чебуратор 2 16.1.2013, 20:57

Цитата(xolost @ 9.1.2013, 3:02) *

Ну, показать можешь как ты их нарезал? по инструкции которой я описал или нет

)))))))))))))) ну вы нахимичили тут вариантов не много а проще бой делать через ману а этот ход только на случай удачного хода)))))))))))))) я с монстрами воюю уже с месяц на автомате

Автор: xolost 16.1.2013, 22:15

Цитата(чебуратор 2 @ 16.1.2013, 21:57) *

)))))))))))))) ну вы нахимичили тут вариантов не много а проще бой делать через ману а этот ход только на случай удачного хода)))))))))))))) я с монстрами воюю уже с месяц на автомате


Сделать тупое Если рядом есть, то жмем - легко.
Тот скрип для сбора всех данных в один массив, т.е. созданное поле. И вот далее нужно писать логику на полный просчет всех вариантов и выбирать самый лучший.

Автор: veiron 16.1.2013, 22:24

Цитата(xolost @ 16.1.2013, 23:15) *

Сделать тупое Если рядом есть, то жмем - легко.

Не всем и это сделать легко))

Автор: чебуратор 2 16.1.2013, 23:40

Цитата(veiron @ 16.1.2013, 22:24) *

Не всем и это сделать легко))

нет самый лучший пока не выбирает сначала ищет на 5 их 40 потом 4 ходит 1 попавшуюся их 120 вроде
если нет ищет 3 их 232

Автор: veiron 16.1.2013, 23:55

Цитата(чебуратор 2 @ 17.1.2013, 0:40) *

нет самый лучший пока не выбирает сначала ищет на 5 их 40 потом 4 ходит 1 попавшуюся их 120 вроде
если нет ищет 3 их 232

Дело ясное,что дело темное. Я попробовал сделать ф.имеджем ищет 2 потом обкликивает вокруг этих 2,если нашел двигаем, правда с этого ни чего не получилось. Потому и написал,что не всем легко это сделать.

Автор: veiron 17.1.2013, 16:28

Цитата(veiron @ 17.1.2013, 0:55) *

Дело ясное,что дело темное. Я попробовал сделать ф.имеджем ищет 2 потом обкликивает вокруг этих 2,если нашел двигаем, правда с этого ни чего не получилось. Потому и написал,что не всем легко это сделать.

Программа которая ищет совпадения по цвету оказывается уже есть в нете)) остается совсем малое что бы пилот ее запускал и по ее подсказкам передвигал шарики.

Автор: DarkMaster 17.1.2013, 16:41

Неее. Писать надо все на пилоте. Чем больше костылей делаешь, тем больше шанс, что что-то отвалится. Да и тут полная свобода действий и логики. При должном желании можно написать очень умного бота. В шахматы и то выигрывают, а тут...

Автор: veiron 17.1.2013, 16:48

Цитата(DarkMaster @ 17.1.2013, 17:41) *

Неее. Писать надо все на пилоте. Чем больше костылей делаешь, тем больше шанс, что что-то отвалится. Да и тут полная свобода действий и логики. При должном желании можно написать очень умного бота. В шахматы и то выигрывают, а тут...

Я с Вами полностью согласен. Нужно на пилоте писать. А, что делать тем кто не может его написать. Для меня проще указать еще один хэндл и добавить ф.имедж, чем написать скрипт, который я уже сколько пытаюсь, так и ни чего не вышло. А так я бы с удовольствием в пилот скрипт поставил и играл.

Автор: BSW_rama 29.1.2013, 16:04

ха, да это же клон "линий"... таже байда над чем я щас и работаю. скрип предельно прост (пример для моего случая "какой-то там часовщик"

Код

:a
set #c 0
// задание нулевой точки отсчёта
set #d 161      
set #e 161
// определение смещения каждого элемента для максимального значения в команде for
set #f #e + 54 * 8
set #g #d + 54 * 5
for #b #e #f 54
for #a #d #g 54
set #a1 #a + 54
set #a2 #a + 108
set #a3 #a + 162
// проверка одной из комбинаций
if  #a, #b 3315756 13369223 and #a1, #b 3315756 13369223 and #a3, #b 3315756 13369223
left #a3, #b
left #a2, #b
end_if
// проверка другой комбинации
if  #a, #b 3315756 13369223 and #a2, #b 3315756 13369223 and #a3, #b 3315756 13369223
left #a, #b
left #a1, #b
end_if
end_for
end_for
goto a
end_script



это только 2 комбинации одного типа изображения, а их может быть для линий из трёх предметов порядка 20 штук... и если бы пилот на каждую строчку тратил 1 мс, то всё было бы нормально, но пилот тратит на каждую команду if примерно 0,1 сек, из-за чего скрипт проходит поле 9х9 за 20 сек. а это капец как долго. я запускал 8 пилотов, каждый сканировал 3-5 комбинации, причём парно, и то только 1 тип изображеня, в результате за 2 минуты пилот делал 3-8 своих хода, всё остальное приходилось кликать мне... да небольшая помощ была. вобщем вопрос упирается в быстродействие пилота.

Автор: DarkMaster 29.1.2013, 16:27

Цитата
if примерно 0,1 сек

30 проверок в секунду вполне реально даже с linedelay больше нуля и в реальных условиях.
Цитата
из-за чего скрипт проходит поле 9х9 за 20 сек

Скрипт так долго работает потому, что вы микроскопом гвозди забиваете. Финдимдж вполне успешно может искать подобные сигнатуры. Так же можно использовать финдколор.
Цитата
я запускал 8 пилотов, каждый сканировал 3-5 комбинации,

Если у вас не 40 ядер, то вы делали ерунду. Пилот при linedelay 0 полностью загружает одно ядро одной вкладкой.
Цитата
запускал 8 пилотов

Есть вкладки. Зачем извращаться с 8 пилотами? От этого только проблем будет больше.
Цитата
вопрос упирается в быстродействие пилота

Есть действительно задачи для которых не хватает быстродействия. Вот только это совсем другие масштабы. Например искать врагов и контролить отдачу оружия в стрелялке будет сложновато. Вот только с вашим случаем это не имеет ничего общего даже близко. Вы даже на 10% не использовали возможности обработки. На практике я еще не встречался с случаем, когда не смог бы реализовать идею из-за проблем с производительностью после ввода финдимиджа и финдколора.

Автор: FREEON 16.5.2018, 18:11

Извиняюсь за вопрос но как можно объявить переменные координат относительно картинки более простым способом? Хочу немного облегчить работу так как через какой-то период приходиться снимать новые координаты так как меню смещается

Код

//Сперва ищем картинку(меню) которое меняется в вероятной области смещения:
set #toch findimage (343, 230 373, 431 (D:\_UOPilot\Image\botn\toch.bmp) %crds 2 80)
if #toch > 0
    set %a [1] (%crds[1 1] + 100) (%crds[1 2] + 100)       // Задаем координаты точек относительно картинки(левого верхнего угла)
    set %a [2] (%crds[1 1] + 200) (%crds[1 2] + 100)
    set %a [3] (%crds[1 1] + 300) (%crds[1 2] + 185)
    //и другие
else
    Msg Переменные не заданы :((
end_if

Можно ли так сделать или нужно прописывать Х Y отдельно? Как сделать проще

При такой структуре построения координат:
Цитата
set %a [1] (%crds[1 1] + 100) (%crds[1 2] + 100)

выдает в лог:
Цитата
(351 + 100) (378 + 100)

А на строке действия выдвет ошибку синтаксиса.Тоесть механизм частично работает....теретически если сложить то что в скобках и будет X и Y. Вопрос в том почэму нельзя прописать структуру одной строкой ведь set %a [1] 451 478 он читает как координаты и проблем нет, а то что в скобках не считает...
Забавно если прописываю:
Цитата
set %a [1 1] [1 2] (%crds[1 1] + 100) (%crds[1 2] + 100)

то в лог выбивает вот это
Цитата
1 2] (351 + 100) (378 + 100) [1 2]
и делает клик в левый левый верхний угол окна, но не картинку и не в точку смещени...Интересно чо он там счытает tongue.gif dry.gif

Автор: FREEON 16.5.2018, 22:19

Чо-то не получаеться уже пробовал и работать как с массивом и в виде числовых переменных прописывать в различных вариациях не выходит объединить в одну строку, что бы не расписывать для каждого смещения. sad.gif

Автор: cirus 17.5.2018, 1:50

А причём тут небеса...

код
Код
log clear
log mode compact

set %crds [1 1] 351  // координаты от findimage
set %crds [1 2] 378

init_arr %deltaX 100 200 300 666  // смещения по X
init_arr %deltaY 100 100 185 555  // смещения по Y

for #i 1 size(%deltaX)
    set #a %crds [1 1] + %deltaX [#i]
    set #b %crds [1 2] + %deltaY [#i]
    set %a [#i] #a #b
end_for

for #i 1 size(%a)
    log %a [#i]
end_for
end_script

Автор: FREEON 17.5.2018, 2:12

Цитата(cirus @ 17.5.2018, 1:50) *

А причём тут небеса...
код
Код
log clear
log mode compact

set %crds [1 1] 351  // координаты от findimage
set %crds [1 2] 378

init_arr %deltaX 100 200 300 666  // смещения по X
init_arr %deltaY 100 100 185 555  // смещения по Y

for #i 1 size(%deltaX)
    set #a %crds [1 1] + %deltaX [#i]
    set #b %crds [1 2] + %deltaY [#i]
    set %a [#i] #a #b
end_for

for #i 1 size(%a)
    log %a [#i]
end_for
end_script


Да просто смотрел что они подобную тему мусолят ток исчут картинку от картинки. Вот и хотел спросить, как прописать с минимальным количеством строк что бы не расписывать координаты и сумму для каждой несколькими переменными.

Автор: FREEON 17.5.2018, 2:28

Вот есче вопрос столкнулся с такой проблемой...Я конечно решил ее... Но можно ли как-то переиначить привязку пилота не через Ctrl+A. А через другую комбинацию. Просто было нужно надежным сделать код быстрого выделения текста, а всякие комбинации шифтов, контролов стрелок, аппов, хоуми и прочих не срабатывала а просто перебирала почтовые ящики. Двойным кликом также не срабатывало т.к. текст выделялся фрагментами. А через left и бакспэйс иногда косяки давала(не полностью дотирала).
Я решил это путем нажатием через Kleft и зажимом Ctrl+A. В моем случае помогло так окно какое выскакивает для поля ввода данных имеет такой же hendl как и основное(одно окно, вкладка). Но так на будущее стало интересно как можно еще выделить текст пилотом, мож какие фишки есть, или переназначить горячие клавиши для пилота и выделения текста?

Автор: cirus 17.5.2018, 2:51

Цитата
можно ли как-то переиначить привязку пилота не через Ctrl+A.

Вкладка 'Ещё', кнопка 'Edit HotKeys', ставьте галку перед Set work window, меняйте Ctrl+A на нужное сочетание.

Автор: FREEON 17.5.2018, 14:35

Все нормуль обкатал. Летает покамись стабильно smile.gif

Код

For #i 1 16
    //...
    log ВХОД в %name [#i]
    set #toch findimage (343, 230 373, 431 (D:\_UOPilot\Image\botn\toch.bmp) %crds 2 80)
    //координаты серверов 26-23
    init_arr %deltaX 510 140 320 510  // смещения по X s26  s25  s24  s23
    init_arr %deltaY 190 250 250 250  // смещения по Y s26  s25  s24  s23
    for #j 1 size(%deltaX)
        set #a %crds [1 1] + %deltaX [#j]
        set #b %crds [1 2] + %deltaY [#j]
        set %a [#j] #a #b
    end_for
    for #j 1 size(%a)
        log %a [#j]
        log %s [#j]
        left %a [#j]
        wait 2s
        gosub ZAHOD
        set logging save D:\_UOPilot\Scripts\OtchetSBOR.txt  // пишем весь лог в файл после действий на сервере
    end_for
    //координаты серверов 22-19
    init_arr %deltaX1 140 320 510 140  // смещения по X s22  s21  s20  s19
    init_arr %deltaY1 190 190 190 250  // смещения по Y s22  s21  s20  s19
    for #j 1 size(%deltaX1)
        set #a %crds [1 1] + %deltaX1 [#j]
        set #b %crds [1 2] + %deltaY1 [#j]
        set %b [#j] #a #b
    end_for
    for #j 1 size(%b)
        log %b [#j]
        log %s1 [#j]
        left %b [#j]
        //присвоение кординат ползунку
        set #px1 %crds [1 1] + 624  //Ползунок Вверху смещение по X
        set #py1 %crds [1 2] + 162  //Ползунок Вверху смещение по Y
        set %p1 #px1 #py1            //Объявляем массив с X Y
        log %p1 [1]
        set #px2 %crds [1 1] + 624  //Ползунок Внизу смещение по X
        set #py2 %crds [1 2] + 271  //Ползунок Внизу смещение по Y
        set %p2 #px2 #py2            //Объявляем массив с X Y
        log %p2 [1]
        //--
        kleft_down %p1 [1]
        kleft_up %p2 [1]
        wait 2s
        gosub ZAHOD
        set logging save D:\_UOPilot\Scripts\OtchetSBOR.txt  // пишем весь лог в файл после действий на сервере
    end_for
    //...
end_for

А ну есчо можно одну координату X убрать так как прокрутка перпендикулярна
Код

        //присвоение кординат ползунку
        set #px1 %crds [1 1] + 624  //Ползунок Вверху смещение по X
        set #py1 %crds [1 2] + 162  //Ползунок Вверху смещение по Y
        set %p1 #px1 #py1           //Объявляем массив с X Y
        log %p1 [1]
        set #py2 %crds [1 2] + 271  //Ползунок Внизу смещение по Y
        set %p2 #px1 #py2           //Объявляем массив с X Y
        log %p2 [1]
        //--
        kleft_down %p1 [1]
        kleft_up %p2 [1]

На одну строчку короче получыца laugh.gif

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)