Помощь - Поиск - Пользователи - Календарь
Полная версия: Научить пилот логике в игре Небеса
UoKit.com Форумы > Кликер > UO Pilot
Страницы: 1, 2, 3, 4, 5
veiron
Подскажите(скрипт за меня писать не прошу, сам буду пробовать сделать), можно как то заставить пилот соображать, что и как передвинуть и какие действия ему надо задать.
Изображение
Как его научить, что бы он если видит 2 желтых, а рядом еще 1, то он бы взял и подвинул 1 желтый к двум. или два зеленых и 1 есть рядом, он бы подвинул его. Координаты не задашь, они постоянно в разных местах, все варианты тоже прощитать не возможно.
DarkMaster
Видимо переезжаем сюда.
Основных варианта вижу два.
Первый:
1) Находим изображение элемента.
2) Относительно найденного изображения задаем координаты второму финдимиджу. В полезных советах есть пример клика со смезением - смысл тот же самый.
3) Если нашли, то ищем третий элемент со смещением относительно второго(тут необходимо будет сделать исключение на самый первый элемент.
Второй:
1) Находим все картинки, получаем поноценный массив из типов изображений.
2) В найденном массиве сличаем элементы.

Второй вариант будет тормознутый на первом этапе поиска, однако затем он покажет намного превосходящую производительность.
veiron
Цитата(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
Цитата
x второй картинки %crds[3 3]

цифирки массива не понимаете зачем нужны smile.gif
Это координаты переменной в массиве. Вы двигаетесь по диагонали.
А смещение всегда и будет фиксированное. Зачем оно нужно динамическое в данном случае?
veiron
Цитата(DarkMaster @ 3.1.2013, 0:30) *

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


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

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

А потому что не разобрались что за циферки и движитесь по диагонали.
veiron
Цитата(DarkMaster @ 3.1.2013, 1:19) *

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


С этим я разобрался. кликнул с одной картинки в 3 разных места. в принципе длинный скрипт если на поле всего одна картинка с 2 шариками вместе находится я уже более мение придумал. а вот если на поле их акажется 2, тогда что пилот в массив запишет, первую найденную или 2 или вообще запутается и выдаст ошибку.
DarkMaster
а это как раз недавний спор про финдимидж, 1 и -1. Внимательно прочитайте синтаксис - там указывается количество найденных картинок и каким образом они будут расположены в массиве.
xolost
Цитата(DarkMaster @ 3.1.2013, 1:29) *

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

tongue.gif

Простите...
veiron
Цитата(DarkMaster @ 3.1.2013, 1:29) *

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


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

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

tongue.gif

Простите...

Во время зашел))
xolost
Цитата(veiron @ 3.1.2013, 1:38) *

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

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

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

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

Цитата
tongue.gif

Простите...

-1 все равно не правильно)
veiron
Цитата(xolost @ 3.1.2013, 1:47) *

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

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

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

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

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

Кстати я наверно все же делал полноценный массив со всеми изображениями. Но это несколько сложнее, т.к. придется на начальном этапе из всех найденных разных изображений клеить единый массив с элементами в правильном порядке. По второму варианту. Просто имея такой массив дальшейшая логика упрощается и занимает мало времени. К тому же за счет уменьшения времени обработки логики можно делать достаточно сложные вычисления.
veiron
Цитата(DarkMaster @ 3.1.2013, 1:56) *

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

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

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

Таким образом у нас будет найдена пара. Затем по тому же самому алгоритму мы сможем найти еще один шарик, который нужно сдвинуть. Хочу обратить внимание, что если шарики будут расположены вот так:
X0X
0X
То придется прорабатывать более слжный алгоритм, что передвинуть центральный шарик.
veiron
Цитата(DarkMaster @ 3.1.2013, 2:36) *

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

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

Об этом я даже НЕ мечтаю. мне бы собрать те которые рядом стоят)
DarkMaster
Тут вам пригодится for, size(чтобы задать максимальное значение for), дальше берете элемент из первого массива и сравниваете с каждым элементов второго массива.
veiron
Цитата(DarkMaster @ 3.1.2013, 2:52) *

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

C for я уже сталкивался, а size мне вот это надо:
Цитата
'set size (%arr <x> <y>)'
DarkMaster
Отадаленно узнаю знакомые черты)
Тут пропущенна переменная которой присваивается значение. В таком виде будет уничтожен массив, если не ошибаюсь, хотя откуда тогда тут взялись <x><y> не понятно. Вобщем или пропустили или лишнего добавили, в зависимости от того, чего хотели.
veiron
Цитата(DarkMaster @ 3.1.2013, 3:12) *

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


