Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Puzzle, Пазл, складная картинка, мозаика.
FREEON
сообщение 24.2.2019, 9:18
Сообщение #1


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 18.346
Возраст: 25



Игра в которой требуется составить мозаику из множества фрагментов рисунка различной формы.
У нас есть поле состоящее из 16 элементов мы знаем где они должны располагаться:
Прикрепленное изображение
Нам нужно проверять позиции (от 1 до 16) на соответствия расположения на поле. Если плитки совпадают то мы переходим к проверке позиции следующего элемента. Если плитка не совпадает то мы передвигаем ее в нужную позицию:
Прикрепленное изображение
Перемещать плитки можно от клетки к клетки(вверх вниз влево вправо) не перепрыгивая через нее.
Пример для теста скрипта(запустить Javascript Puzzle.html):
Прикрепленный файл  Puzzle_Test.zip ( 412,96 килобайт ) Кол-во скачиваний: 181

P.S. В примере можно картинку таскать на любую позицию, нам так делать нельзя.

Сообщение отредактировал FREEON - 24.2.2019, 16:25
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 24.2.2019, 15:18
Сообщение #2


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 18.346
Возраст: 25



Вариант1(ищем шаблоны из папки и собираем пазл)
Можно ли как-то одну картинку из памяти разбить на области(сохранить элементы и затем делать поиск)?
Код

set linedelay 0                         //Установить задержку между строками в 0 мс.
log clear                               //Очистить лог
log mode compact                        //отключить лишнюю инфу лога
log open 1 630 200 100                  //*открыть лог в координатах x=1 y=1 и установить размер окна 200х150 пикселей
set $path "D:\_UOPilot\newimage\Puzzle" //*вставить путь к папке с картинками Викторины начальный этап
dir (%image $path *.png*)               //поиск шаблона для сбора пазла
log В папке найдено: size(%image) шаблонов
for #i 1 size(%image)                   //цикл для поиска шаблона
    set #v findimage(8, 8 509, 509 (%image [#i 1]) %a)   //область Поля поиска шаблона
    //сканируем часть поля и часть картинки для определения № шаблона
    if  #v > 0                          //если шаблон найден
        //???взять из картинки 16 изображений по сетке 4x4
        //записать их в массив запомнив их истинное(верное) положение и координаты
        wait 100
        left 235, 238                   //делаем клик для запуска игры(разбивки пазла на рандомные куски)
        //set #pazl 0                   //переменная для подсчёта правильного положения плитак пазла
        //while #pazl < 16              //выполняем цикл пока все точки не совпадут
        while_not = 16                  //пока не совподают все части пазла, ищем их
            for                         //ищем 1ю часть пазла и проверяем ее с истинным положением
                if                      //если положение верное
                                        //переходим к проверке следующей части пазла
                else
                                        //находим путь и перемещаем ее в нужную область
                end_if
            end_for
        end_while
        log Пазл собрали
    else
        log Не смог найти шаблон
    end_if
end_for
end_script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 24.2.2019, 15:52
Сообщение #3


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 24.2.2019, 17:55
Сообщение #4


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Тут вообще не нужны картинки. Можно использовать тот же принцип что и в '2048' тут https://forum.uokit.com/index.php?s=&sh...st&p=431246.
При запуске появляется оригинальная картинка. Ищем на ней findcolor'ом все цвета (0-16777215) с шагом 100 по X и Y. Получим массив из 16 точек, т. к. картинка 4*4. Когда появится пазл, останется лишь найти эти цвета и расставить плитки по порядку.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 24.2.2019, 19:28
Сообщение #5


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



код
Код
// сделать привязку
// запускать скрипт когда открыта оригинальная картинка, а не сам пазл
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
            kleft_down %b[1 1] %b[1 2]      // зажать левую кнопку мыши
            wait 200
            set #ii #i - 1
            set #x #startX + mod(#ii 4) * #stepX  // координата X
            set #y #startY + #ii / 4 * #stepY    // координата Y
            move  #x #y  // переместить курсор
            wait 200
            kleft_up #x #y   // отпустить левую кнопку мыши
            wait 200
        end_if
    end_for
end_if
showwindow windowhandle
end_script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 24.2.2019, 19:53
Сообщение #6


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 18.346
Возраст: 25



Цитата(cirus @ 24.2.2019, 19:28) *

Код

