|
Puzzle, Пазл, складная картинка, мозаика. |
|
|
FREEON |
24.2.2019, 15:52
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1318
Пользователь №: 18.346
Возраст: 25
|
Вариант 2(сами сохраняем шаблон и затем ищем по ему)Как записать условие(цикл) для проверки сохранённых позиций изображения с текущими? Код set linedelay 0 //Установить задержку между строками в 0 мс. log clear //Очистить лог log mode compact //отключить лишнюю инфу лога log open 1 630 200 100 //*открыть лог в координатах x=1 y=1 и установить размер окна 200х150 пикселей
set #v findimage(8, 8 509, 509 (%image [#i 1]) %a) //область Поля поиска шаблона частей set %a1 GetImage (50, 20 55, 25) //запоминаем шаблон и кооодинаты пазла в позиции 1-1 изображение 5х5 пикселей //log %a1 [1 1] - адрес в памяти //log %a1 [1 2] - ширина изображения //log %a1 [1 3] - высота изображения //log %a1 [1 4] - длина строки в байтах set %a2 GetImage (150, 20 155, 25) //запоминаем шаблон и кооодинаты пазла в позиции 1-2 set %a3 GetImage (250, 20 255, 25) set %a4 GetImage (350, 20 355, 25) set %a5 GetImage (50, 120 55, 125) set %a6 GetImage (150, 120 155, 125) set %a7 GetImage (250, 120 255, 125) set %a8 GetImage (350, 120 355, 125) set %a9 GetImage (50, 220 55, 225) set %a10 GetImage (150, 220 155, 225) set %a11 GetImage (250, 220 255, 225) set %a12 GetImage (350, 320 355, 325) set %a13 GetImage (50, 320 55, 325) set %a14 GetImage (150, 320 155, 325) set %a15 GetImage (250, 320 255, 325) set %a16 GetImage (350, 320 355, 325) //запоминаем шаблон и кооодинаты пазла в позиции 4-4
wait 100 left 235, 238 //делаем клик для запуска игры(разбивки пазла на рандомные куски)
while_not ??? = 16 // Условие, пока не совподают все части пазла, ищем их for //проверяем части пазла по очереди на соответствие с истинным положением if координаты а1 = a1 текущие??? // плитка находится в нужных координатах то курим бамбук log Пишем что все хорошо //переходим к проверке следующей части пазла else //ищем путь домой и перемещаем ее в нужную область end_if end_for end_while log Пазл собрали end_script
|
|
|
|
DarkMaster |
24.2.2019, 20:12
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27722
Пользователь №: 11.279
|
Цитата Я так понимаю идет расчет координат для перетаскивания. Но можно ли подробнее разжевать что куда идет?
Сразу предупреждаю - это НЕ наезд, не "читайте маны", "сам дурак" и прочее) Это совет. Здесь не так много кода, но он не самый простой ну просто потому, что вот такой алгоритм. Это не криво написано и т.д. Объяснять такие мелкие и чуть запутанные куски бывает очень сложно ввиду того, что объяснение будет длинее всего этого кода и понять его будет только сложнее. Просто попроубйте вникнуть и прокрутить пару циклов в голове. Это очень полезно и для понимания и для тренировки и для прогресса, как программиста/скриптера. Код нужно прокручивать в голове (IMG: style_emoticons/default/wink.gif) Сообщение отредактировал DarkMaster - 24.2.2019, 20:13
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
FREEON |
24.2.2019, 20:29
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1318
Пользователь №: 18.346
Возраст: 25
|
Цитата(DarkMaster @ 24.2.2019, 20:12) Сразу предупреждаю - это НЕ наезд, не "читайте маны", "сам дурак" и прочее) Это совет. Здесь не так много кода, но он не самый простой ну просто потому, что вот такой алгоритм. Это не криво написано и т.д. Объяснять такие мелкие и чуть запутанные куски бывает очень сложно ввиду того, что объяснение будет длинее всего этого кода и понять его будет только сложнее. Просто попроубйте вникнуть и прокрутить пару циклов в голове. Это очень полезно и для понимания и для тренировки и для прогресса, как программиста/скриптера. Код нужно прокручивать в голове (IMG: style_emoticons/default/wink.gif) Лано я прымерно там понимаю чо к чему за исключением mod и #ii. А как реализовать фишку если нет возможности перетаскивать сразу в нужную точку, а можно лишь делать ход(несколько ходов) шагом в #step 100 пикселей, можно ли прикрутить универсальную формулу? Конечно вижу хитрость, паузить скрипт и в ручную перегонять туда...но хотелось бы без ручек (IMG: style_emoticons/default/rolleyes.gif) Ну заглядывая наперед что бы не мешать собраные плитки ставить в рамки ограничивать область перемещения...к примеру когда работаем с плитками #i = 1-4 можем ходить по всему полю(4х4), работая с плитками 5-8 можем передвигаться по радиусу 3х4(верхняя область в запрете), с 9-11 можем двигаться по р. 2х4 и плитками 12-16 по радиусу 1х4 снизу
|
|
|
|
FREEON |
24.2.2019, 22:05
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1318
Пользователь №: 18.346
Возраст: 25
|
Цитата(cirus @ 24.2.2019, 21:51) код
Код // сделать привязку // запускать скрипт когда открыта оригинальная картинка, а не сам пазл set #startX 50 // координата X (любая точка в пределах левой верхней картинки пазла) set #startY 120 // координата Y (любая точка в пределах левой верхней картинки пазла) set #stepX 100 // шаг по Y set #stepY 100 // шаг по Y
log clear log mode compact showwindow minimize windowhandle set #endX #startX + #stepX * 4 - 1 set #endY #startY + #stepY * 4 - 1
set #a findcolor (#startX #startY #endX #endY #stepX #stepY (0-16777215) %a) // поиск hint #a if #a > 0 kleft #startX #startY // клик по картинке чтобы начать собирать wait 2000 for #i 1 15 // собираем set #b findcolor (#startX #startY #endX #endY #stepX #stepY (%a[#i 3]) %b 2 1) // поиск цвета if #b > 0 set #ii #i - 1 set #x mod(#ii 4) set #y #ii / 4 set #x2 (%b[1 1] - #startX) / #stepX set #y2 (%b[1 2] - #startY) / #stepY
if #x2 > #x while #x2 > #x set #x3 #startX + #x2 * #stepX set #y3 #startY + #y2 * #stepY kleft_down #x3 #y3 wait 100 set #x2 #x2 - 1 set #x3 #startX + #x2 * #stepX set #y3 #startY + #y2 * #stepY move #x3 #y3 wait 100 kleft_up #x3 #y3 wait 100 end_while else while #x2 < #x set #x3 #startX + #x2 * #stepX set #y3 #startY + #y2 * #stepY kleft_down #x3 #y3 wait 100 set #x2 #x2 + 1 set #x3 #startX + #x2 * #stepX set #y3 #startY + #y2 * #stepY move #x3 #y3 wait 100 kleft_up #x3 #y3 wait 100 end_while end_if
if #y2 > #y while #y2 > #y set #x3 #startX + #x2 * #stepX set #y3 #startY + #y2 * #stepY kleft_down #x3 #y3 wait 100 set #y2 #y2 - 1 set #x3 #startX + #x2 * #stepX set #y3 #startY + #y2 * #stepY move #x3 #y3 wait 100 kleft_up #x3 #y3 wait 100 end_while else while #y2 < #y set #x3 #startX + #x2 * #stepX set #y3 #startY + #y2 * #stepY kleft_down #x3 #y3 wait 100 set #y2 #y2 + 1 set #x3 #startX + #x2 * #stepX set #y3 #startY + #y2 * #stepY move #x3 #y3 wait 100 kleft_up #x3 #y3 wait 100 end_while end_if
end_if end_for end_if showwindow windowhandle end_script Офигенно! Ваапшчэ шикарно!!!Благодарю (IMG: style_emoticons/default/smile.gif) Но у мну есть ещё вопрос а как из массива findcolor извлечь ResultArray или обратиться к адресу(координаты цвет) или как в 2048 мы там сканили цыфры но не понятно какой адрес у нее в массиве например что бы написать правила для их сложения или перемещения
|
|
|
|
FREEON |
25.2.2019, 2:00
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1318
Пользователь №: 18.346
Возраст: 25
|
Скрипт работает хорошо, но в моем случае, когда пазл рассыпается происходит смещение пикселей. Например XY исходная точка(и.т.) конечная точка(к.т.): 1-1: и.т. 410, 210 >>> к.т. 410, 210 1-2: и.т. 510, 210 >>> к.т. 512, 210 1-3: и.т. 610, 210 >>> к.т. 614, 210 1-4: и.т. 710, 210 >>> к.т. 716, 210 ------------------------------------------ 2-1: и.т. 410, 310 >>> к.т. 410, 312 2-2: и.т. 510, 310 >>> к.т. 512, 312 2-3: и.т. 610, 310 >>> к.т. 614, 312 2-4: и.т. 710, 310 >>> к.т. 716, 312 ------------------------------------------ 4-4: и.т. 710, 510 >>> к.т. 716, 516 то есть происходит смещение на +2 пикселя с каждой новой плиткой для set #b
|
|
|
|
FREEON |
2.3.2019, 23:53
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1318
Пользователь №: 18.346
Возраст: 25
|
Цитата(cirus @ 25.2.2019, 3:12) Вместо: Код set #b findcolor (#startX #startY #endX #endY #stepX #stepY (%a[#i 3]) %b 2 1) // поиск цвета get color Разница лишь в том, что findcolor за раз проверит 16 точек, но с фиксированным шагом, а get color'ом придётся проверять точки отдельно, но шаг можно менять при каждой проверке. Нет возможности затестить так как событие недоступно(раз в неделю), но так должен выглядеть код со смещением? Код get color #b (#startX #startY #endX #endY #stepX #stepY (%a[#i 3]) %b 2 1) // поиск цвета set #x %b [2 1] + 2 // прибавляем к координате X размер рамки по X set #y %b [2 2] // прибавляем к координате Y размер рамки по Y, если смещение 0 можно не писать set #x %b [16 1] + 6 // прибавляем к координате X размер рамки по X set #y %b [16 2] + 6 // прибавляем к координате Y размер рамки по Y
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|