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

2 страниц V < 1 2  
Ответить в эту темуОткрыть новую тему
> приоритет, findimage
cskull
сообщение 29.11.2016, 8:29
Сообщение #21


**

Neophyte
Сообщений: 38
Регистрация: 22.10.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.158



Цитата(DarkMaster @ 29.11.2016, 0:33) *

Если будет желание, почитайте http://hosting.vspu.ac.ru/~chul/dijkstra/goto/goto.htm . Мне показалось достаточно интересным и невероятно актуальным даже спустя 50 лет.


мне далеко до всех перечисленных мэтров програмирования )) для меня и goto вершина (IMG:style_emoticons/default/rolleyes.gif) но постараюсь чему-нить научится
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cskull
сообщение 29.11.2016, 8:50
Сообщение #22


**

Neophyte
Сообщений: 38
Регистрация: 22.10.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.158



Цитата(DarkMaster @ 29.11.2016, 0:55) *

Код
set $a 0
while $a = 0 // пока картинка не найдена
    for #i 1 #size 1 // цикл для поиска картинок
        set $a findimage (1154, 36 1359, 242 (C:\Users\Пользователь\Desktop\рисунки для пилота\EXIT2.bmp) %arr 2 90 20 5)

после этих строк вствьте
log exit2 $a

Так же хочу обратить внимание, что непосредственно "exit" нигде не фигурирует, только "exit2".

результаты в логе :
1.при отсутствии картинки
2.при наличии картинки
8:41:07 19 (измерение15.txt, 95): exit2 0
8:46:59 19 (измерение15.txt, 95): exit2 98

Ну да , первый EXIT я криво обрезала и просто создавая новую картинку дописала "2" , а так то это картинка выхода
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cskull
сообщение 29.11.2016, 8:50
Сообщение #23


**

Neophyte
Сообщений: 38
Регистрация: 22.10.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.158



Цитата(DarkMaster @ 29.11.2016, 0:55) *

Код
set $a 0
while $a = 0 // пока картинка не найдена
    for #i 1 #size 1 // цикл для поиска картинок
        set $a findimage (1154, 36 1359, 242 (C:\Users\Пользователь\Desktop\рисунки для пилота\EXIT2.bmp) %arr 2 90 20 5)

после этих строк вствьте
log exit2 $a

Так же хочу обратить внимание, что непосредственно "exit" нигде не фигурирует, только "exit2".

результаты в логе :
1.при отсутствии картинки
2.при наличии картинки
8:41:07 19 (измерение15.txt, 95): exit2 0
8:46:59 19 (измерение15.txt, 95): exit2 98

Ну да , первый EXIT я криво обрезала и просто создавая новую картинку дописала "2" , а так то это картинка выхода
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cskull
сообщение 29.11.2016, 13:26
Сообщение #24


**

Neophyte
Сообщений: 38
Регистрация: 22.10.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.158



Цитата(cirus @ 29.11.2016, 2:41) *

как-то так
Код
set $path  "C:\Users\Пользователь\Desktop\рисунки для пилота\"      // путь к картинкам
set %image [1] bashya                          // имя изображения
set %image [2] bashnya_c_prava
set %image [3] bashnya_v_nizy
set %image [4] bashnya_v_verxy
set %image [5] bashnya_c_leva
set %image [6] bashnya_niz_pravo
set %image [7] verx_levo_ygol
set %image [8] basnya_verx_pravo

set #size size(%image)                          // всего картинок
hint Всего картинок #size

:metka