Это я с Вики стащил)) Там еще, что то есть, но я там не понял ни чего, вот и выбрал самое простое)
DarkMaster
Я оказался почти прав) Убрав <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
Цитата(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
Цитата
set %q [7 5] 0)

А этого вам делать и не надо. С какой целью вы задаете размер массива? Вам его узнать надо, а не задать. Накидайте себе любой тестовый массивчик, посмотрите что возвращается. Пример кстати очень неплохой, показывает все грани, но над ним надо думать.
veiron
Цитата(DarkMaster @ 3.1.2013, 3:43) *

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

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

только не могу понять, что мне это дало, координат ведь тут нет. И вот, что интересно, в каком месте картинка не находится, эти цифры не меняются.
DarkMaster
Цитата
msg size (%q) - вот так в вашем случае

Вас интересует только этот момент. Он вернет количество найденных изображений.
veiron
Цитата(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
дык потому, что вы ручками задаете элемент массива в 7 строке. Соответсвенно у вас и размер массива 7 показывает.
veiron
Цитата(DarkMaster @ 3.1.2013, 12:02) *

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

А я и смотрю, что на какое число я 7 не заменю, такое мне и показывает. Заменил 7 на n, показывает 1,хотя их 3 .Так на вики так написано, вот и я так пишу, я верю тому, что там написано. А про то, как самому не задавать, там нету.
veiron
попробовал так:
Код
 
set %q [1 8]
msg size (%q ) // найдено изображений

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

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

Ну логику я вам уже писал. Фор, сравниваете каждую координату с каждой предыдущего поиска.
veiron
Цитата(DarkMaster @ 3.1.2013, 13:30) *

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

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

Так у меня же нет координат, у меня есть только количество картинок, найденных на поле?
DarkMaster
А в массиве финдимиджа что возвращается?
veiron
Цитата(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
Цитата
%q , указана область поиска координаты всего поля.

ничего подобного. там координаты найденных изображений. вы же сами по ним кликали.
veiron
Цитата(DarkMaster @ 3.1.2013, 14:11) *

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


После 2 часов проб и ошибок, научился кликать во все найденные изображения. А как командой фор сравнить, что возле 2 шариков есть похожий 1 шарик
veiron
Почему так получается, найдено три изображения, все прекрасно находится и кликается по ним. Но только стоит хотя бы одно из них перекрыть чем нибудь и все сразу выдает ошибку
Код
set - (21): Символ не распознан (pos:1)
veiron
Цитата(veiron @ 3.1.2013, 17:38) *

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


С этим тоже разобрался. Но с команде FOR ни как ни выходит. Не могу сообразить и на форуме ни чего не нашел, как к с его помощью к 2 шарам найти и подставить еще 1
DarkMaster
показывай, что делал с фором.
veiron
Цитата(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
Цитата
For #i #q 5 10 1

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

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

ну а смысл уловил верно.
veiron
Цитата(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
почему в фор единицы то? Вдумайтесь в механизм. Напишите для каждой единицы, почему вы считаете, что там должна быть единица. Скорее всего пока пишите, все поймете сами. Для сравнения массивов необходимо не только перебирать, но и сравнивать результаты. if в руки и вперед, результаты устраивающие пишите в новый массив.
xolost
Арррр...
Бросил все свои дела и занялся этой задачкой.
На столько вот она меня заинтриговала.

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

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

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


P.S. на скрипт сбора всех элементов в один массив уходит 171 мс (В моем случае). Интересно узнать сколько в ваших случаях получается.
DarkMaster
Цитата
Вероятно из-за конвертации в гиф текущей картинки, все - абсолютно все ячейки очень конкретно отличаются друг от друга! ! !

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

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

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

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

Если вопрос я понял верно, то, разумеется всё поле. Т.е. получается массив с 36 ячейками как на картинке.
Но что-то мне подсказывает, что неверно я его понял...
xolost
Цитата(DarkMaster @ 2.1.2013, 22:21) *

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


Хм... это какая-то функция специальная?
veiron
Цитата(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
Пардон за оффтоп: это вы хотите сделать алгоритм автоматической игры для "Небеса"?
veiron
Цитата(Zeleax @ 4.1.2013, 10:52) *

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

Да, автоматическое ведение боя
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.