set #ii #i - 1
set #x #startX + mod(#ii 4) * #stepX  // координата X
set #y #startY + #ii / 4 * #stepY    // координата Y


Я так понимаю идет расчет координат для перетаскивания. Но можно ли подробнее разжевать что куда идет?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.2.2019, 20:12
Сообщение #7


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



Цитата

Я так понимаю идет расчет координат для перетаскивания. Но можно ли подробнее разжевать что куда идет?

Сразу предупреждаю - это НЕ наезд, не "читайте маны", "сам дурак" и прочее) Это совет. Здесь не так много кода, но он не самый простой ну просто потому, что вот такой алгоритм. Это не криво написано и т.д. Объяснять такие мелкие и чуть запутанные куски бывает очень сложно ввиду того, что объяснение будет длинее всего этого кода и понять его будет только сложнее. Просто попроубйте вникнуть и прокрутить пару циклов в голове. Это очень полезно и для понимания и для тренировки и для прогресса, как программиста/скриптера. Код нужно прокручивать в голове (IMG:style_emoticons/default/wink.gif)

Сообщение отредактировал DarkMaster - 24.2.2019, 20:13


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 24.2.2019, 20:27
Сообщение #8


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Код
log clear
log mode compact
for #i 0 15
    set #x mod (#i 4)
    set #y #i / 4
    log #i    [#x #y]
end_for
end_script

Только учитывайте что в пилоте индексация массивов с 1, а не 0.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 24.2.2019, 20:29
Сообщение #9


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 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 снизу
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 24.2.2019, 21:51
Сообщение #10


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
А как реализовать фишку если нет возможности перетаскивать сразу в нужную точку

код
Код
// сделать привязку
// запускать скрипт когда открыта оригинальная картинка, а не сам пазл
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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 24.2.2019, 22:05
Сообщение #11


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 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 мы там сканили цыфры но не понятно какой адрес у нее в массиве например что бы написать правила для их сложения или перемещения
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 24.2.2019, 22:32
Сообщение #12


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
обратиться к адресу(координаты цвет)

Код
%a[1 1] - координата X1     %a[1 2] - координата Y1     %a[1 3] - цвет
%a[2 1] - координата X2     %a[2 2] - координата Y2     %a[2 3] - цвет
и т.д.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 25.2.2019, 2:00
Сообщение #13


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 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
Прикрепленное изображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 25.2.2019, 2:15
Сообщение #14


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
происходит смещение пикселей.

В этом пазле или другом?
Можно вместо findcolor использовать get color, будет медленнее, но можно учитывать смещение для каждой следующей проверки цвета.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 25.2.2019, 2:47
Сообщение #15


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 18.346
Возраст: 25



Цитата(cirus @ 25.2.2019, 2:15) *

В этом пазле или другом?
Можно вместо findcolor использовать get color, будет медленнее, но можно учитывать смещение для каждой следующей проверки цвета.

К скрипту вопросов нет работает хорошо тестил не раз. Но в моем случае картинка она не обрезается, а просто делится на 16 частей и между ними как между тортом намазывается раствор (прибавляются два пикселя черных) а лишняя часть обрезается. В итоге картинки равных размеров но со смещением пикселей.
Прикрепленное изображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 25.2.2019, 3:12
Сообщение #16


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Вместо:
Код
set #b findcolor (#startX #startY #endX #endY #stepX #stepY (%a[#i 3]) %b 2 1)  // поиск цвета

get color
Разница лишь в том, что findcolor за раз проверит 16 точек, но с фиксированным шагом, а get color'ом придётся проверять точки отдельно, но шаг можно менять при каждой проверке.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 2.3.2019, 23:53
Сообщение #17


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 3.3.2019, 0:06
Сообщение #18


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
но так должен выглядеть код со смещением

Нет конечно. Синтаксис get color посмотрите.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 3.3.2019, 0:21
Сообщение #19


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1317
Пользователь №: 18.346
Возраст: 25



Цитата(cirus @ 3.3.2019, 0:06) *

Нет конечно. Синтаксис get color посмотрите.

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

init_arr %a [1 3] //получаем цвет
set #x #startX + 406
set #y #startY + 406
get color #b
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 3.3.2019, 0:48
Сообщение #20


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Цитата
мы знаем цвет и нам нужно найти его координаты

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

2 страниц V  1 2 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 19.4.2024, 14:08
Designed by Nickostyle