set $a 0
while $a = 0             // пока картинка не найдена
    set #flag 0               // флаг что картинки найдены
    for #i 1 #size 1                     // цикл для поиска картинок
        set $a findimage (1147, 32  1363, 249  ($path%image[#i].bmp) %arr 2 90 20 5 )
        if  $a > 0
            set #x %arr [1 1] + 7
            set #y %arr [1 2] + 7
            break
        end_if
        set #flag 1       // картинки не найдены
    end_for
    if  #flag = 1          // если ни одна из картинок не найдена
                           // ищем картинку EXIT2
        set #b findimage (1154, 36 1359, 242 (C:\Users\Пользователь\Desktop\рисунки для пилота\EXIT2.bmp) %arr1 2 90 20 5)
        if  #b > 0                               // если найдена EXIT2
            for #i 1 #size 1                     // снова перебираем картинки
                set $a findimage (1147, 32  1363, 249  ($path%image[#i].bmp) %arr 2 90 20 5 )
                if  $a > 0
                    set #flag 0               // картинка найдена
                    break                      // прервать поиск
                end_if
            end_for

            if  #flag = 1         // если картинки не найдены
                log Картинка Exit2 найдена
                // тут действия которые нужно сделать если картинка EXIT2 найдена, а другие нет
            else                  // иначе
                goto metka        // переход к метке, т.е. к началу скрипта
            end_if
        end_if
    end_if
end_while

while 1 = 1      // бесконечный цикл
    set $p findcolor(1154, 36 1359, 242 56831  %arr 2) // PERS

    if  $p > 0
        set #x1 %arr [1 1]
        set #y1 %arr [1 2]
        wait  1s

        if  #x1 < #x
            Send_down {right}
            wait 200
            Send_up {right}
            wait 1s
        end_if

        if  #x1 > #x
            Send_down {left}
            wait 200
            Send_up {left}
            wait 1s
        end_if

        if  #y1 < #y
            Send_down {down}
            wait 200
            Send_up {down}
            wait 1s
        end_if

        if  #y1 > #y
            Send_down {up}
            wait 200
            Send_up {up}
            wait 1s
        end_if

        set #x2 #x - #x1             // разница координат #x и #x1
        set #x2 abs(#x2)             // модуль числа, чтобы разница не была отрицательной
        set #y2 #y - #y1             // разница координат #y и #y1
        set #y2 abs(#y2)            // модуль числа
        set #const 7                  // подобрать нужное значение
        if  #x2 < #const and #y2 < #const     // проверка что перс у нужной точки
            break
        end_if
        if  #x = #x1 and #y = #y1    // проверка дошёл перс до нужных координат или нет
            break   // если дошёл, выход из цикла
        end_if
    end_if
end_while

wait 3000                        // ждать 3 секунды
goto metka

В 43 строку дописать нужные действия.


дописала в 43ю и в 27ю , получилось следущее
kod

set $path "C:\Users\Пользователь\Desktop\рисунки для пилота\" // путь к картинкам
set %image [1] bashya // имя изображения
set %image [2] bashnya_c_prava
set %image [3] bashnya_v_nizy
set %image [4] bashnya_v_verxy
set %image [5] bashnya_c_leva
set %image [6] bashnya_niz_pravo
set %image [7] verx_levo_ygol
set %image [8] basnya_verx_pravo

set #size size(%image) // всего картинок
hint Всего картинок #size

:metka

set $a 0
while $a = 0 // пока картинка не найдена
set #flag 0 // флаг что картинки найдены
for #i 1 #size 1 // цикл для поиска картинок
set $a findimage (1147, 32 1363, 249 ($path%image[#i].bmp) %arr 2 90 20 5 )
if $a > 0
set #x %arr [1 1] + 7
set #y %arr [1 2] + 7
break
end_if
set #flag 1 // картинки не найдены
end_for
if $a = 0
goto metka1
wait 1s
end_if
end_while

while 1 = 1 // бесконечный цикл
set $p findcolor(1154, 36 1359, 242 56831 %arr 2) // PERS

if $p > 0
set #x1 %arr [1 1]
set #y1 %arr [1 2]
wait 1s

if #x1 < #x
Send_down {right}
wait 200
Send_up {right}
wait 1s
end_if

if #x1 > #x
Send_down {left}
wait 200
Send_up {left}
wait 1s
end_if

if #y1 < #y
Send_down {down}
wait 200
Send_up {down}
wait 1s
end_if

if #y1 > #y
Send_down {up}
wait 200
Send_up {up}
wait 1s
end_if

set #x2 #x - #x1 // разница координат #x и #x1
set #x2 abs(#x2) // модуль числа, чтобы разница не была отрицательной
set #y2 #y - #y1 // разница координат #y и #y1
set #y2 abs(#y2) // модуль числа
set #const 7 // подобрать нужное значение
if #x2 < #const and #y2 < #const // проверка что перс у нужной точки
break
end_if
if #x = #x1 and #y = #y1 // проверка дошёл перс до нужных координат или нет
// координаты, скорее всего, не совпадут, лучше сравнивать разницу координат с какой-то константой
break // если дошёл, выход из цикла
end_if
end_if

:metka1
if #flag = 1 // если ни одна из картинок не найдена
// ищем картинку EXIT2
set #b findimage (1154, 36 1359, 242 (C:\Users\Пользователь\Desktop\рисунки для пилота\EXIT2.bmp) %arr1 2 90 20 5)
if #b > 0 // если найдена EXIT2
for #i 1 #size 1 // снова перебираем картинки
set $a findimage (1147, 32 1363, 249 ($path%image[#i].bmp) %arr 2 90 20 5 )
if $a > 0
set #flag 0 // картинка найдена
break // прервать поиск
end_if
end_for

if #flag = 1 // если картинки не найдены
log Картинка Exit2 найдена
left 634, 46
wait 6s
move 634, 46
wait 3s
move 641, 92
wait 3s
Send_down {down}
wait 800
Send_up {down}
wait 1500
else // иначе
goto metka // переход к метке, т.е. к началу скрипта
end_if
end_if
end_if
end_while

while 1 = 1 // бесконечный цикл
set $p findcolor(1154, 36 1359, 242 56831 %arr 2) // PERS

if $p > 0
set #x1 %arr [1 1]
set #y1 %arr [1 2]
wait 1s

if #x1 < #x
Send_down {right}
wait 200
Send_up {right}
wait 1s
end_if

if #x1 > #x
Send_down {left}
wait 200
Send_up {left}
wait 1s
end_if

if #y1 < #y
Send_down {down}
wait 200
Send_up {down}
wait 1s
end_if

if #y1 > #y
Send_down {up}
wait 200
Send_up {up}
wait 1s
end_if

set #x2 #x - #x1 // разница координат #x и #x1
set #x2 abs(#x2) // модуль числа, чтобы разница не была отрицательной
set #y2 #y - #y1 // разница координат #y и #y1
set #y2 abs(#y2) // модуль числа
set #const 7 // подобрать нужное значение
if #x2 < #const and #y2 < #const // проверка что перс у нужной точки
break
end_if
if #x = #x1 and #y = #y1 // проверка дошёл перс до нужных координат или нет
break // если дошёл, выход из цикла
end_if
end_if
end_while

wait 3000 // ждать 3 секунды
goto metka

но снова вылазит ошибка в логе 13:20:49 19 (, 97): Картинка Exit2 найдена
13:21:08 19 (, 69): set - (69): Символ не распознан (pos:1 '#x - 1323')
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 29.11.2016, 14:01
Сообщение #25


**********

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



Цитата
и в 27ю , получилось следущее

И зачем что-то менять в 27 строке, вы убираете нужный кусок кода, после чего, как и следовало ожидать, получаете ошибку.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cskull
сообщение 29.11.2016, 14:29
Сообщение #26


**

Neophyte
Сообщений: 38
Регистрация: 22.10.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.158



Цитата(cirus @ 29.11.2016, 14:01) *

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

ну я не убираю , я вставляла действия для рисунков 1-8 ,а то ж потерялись в процессе...
а ошибка вообще не там где что-либо менялось ,а в стравнении координад
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 29.11.2016, 14:47
Сообщение #27


**********

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



Цитата
я вставляла действия для рисунков 1-8

Они же и так есть, зачем их по 2 раза писать.
Цитата
а ошибка вообще не там где что-либо менялось ,а в стравнении координад

Ошибка из-за того что картинки не нашлись, т. е. переменная #x не существует, а т. к. вы убрали часть кода и не дописали действия, для того случая когда нашлась картинка exit, то получили ошибку.
Возьмите мой код и допишите после этой строки: log Картинка Exit2 найдена:
Код
goto metka1

В metka1 пишите что делать, когда нашлась картинка exit.

Вообще, надо весь код через gosub делать. http://uopilot.tati.pro/index.php?title=Gosub 2й пример.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cskull
сообщение 29.11.2016, 18:37
Сообщение #28


**

Neophyte
Сообщений: 38
Регистрация: 22.10.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.158



Цитата(cirus @ 29.11.2016, 14:47) *


В metka1 пишите что делать, когда нашлась картинка exit.

Вообще, надо весь код через gosub делать. http://uopilot.tati.pro/index.php?title=Gosub 2й пример.

сделала , но ничего не работает (( вообще (( картинки ищет ,но не производит с ними ни единого действия
kod

set $path "C:\Users\Пользователь\Desktop\рисунки для пилота\" // путь к картинкам
set %image [1] bashya // имя изображения
set %image [2] bashnya_c_prava
set %image [3] bashnya_v_nizy
set %image [4] bashnya_v_verxy
set %image [5] bashnya_c_leva
set %image [6] bashnya_niz_pravo
set %image [7] verx_levo_ygol
set %image [8] basnya_verx_pravo

set #size size(%image) // всего картинок
hint Всего картинок #size

:metka

set $a 0
while $a = 0 // пока картинка не найдена
set #flag 0 // флаг что картинки найдены
for #i 1 #size 1 // цикл для поиска картинок
set $a findimage (1147, 32 1363, 249 ($path%image[#i].bmp) %arr 2 90 20 5 )
if $a > 0
set #x %arr [1 1] + 7
set #y %arr [1 2] + 7
break
end_if
set #flag 1 // картинки не найдены
end_for


if #flag = 1 // если ни одна из картинок не найдена
// ищем картинку EXIT2
set #b findimage (1154, 36 1359, 242 (C:\Users\Пользователь\Desktop\рисунки для пилота\EXIT2.bmp) %arr1 2 90 20 5)
if #b > 0 // если найдена EXIT2
for #i 1 #size 1 // снова перебираем картинки
set $a findimage (1147, 32 1363, 249 ($path%image[#i].bmp) %arr 2 90 20 5 )
if $a > 0
set #flag 0 // картинка найдена
break // прервать поиск
end_if
end_for

if #flag = 1 // если картинки не найдены
log Картинка Exit2 найдена
goto metka1
else // иначе
goto metka // переход к метке, т.е. к началу скрипта
end_if
end_if
end_if
end_while

while 1 = 1 // бесконечный цикл
set $p findcolor(1154, 36 1359, 242 56831 %arr 2) // PERS

if $p > 0
set #x1 %arr [1 1]
set #y1 %arr [1 2]
wait 1s

if #x1 < #x
Send_down {right}
wait 200
Send_up {right}
wait 1s
end_if

if #x1 > #x
Send_down {left}
wait 200
Send_up {left}
wait 1s
end_if

if #y1 < #y
Send_down {down}
wait 200
Send_up {down}
wait 1s
end_if

if #y1 > #y
Send_down {up}
wait 200
Send_up {up}
wait 1s
end_if

set #x2 #x - #x1 // разница координат #x и #x1
set #x2 abs(#x2) // модуль числа, чтобы разница не была отрицательной
set #y2 #y - #y1 // разница координат #y и #y1
set #y2 abs(#y2) // модуль числа
set #const 7 // подобрать нужное значение
if #x2 < #const and #y2 < #const // проверка что перс у нужной точки
break
end_if
if #x = #x1 and #y = #y1 // проверка дошёл перс до нужных координат или нет
break // если дошёл, выход из цикла
end_if
end_if
end_while

wait 3000 // ждать 3 секунды
goto metka

: metka1
set $a 0
while $a = 0 // пока картинка не найдена
for #i 1 #size 1 // цикл для поиска картинок
set $a findimage (1154, 36 1359, 242 (C:\Users\Пользователь\Desktop\рисунки для пилота\EXIT2.bmp) %arr 2 90 20 5)
if $a > 0
set #x %arr [1 1] + 7
set #y %arr [1 2] + 6
break
end_if
end_for
if $a = 0
left 634, 46
wait 6s
move 634, 46
wait 3s
move 641, 92
wait 3s
Send_down {down}
wait 800
Send_up {down}
wait 1500
goto metka //--------------------------------------------
end_if
end_while

while 1 = 1 // бесконечный цикл
set $p findcolor(1154, 36 1359, 242 56831 %arr 2) // PERS

if $p > 0
set #x1 %arr [1 1]
set #y1 %arr [1 2]
wait 1s

if #x1 < #x
Send_down {right}
wait 200
Send_up {right}
wait 1s
end_if

if #x1 > #x
Send_down {left}
wait 200
Send_up {left}
wait 1s
end_if

if #y1 < #y
Send_down {down}
wait 200
Send_up {down}
wait 1s
end_if

if #y1 > #y
Send_down {up}
wait 200
Send_up {up}
wait 1s
end_if

set #x2 #x - #x1 // разница координат #x и #x1
set #x2 abs(#x2) // модуль числа, чтобы разница не была отрицательной
set #y2 #y - #y1 // разница координат #y и #y1
set #y2 abs(#y2) // модуль числа
set #const 10 // подобрать нужное значение
if #x2 < #const and #y2 < #const // проверка что перс у нужной точки
break
end_if
if #x = #x1 and #y = #y1 // проверка дошёл перс до нужных координат или нет
// координаты, скорее всего, не совпадут, лучше сравнивать разницу координат с какой-то константой
break // если дошёл, выход из цикла
end_if
end_if
end_while

wait 6000 // ждать 3 секунды
goto metka

попробую всё переписать сначала с gotsub , хотя не понимаю зачем ,ведь у меня по сути всего 2 подпрограммы в исходнике ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 29.11.2016, 18:53
Сообщение #29


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21061
Пользователь №: 16.156



Цитата

попробую всё переписать сначала с gotsub , хотя не понимаю зачем ,ведь у меня по сути всего 2 подпрограммы в исходнике ?


Не важно. Там 2, тут 3, а психика уже покалечена. гото - пережиток прошлого, причем довольно вредный. Легче один раз научиться использовать подпрограммы (именно их : gosub, call) чем все время искать ошибки. К тому же, код становится приятнее читать.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cskull
сообщение 29.11.2016, 19:38
Сообщение #30


**

Neophyte
Сообщений: 38
Регистрация: 22.10.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.158



Цитата(Cockney @ 29.11.2016, 18:53) *

а психика уже покалечена.

(IMG:style_emoticons/default/biggrin.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cskull
сообщение 29.11.2016, 20:33
Сообщение #31


**

Neophyte
Сообщений: 38
Регистрация: 22.10.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.158



Цитата(cirus @ 29.11.2016, 14:47) *



Вообще, надо весь код через gosub делать. http://uopilot.tati.pro/index.php?title=Gosub 2й пример.

переписала с gotsub ,но там в середине кода 2 goto , ибо я перенаправляю с середины подпрограммы ...мож как-то иначе надо ?
исходник с gosub


set $path "C:\Users\Пользователь\Desktop\рисунки для пилота\" // путь к картинкам
set %image [1] bashya // имя изображения
set %image [2] bashnya_c_prava // имя второго изображения
set %image [3] bashnya_v_nizy // третьего
set %image [4] bashnya_v_verxy
set %image [5] bashnya_c_leva
set %image [6] bashnya_niz_pravo
set %image [7] verx_levo_ygol
set %image [8] basnya_verx_pravo
set %image [9] башня_низ_лево

set #size size(%image) // всего картинок
hint Всего картинок #size

while 1 = 1
gosub poisk_bashni
gosub poisk_exit

end_while

:poisk_bashni

set $a 0
while $a = 0 // пока картинка не найдена
for #i 1 #size 1 // цикл для поиска картинок
set $a findimage (1147, 32 1363, 249 ($path%image[#i].bmp) %arr 2 90 20 5 )
if $a > 0
set #x %arr [1 1] + 7
set #y %arr [1 2] + 7
break
end_if
end_for
if $a = 0
goto poisk_exit
wait 1s
end_if
end_while

while 1 = 1 // бесконечный цикл
set $p findcolor(1154, 36 1359, 242 56831 %arr 2) // PERS

if $p > 0
set #x1 %arr [1 1]
set #y1 %arr [1 2]
wait 1s

if #x1 < #x
Send_down {right}
wait 200
Send_up {right}
wait 1s
end_if

if #x1 > #x
Send_down {left}
wait 200
Send_up {left}
wait 1s
end_if

if #y1 < #y
Send_down {down}
wait 200
Send_up {down}
wait 1s
end_if

if #y1 > #y
Send_down {up}
wait 200
Send_up {up}
wait 1s
end_if

set #x2 #x - #x1 // разница координат #x и #x1
set #x2 abs(#x2) // модуль числа, чтобы разница не была отрицательной
set #y2 #y - #y1 // разница координат #y и #y1
set #y2 abs(#y2) // модуль числа
set #const 7 // подобрать нужное значение
if #x2 < #const and #y2 < #const // проверка что перс у нужной точки
break
end_if
if #x = #x1 and #y = #y1 // проверка дошёл перс до нужных координат или нет
// координаты, скорее всего, не совпадут, лучше сравнивать разницу координат с какой-то константой
break // если дошёл, выход из цикла
end_if
end_if
end_while

wait 3000 // ждать 3 секунды
return



:poisk_exit

set $a 0
while $a = 0 // пока картинка не найдена
for #i 1 #size 1 // цикл для поиска картинок
set $a findimage (1154, 36 1359, 242 (C:\Users\Пользователь\Desktop\рисунки для пилота\EXIT2.bmp) %arr 2 90 20 5)
if $a > 0
set #x %arr [1 1] + 7
set #y %arr [1 2] + 6
break
end_if
end_for
if $a = 0
left 634, 46
wait 6s
move 634, 46
wait 3s
move 641, 92
wait 3s
Send_down {down}
wait 800
Send_up {down}
wait 1500
goto poisk_bashni //--------------------------------------------
end_if
end_while

while 1 = 1 // бесконечный цикл
set $p findcolor(1154, 36 1359, 242 56831 %arr 2) // PERS

if $p > 0
set #x1 %arr [1 1]
set #y1 %arr [1 2]
wait 1s

if #x1 < #x
Send_down {right}
wait 200
Send_up {right}
wait 1s
end_if

if #x1 > #x
Send_down {left}
wait 200
Send_up {left}
wait 1s
end_if

if #y1 < #y
Send_down {down}
wait 200
Send_up {down}
wait 1s
end_if

if #y1 > #y
Send_down {up}
wait 200
Send_up {up}
wait 1s
end_if

set #x2 #x - #x1 // разница координат #x и #x1
set #x2 abs(#x2) // модуль числа, чтобы разница не была отрицательной
set #y2 #y - #y1 // разница координат #y и #y1
set #y2 abs(#y2) // модуль числа
set #const 10 // подобрать нужное значение
if #x2 < #const and #y2 < #const // проверка что перс у нужной точки
break
end_if
if #x = #x1 and #y = #y1 // проверка дошёл перс до нужных координат или нет
// координаты, скорее всего, не совпадут, лучше сравнивать разницу координат с какой-то константой
break // если дошёл, выход из цикла
end_if
end_if
end_while

wait 6000 // ждать 3 секунды
return


может я ранее невнятно выразила идею...
Задача следующая - если на экране одновременно существуют картинки с патча и картинка EXIT2 , то мне надо заблокировать метку :poisk_exit и сделать так чтоб работала только подпрограмма с меткой :poisk_bashni
Но findimage не умеет как findcolor выполнить нечто подобное if 1142, 121 1380722 and 1129, 225 3291971
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 30.11.2016, 2:29
Сообщение #32


***********

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



Цитата
переписала с gotsub ,но там в середине кода 2 goto , ибо я перенаправляю с середины подпрограммы ...мож как-то иначе надо ?

представьте, что гото просто не существует. И никогда не пишите его (IMG:style_emoticons/default/smile.gif) Конкретно в данном случае можно просто заменить на return.
Цитата
Задача следующая - если на экране одновременно существуют картинки с патча и картинка EXIT2 ,

В таком случае делаем:
Код
set $exit findimage....
if $exit > 0
    какие-то действия при наличии exit
else
    set $patch findimage....
end_if


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


**********

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



Цитата
Но findimage не умеет как findcolor выполнить нечто подобное if 1142, 121 1380722 and 1129, 225 3291971

Код
set #a findimage
set #b findimage
if #a > 0 and #b > 0
    log обе картинки найдены
end_if
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cskull
сообщение 30.11.2016, 19:31
Сообщение #34


**

Neophyte
Сообщений: 38
Регистрация: 22.10.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.158



написала , но не удачно , и от goto не знаю как избавится...
выдаёт ошибку в 103 и 104 строке


set $path "C:\Users\Пользователь\Desktop\рисунки для пилота\" // путь к картинкам
set %image [1] bashya // имя изображения
set %image [2] bashnya_c_prava // имя второго изображения
set %image [3] bashnya_v_nizy // третьего
set %image [4] bashnya_v_verxy
set %image [5] bashnya_c_leva
set %image [6] bashnya_niz_pravo
set %image [7] verx_levo_ygol
set %image [8] basnya_verx_pravo
set %image [9] башня_низ_лево

set #size size(%image) // всего картинок
hint Всего картинок #size

while 1 = 1
gosub poisk_bashni
gosub poisk_exit

end_while

:poisk_bashni

set $a 0
while $a = 0 // пока картинка не найдена
for #i 1 #size 1 // цикл для поиска картинок
set $a findimage (1147, 32 1363, 249 ($path%image[#i].bmp) %arr 2 90 20 5 )
if $a > 0
set #x %arr [1 1] + 7
set #y %arr [1 2] + 7
break
end_if
end_for
if $a = 0
return
wait 1s
end_if
end_while

while 1 = 1 // бесконечный цикл
set $p findcolor(1154, 36 1359, 242 56831 %arr 2) // PERS

if $p > 0
set #x1 %arr [1 1]
set #y1 %arr [1 2]
wait 1s

if #x1 < #x
Send_down {right}
wait 200
Send_up {right}
wait 1s
end_if

if #x1 > #x
Send_down {left}
wait 200
Send_up {left}
wait 1s
end_if

if #y1 < #y
Send_down {down}
wait 200
Send_up {down}
wait 1s
end_if

if #y1 > #y
Send_down {up}
wait 200
Send_up {up}
wait 1s
end_if

set #x2 #x - #x1 // разница координат #x и #x1
set #x2 abs(#x2) // модуль числа, чтобы разница не была отрицательной
set #y2 #y - #y1 // разница координат #y и #y1
set #y2 abs(#y2) // модуль числа
set #const 7 // подобрать нужное значение
if #x2 < #const and #y2 < #const // проверка что перс у нужной точки
break
end_if
if #x = #x1 and #y = #y1 // проверка дошёл перс до нужных координат или нет
// координаты, скорее всего, не совпадут, лучше сравнивать разницу координат с какой-то константой
break // если дошёл, выход из цикла
end_if
end_if
end_while

wait 3000 // ждать 3 секунды
return



:poisk_exit

set $a 0
while $a = 0 // пока картинка не найдена
for #i 1 #size 1 // цикл для поиска картинок
set $a findimage (1154, 36 1359, 242 (C:\Users\Пользователь\Desktop\рисунки для пилота\EXIT2.bmp) %arr 2 90 20 5)
set $b findimage (1147, 32 1363, 249 ($path%image[#i].bmp) %arr 2 90 20 5 )
if $a > 0 and $b = 0
set #x %arr [1 1] + 7
set #y %arr [1 2] + 6
break
end_if
end_for
if $a = 0
left 634, 46
wait 6s
move 634, 46
wait 3s
move 641, 92
wait 3s
Send_down {down}
wait 800
Send_up {down}
wait 1500
return //--------------------------------------------
end_if
end_while

while 1 = 1 // бесконечный цикл
set $p findcolor(1154, 36 1359, 242 56831 %arr 2) // PERS

if $p > 0
set #x1 %arr [1 1]
set #y1 %arr [1 2]
wait 1s

if #x1 < #x
Send_down {right}
wait 200
Send_up {right}
wait 1s
end_if

if #x1 > #x
Send_down {left}
wait 200
Send_up {left}
wait 1s
end_if

if #y1 < #y
Send_down {down}
wait 200
Send_up {down}
wait 1s
end_if

if #y1 > #y
Send_down {up}
wait 200
Send_up {up}
wait 1s
end_if

set #x2 #x - #x1 // разница координат #x и #x1
set #x2 abs(#x2) // модуль числа, чтобы разница не была отрицательной
set #y2 #y - #y1 // разница координат #y и #y1
set #y2 abs(#y2) // модуль числа
set #const 10 // подобрать нужное значение
if #x2 < #const and #y2 < #const // проверка что перс у нужной точки
break
end_if
if #x = #x1 and #y = #y1 // проверка дошёл перс до нужных координат или нет
// координаты, скорее всего, не совпадут, лучше сравнивать разницу координат с какой-то константой
break // если дошёл, выход из цикла
end_if
end_if
end_while

wait 6000 // ждать 3 секунды
return

а этот не выдаёт , но и не блокирует EXIT при наличии картинок 1-9
безполезный


set $path "C:\Users\Пользователь\Desktop\рисунки для пилота\" // путь к картинкам
set %image [1] bashya // имя изображения
set %image [2] bashnya_c_prava // имя второго изображения
set %image [3] bashnya_v_nizy // третьего
set %image [4] bashnya_v_verxy
set %image [5] bashnya_c_leva
set %image [6] bashnya_niz_pravo
set %image [7] verx_levo_ygol
set %image [8] basnya_verx_pravo
set %image [9] башня_низ_лево

set #size size(%image) // всего картинок
hint Всего картинок #size

set $a findimage (1154, 36 1359, 242 (C:\Users\Пользователь\Desktop\рисунки для пилота\EXIT2.bmp) %arr 2 90 20 5)
set $b findimage (1147, 32 1363, 249 ($path%image[#i].bmp) %arr 2 90 20 5 )
if $a > 0 and $b = 0
goto poisk_exit
end_if

set $a findimage (1154, 36 1359, 242 (C:\Users\Пользователь\Desktop\рисунки для пилота\EXIT2.bmp) %arr 2 90 20 5)
set $b findimage (1147, 32 1363, 249 ($path%image[#i].bmp) %arr 2 90 20 5 )
if $a > 0 and $b > 0
goto poisk_bashni
end_if

while 1 = 1
gosub poisk_bashni
gosub poisk_exit

end_while

:poisk_bashni

set $a 0
while $a = 0 // пока картинка не найдена
for #i 1 #size 1 // цикл для поиска картинок
set $a findimage (1147, 32 1363, 249 ($path%image[#i].bmp) %arr 2 90 20 5 )
if $a > 0
set #x %arr [1 1] + 7
set #y %arr [1 2] + 7
break
end_if
end_for
if $a = 0
goto poisk_exit
wait 1s
end_if
end_while

while 1 = 1 // бесконечный цикл
set $p findcolor(1154, 36 1359, 242 56831 %arr 2) // PERS

if $p > 0
set #x1 %arr [1 1]
set #y1 %arr [1 2]
wait 1s

if #x1 < #x
Send_down {right}
wait 200
Send_up {right}
wait 1s
end_if

if #x1 > #x
Send_down {left}
wait 200
Send_up {left}
wait 1s
end_if

if #y1 < #y
Send_down {down}
wait 200
Send_up {down}
wait 1s
end_if

if #y1 > #y
Send_down {up}
wait 200
Send_up {up}
wait 1s
end_if

set #x2 #x - #x1 // разница координат #x и #x1
set #x2 abs(#x2) // модуль числа, чтобы разница не была отрицательной
set #y2 #y - #y1 // разница координат #y и #y1
set #y2 abs(#y2) // модуль числа
set #const 7 // подобрать нужное значение
if #x2 < #const and #y2 < #const // проверка что перс у нужной точки
break
end_if
if #x = #x1 and #y = #y1 // проверка дошёл перс до нужных координат или нет
// координаты, скорее всего, не совпадут, лучше сравнивать разницу координат с какой-то константой
break // если дошёл, выход из цикла
end_if
end_if
end_while

wait 3000 // ждать 3 секунды
return



:poisk_exit

set $a 0
while $a = 0 // пока картинка не найдена
for #i 1 #size 1 // цикл для поиска картинок
set $a findimage (1154, 36 1359, 242 (C:\Users\Пользователь\Desktop\рисунки для пилота\EXIT2.bmp) %arr 2 90 20 5)
if $a > 0
set #x %arr [1 1] + 7
set #y %arr [1 2] + 6
break
end_if
end_for
if $a = 0
left 634, 46
wait 6s
move 634, 46
wait 3s
move 641, 92
wait 3s
Send_down {down}
wait 800
Send_up {down}
wait 1500
goto poisk_bashni //--------------------------------------------
end_if
end_while

while 1 = 1 // бесконечный цикл
set $p findcolor(1154, 36 1359, 242 56831 %arr 2) // PERS

if $p > 0
set #x1 %arr [1 1]
set #y1 %arr [1 2]
wait 1s

if #x1 < #x
Send_down {right}
wait 200
Send_up {right}
wait 1s
end_if

if #x1 > #x
Send_down {left}
wait 200
Send_up {left}
wait 1s
end_if

if #y1 < #y
Send_down {down}
wait 200
Send_up {down}
wait 1s
end_if

if #y1 > #y
Send_down {up}
wait 200
Send_up {up}
wait 1s
end_if

set #x2 #x - #x1 // разница координат #x и #x1
set #x2 abs(#x2) // модуль числа, чтобы разница не была отрицательной
set #y2 #y - #y1 // разница координат #y и #y1
set #y2 abs(#y2) // модуль числа
set #const 10 // подобрать нужное значение
if #x2 < #const and #y2 < #const // проверка что перс у нужной точки
break
end_if
if #x = #x1 and #y = #y1 // проверка дошёл перс до нужных координат или нет
// координаты, скорее всего, не совпадут, лучше сравнивать разницу координат с какой-то константой
break // если дошёл, выход из цикла
end_if
end_if
end_while

wait 6000 // ждать 3 секунды
return
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 1.12.2016, 2:38
Сообщение #35


**********

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



Код
set $a findimage (1154, 36 1359, 242 (C:\Users\Пользователь\Desktop\рисунки для пилота\EXIT2.bmp) %arr 2 90 20 5)
set $b findimage (1147, 32 1363, 249 ($path%image[#i].bmp) %arr 2 90 20 5 )
if $a > 0 and $b = 0
set #x %arr [1 1] + 7
set #y %arr [1 2] + 6

Результаты поиска записываются в один и тот же массив - %arr, по сути перезаписываются.
Используйте разные имена, например: %arr и %arr1 или %arr и %brr.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cskull
сообщение 2.12.2016, 12:49
Сообщение #36


**

Neophyte
Сообщений: 38
Регистрация: 22.10.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.158



Цитата(cirus @ 1.12.2016, 2:38) *

Код
set $a findimage (1154, 36 1359, 242 (C:\Users\Пользователь\Desktop\рисунки для пилота\EXIT2.bmp) %arr 2 90 20 5)
set $b findimage (1147, 32 1363, 249 ($path%image[#i].bmp) %arr 2 90 20 5 )
if $a > 0 and $b = 0
set #x %arr [1 1] + 7
set #y %arr [1 2] + 6

Результаты поиска записываются в один и тот же массив - %arr, по сути перезаписываются.
Используйте разные имена, например: %arr и %arr1 или %arr и %brr.

cпасибо огромное ! вот так стало работать !
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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