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

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

UoKit.com Форумы _ UO Pilot _ Упростить скрипт

Автор: veiron 31.7.2013, 16:52

Цитата
/////////блок 1
if 357, 431 12316912 or 357, 431 11075325 or 357, 431 9566451
set #tx 356 + random (3)
set #ty 426 + random (3)
set #tm 1
left #tx #ty
end_if

/////////блок 15
if 436, 385 7798269 or 436, 385 7798269 or 436, 385 5170675
set #rx 356 + random (3)
set #ry 426 + random (3)
set #rm 1
left #rx #ry
end_if


Скрипт состоит из вот таких 15 ифоф, всего 90 строк. Подскажите, можно его как-то упростить и будет ли он от этого работать быстрее.

Автор: DarkMaster 31.7.2013, 17:05

Цитата
можно его как-то упростить

разве что:
set #rx 356 + random (3)
set #ry 426 + random (3)
set #rm 1
left #rx #ry
будет выглядеть, как gosub, но только при условии, что результат будет перезаписываться каждый раз при новом входе в подпрограмму.

Цитата
будет ли он от этого работать быстрее

слышал, что длинные скрипты работают медленнее, но объемы не те. Подпрограммы по идее чуть замедляют, но там такие цифры, что будешь наносекунды мерить, что лучше.

Автор: veiron 31.7.2013, 17:25

Цитата(DarkMaster @ 31.7.2013, 17:05) *

разве что:
set #rx 356 + random (3)
set #ry 426 + random (3)
set #rm 1
left #rx #ry
будет выглядеть, как gosub, но только при условии, что результат будет перезаписываться каждый раз при новом входе в подпрограмму.
слышал, что длинные скрипты работают медленнее, но объемы не те. Подпрограммы по идее чуть замедляют, но там такие цифры, что будешь наносекунды мерить, что лучше.

А есть ли смысл в gosub ставить, ведь если иф с цветом не найден и так ведь проскакивает быстро или нет ?

Автор: DarkMaster 31.7.2013, 17:48

ты попросил сократить скрипт. Мой вариант из 4 строк делает одну. gosub внутри ифа точно так же (не)вызовется в зависимости от ложности ифа.

Автор: veiron 31.7.2013, 18:36

Цитата(DarkMaster @ 31.7.2013, 17:48) *

ты попросил сократить скрипт. Мой вариант из 4 строк делает одну. gosub внутри ифа точно так же (не)вызовется в зависимости от ложности ифа.

Про gosub я представлял. Я думал можно как то в фор это все оформить.

Автор: DarkMaster 31.7.2013, 19:15

Можно и фором. Но надо подумать есть ли смысл. Можно создать длиннющий массив с цветами и координатами, и фором подставлять их внутрь ифа. Более структурированно - да. Но с чем будет проще общаться при редактировании большой вопрос. Т.е. будет что-то вроде:

Код

set %a [ 1 1 ] x1
set %a [ 1 2 ] y1
set %a [ 1 3 ] c1
set %a [ 2 1 ] x2
set %a [ 2 2 ] y2
set %a [ 2 3 ] c2

for #i 1 size (%a) 1
     if %a [ #i 1 ] %a [ #i 2 ] %a [ #i 3 ]
          set #tx 356 + random (3)
          set #ty 426 + random (3)
          set #tm 1
          left #tx #ty
     end_if
end_for

Тут сейчас еще пробежит Zeleax или Wkight и тыкнут котенка(меня) в то, как правильно объявлять массивы с новым функционалом, а я буду скромно смотреть в пол и объяснять, что больших массивов последнее время я не имел.

Ну и учти этот блок переберет все эти циклы сразу. Т.е. адекватно вызывать все это кусками не получится. Можно менять границы for при входах, но это уже будет изврат. Имхо тогда лучше к gosub. Тут немного тяжело советовать, т.к. варианты реализации чуть разные и они не подойдут для всех случаев, а что именно происходит и каков должен быть результат я же не вижу. Ну или полный скрипт тогда надо.

Автор: veiron 31.7.2013, 19:15

Цитата(DarkMaster @ 31.7.2013, 19:12) *

Можно и фором. Но надо подумать есть ли смысл. Можно создать длиннющий массив с цветами и координатами, и фором подставлять их внутрь ифа. Короче не получится. Более структурированно - да. Но с чем будет проще общаться при редактировании большой вопрос. Т.е. будет что-то вроде:

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

Автор: DarkMaster 31.7.2013, 19:17

Про "короче не получится" я что-то начал писать другое и отвлекся. ) оно получится, но с ограничениями.

Автор: veiron 31.7.2013, 19:23

И вот еще. У меня есть рабочий скрипт во вкладке 1. К примеру все с while их в скрипте 3 разных.

Код
while
скрипт 1
end_while
while
скрипт 2
end_while
while
скрипт 3
end_while


И еще есть вкладка со скриптом 2, которая проверяет на всякие баги сервера. И вот что происходит. Допустим слетел сервер игры в тот момент когда пилот выполняет действие во втором цикле. Вторая вкладка видит, что есть баг и обновляет браузер. Но рабочий скрипт, ведь во втором цикле остался. Можно как-то из второй вкладки переместить действие в первом скрипте?

Автор: DarkMaster 31.7.2013, 19:45

не понял. давайте еще раз, лучше примером про яблочки и зайчиков)

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

Автор: veiron 31.7.2013, 20:13

Код
Вкладка 1  //  основного скрипта
:start
while 1  
  left 1 1
end_while
while 2
  left 2 2
end_while
while 3
  left 3 3
end_while
goto start

Вкладка 2  // проверяем не слетел или завис браузер
while 413, 485 7226929
send f5
wait 10000
end_while


Браузер завис. В тот момент когда пилот выполнял цикл while 2 . Вкладка 2 видя зависание обновляет браузер. И игра после обновления становится на главной странице, где бы не находился персонаж во время зависания. Я так понимаю, надо сделать точки выхода с while или можно как то указать из второй вкладки, что скрипт работает не в том while .

Автор: DarkMaster 31.7.2013, 20:25

Цитата
Я так понимаю, надо сделать точки выхода с while

имено так. Поскольку while спокойно прерывается по goto, то я бы просто сделал goto start, если это начало скрипта. Если это не начало скрипта, то можно все равно выйти по goto, но на мой взгляд это свинство кодинга и от этого надо отходить. В таком случае можно сделать простенькое условие:
Код
set #break 0

while 1  and #break = 0
  left 1 1
end_while

while 1 and #break = 0
       .....
       if видим главную страницу
            set #break 1
       end_if
end_while

while 3 and #break = 0
  left 3 3
end_while

кстати вот от этого можно уйти:
Код
if видим главную страницу
       set #break 1
end_if

Можно просто присваивать значение #break из скрипта, контролирующего браузер. По факту как раз и получим управление из второй вкладки. Я понимаю, что ты бы хотел что-то вроде оператора break.1, но такого пока нет.

Автор: veiron 31.7.2013, 20:35

Цитата(DarkMaster @ 31.7.2013, 20:25) *

кстати вот от этого можно уйти:
Код
if видим главную страницу
       set #break 1
end_if

Можно просто присваивать значение #break из скрипта, контролирующего браузер.

Я с каждого while по goto start выходил, только в игре столько багов, что из 10 строк while становится 30 . Только про присваивать значение из скрипта не понял. И еще вопрос, в игре появились новые мобы, которые как то странно через какое-то время меняют цвет, может 10 раз быть один, а потом уже другой. Не подскажете, если не ифом буду цвет брать, а сделаю поиск через FindImage это избавит от нераспознования мобов.

Автор: DarkMaster 1.8.2013, 10:15

Цитата
Я с каждого while по goto start выходил, только в игре столько багов, что из 10 строк while становится 30 .

Значит ты перешел на новую, правильную стадию скриптописания и стремишься к стабильности. Тут только поздравить могу и посочувствовать. Это самая большая беда для меня до сих пор. Компенсация всех багов у меня определяет до 80% кода...
Цитата
Не подскажете, если не ифом буду цвет брать, а сделаю поиск через FindImage это избавит от нераспознования мобов.

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

Цитата
Только про присваивать значение из скрипта не понял.
Код

// Первый скрипт
set #break 0

while 1  and #break = 0
  left 1 1
end_while

while 1 and #break = 0
  left 2 2
end_while

while 3 and #break = 0
  left 3 3
end_while

// Второй скрипт

Вкладка 2  // проверяем не слетел или завис браузер
while 413, 485 7226929
     send f5
     wait 10000
     set #break.1 1 // УПРАВЛЕНИЕ ПЕРВЫМ СКРИПТОМ
end_while

Автор: veiron 1.8.2013, 18:28

Цитата(DarkMaster @ 1.8.2013, 10:15) *

Компенсация всех багов у меня определяет до 80% кода...

А я думал, что только у меня так))
Цитата
while 1 and #break = 0
set #break.1 1 // УПРАВЛЕНИЕ ПЕРВЫМ СКРИПТОМ

Спасибо, даже и не думал, что так можно сделать. Может еще натолкнете на мысль как выполнить. Есть к примеру точка с цветом 64, 435 12776696, эта точка периодически меняет цвета на другие. И вот иногда браузер, просто тупо виснет и окно браузера становится как будто его заскринили. Чем можно отследить, если цвет не меняется более 5 минут в данной точку, значит выполняем обновление браузера. Понимаю, что надо что то типо таймера сделать, а вот как это будет выглядит даже представить не могу.

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

В полезных советах "детектор движений мышки". Только вместо позиции мышки снимай get color'ом цвет.

Автор: veiron 1.8.2013, 18:59

Цитата(DarkMaster @ 1.8.2013, 18:30) *

В полезных советах "детектор движений мышки". Только вместо позиции мышки снимай get color'ом цвет.

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


P.S разобрался. Спасибо. Как раз то что мне нужно.

Автор: veiron 2.8.2013, 13:11

Код
get color #color 99, 203
set #timerAFK timer + 400000
:start
get color #color 99, 203
if ( 2838386 = #color ) and ( 2838386 = #color )
    if #timerAFK < timer
    set logging #timerAFK > timer
    wait 50
       goto переход
    end_if
else
    set #timerAFK timer + 400000 // ВРЕМЯ ПРОСТОЯ
end_if
goto start

Подскажите, что с кодом не так. Периодически выскакивает ошибка (строка 12, Символ не распознан (pos:1) Вот на этой строке появляется ошибка ---> set #timerAFK timer + 400000 // ВРЕМЯ ПРОСТОЯ.

Автор: WKnight 2.8.2013, 13:49

Цитата
if ( 2838386 = #color ) and ( 2838386 = #color )

Зачем 2 раза одно и тоже проверять?
Цитата
set #timerAFK timer + 400000 // ВРЕМЯ ПРОСТОЯ

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

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

Автор: veiron 2.8.2013, 14:15

Цитата(WKnight @ 2.8.2013, 13:49) *

set #timerAFK timer + 400000 // ВРЕМЯ ПРОСТОЯ

Убрать уберу, а вот про то как разбить на 2 строки я не понял?

Автор: Zeleax 3.8.2013, 8:06

Цитата(veiron @ 2.8.2013, 14:15) *

Убрать уберу, а вот про то как разбить на 2 строки я не понял?

Код
set #mytimer timer
log мой таймер: #mytimer
log AFK: #timerAFK
set #timerAFK #mytimer + 400000 // ВРЕМЯ ПРОСТОЯ

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

Цитата(WKnight @ 2.8.2013, 13:49) *

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

Код
11:36:15 17 (Таймер.txt, 25): Мой таймер: 1221379
11:36:15 17 (Таймер.txt, 26): AFK: 1621192
11:36:15 17 (Таймер.txt, 25): Мой таймер: 1221629
11:36:15 17 (Таймер.txt, 26): AFK: 1621441
11:36:15 17 (Таймер.txt, 25): Мой таймер: 1221909
11:36:15 17 (Таймер.txt, 26): AFK: 1621691
11:36:16 17 (Таймер.txt, 25): Мой таймер: 1222190
11:36:16 17 (Таймер.txt, 26): AFK: 1621987
11:36:16 17 (Таймер.txt, 25): Мой таймер: 1222487
11:36:16 17 (Таймер.txt, 26): AFK: 1622253
11:36:16 17 (Таймер.txt, 27): set - (27): Символ не распознан (pos:1)


Вот, что показывает лог, в когда ошибка.

Автор: Zeleax 5.8.2013, 11:59

хм, странно...

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

Автор: veiron 5.8.2013, 12:20

Цитата(Zeleax @ 5.8.2013, 11:59) *

хм, странно...

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

Код
get color #color 99, 203  //  страница хранителя, справа от кнопки домой.
set #timerAFK timer + 400000
:start
get color #color 99, 203  
if ( 2838386 = #color )
    if #timerAFK < timer
    set logging #timerAFK > timer
    wait 50
       left 436, 833
    end_if
else
set #mytimer timer
log мой таймер: #mytimer
log AFK: #timerAFK
set #timerAFK #mytimer + 400000 // ВРЕМЯ ПРОСТОЯ
    set #timerAFK timer + 400000
end_if
goto start

Автор: Zeleax 5.8.2013, 12:23

в самом низу нужно строчку закомментить (3-ю снизу):
//set #timerAFK timer + 400000

Автор: veiron 5.8.2013, 12:42

Цитата(Zeleax @ 5.8.2013, 12:23) *

в самом низу нужно строчку закомментить (3-ю снизу):
//set #timerAFK timer + 400000

Закомментил,пробую. И еще одна болячка появилась. Вот скрипт:

Код
Left_Down 260 227              // Нажимаем кнопку
Set #t random(5) + 5 // задаем длительность задержки
Wait #t
Left_Up 260 227

Скрипт работает, может работать и час, потом вдруг, тупо пилот виснет на строчке Wait #t. Таблички с ошибкой не появляется. Лечиться только нажатием стоп и заново надо нажимать старт в пилот. Не встречалось вам такое.

Автор: Zeleax 5.8.2013, 12:58

не встречалось.
Попробуйте перед wait #t вставить строку
log #t

Автор: veiron 5.8.2013, 13:01

Цитата(Zeleax @ 5.8.2013, 12:58) *

не встречалось.
Попробуйте перед wait #t вставить строку
log #t

Попробую. После закомментирования строки скрипт работает пока без ошибки. Эту строку можно вообще удалить, она не нужна?

Автор: Zeleax 5.8.2013, 13:35

Цитата(veiron @ 5.8.2013, 13:01) *

Попробую. После закомментирования строки скрипт работает пока без ошибки. Эту строку можно вообще удалить, она не нужна?

да

Автор: veiron 5.8.2013, 13:56

Цитата(Zeleax @ 5.8.2013, 13:35) *

да

Похоже вылечили вы этот скрипт. Уже час работает и ни одной ошибки. Спасибо за помощь.

Автор: Zeleax 5.8.2013, 14:32

Цитата(veiron @ 5.8.2013, 13:56) *

Похоже вылечили вы этот скрипт. Уже час работает и ни одной ошибки. Спасибо за помощь.

smile.gif

Автор: veiron 5.8.2013, 23:54

Похоже рано я обрадовался. Проблема с таймером все таки осталась. И вот что получается. Запускаю только 1 скрипт этого таймера. Все работает отлично. Но как только в другой вкладке запускаю скрипт где есть тоже таймер, не важно что у него другая переменная, через какое-то время выскакивает ошибка. Решил попробовать вот что, взял скрипт этого таймера и поместил в две разные вкладки в пилоте. Запускаю по очереди, все работает, как только запускаю 2 вкладки одновременно через разное время выскакивает ошибка. Если 1 скрипт с таймером, а другой нет, все работает без ошибок. Теперь беру этот скрипт и вставляю его в 8 разных пилотов и происходит чудо, все работает без ошибок. Может подскажите как такое вылечить?

Р.S Проверил на 4 компах и одна и та же проблема.

Автор: DarkMaster 6.8.2013, 6:15

оба скрипта в студию.
вообще этот скрипт у меня работал по нескольку месяцев без глюков 24/7 в паре с огромным количеством таймеров. И все-таки нужен вывод в лог при ошибке.

Автор: veiron 6.8.2013, 6:18

Цитата(DarkMaster @ 6.8.2013, 6:15) *

оба скрипта в студию.
вообще этот скрипт у меня работал по нескольку месяцев без глюков 24/7 в паре с огромным количеством таймеров. И все-таки нужен вывод в лог при ошибке.

Код
get color #color 99, 203  //  страница хранителя, справа от кнопки домой.
set #timerAFK timer + 400000
:start
get color #color 99, 203  
if ( 2838386 = #color )
    if #timerAFK < timer
    set logging #timerAFK > timer
    wait 50
       left 436, 833
    end_if
else
set #mytimer timer
log мой таймер: #mytimer
log AFK: #timerAFK
set #timerAFK #mytimer + 400000 // ВРЕМЯ ПРОСТОЯ
end_if
goto start

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

Автор: DarkMaster 6.8.2013, 6:22

а второй то вместе с которым сбоит?

Автор: veiron 6.8.2013, 6:28

Цитата(DarkMaster @ 6.8.2013, 6:22) *

а второй то вместе с которым сбоит?

Поставте этот, только в разных вкладках пилота.

Автор: DarkMaster 6.8.2013, 7:08

запустил 8 вкладок, задержка 0, пока работает. Нашел очень странный баг:
Копирую твой скрипт, в пилот, в пилоте выделяю скрипт, копирую, запускаю, вставляю в новую вкладу, указатель хода скрипта бегает по незапущному скрипту. Вылечить можно только остановкой и перезапуском ИСХОДНОГО скрипта...

Автор: veiron 6.8.2013, 7:15

Цитата(DarkMaster @ 6.8.2013, 7:08) *
Нашел очень странный баг:
Копирую твой скрипт, в пилот, в пилоте выделяю скрипт, копирую, запускаю, вставляю в новую вкладу, указатель хода скрипта бегает по незапущному скрипту. Вылечить можно только остановкой и перезапуском ИСХОДНОГО скрипта...


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

Цитата(DarkMaster @ 6.8.2013, 7:08) *

запустил 8 вкладок, задержка 0, пока работает.

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

Автор: DarkMaster 6.8.2013, 7:37

пока шуршит

Автор: veiron 6.8.2013, 7:41

Цитата(DarkMaster @ 6.8.2013, 7:37) *

пока шуршит

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

Автор: DarkMaster 6.8.2013, 7:46

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

Автор: veiron 6.8.2013, 7:53

Цитата(DarkMaster @ 6.8.2013, 7:46) *

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

Зато как удобно. всегда под рукой на рабочем столе.

Автор: DarkMaster 6.8.2013, 8:06

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

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

Автор: xolost 6.8.2013, 8:28

Цитата(DarkMaster @ 6.8.2013, 8:08) *

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


Наверное он из той же оперы, что и у меня находилось.
Изменяю что-то в скрипте, сохраняю скрипт, жму даже сохранить настройки пилота. Запускаю. Скрипт работает, но только БЕЗ последних изменений, словно в памяти всё ещё держит старый. И только переоткрытие пилота помогает.

У меня теперь даже паранойя на эту тему. Изменил что-то - сразу закрываю пилот и открываю по новой.
Без понятия от чего он появляется. Но был уже на всех системах на разных компах.

Автор: veiron 6.8.2013, 8:30

Цитата(DarkMaster @ 6.8.2013, 8:06) *

1) В корень диска С запихай много мусорных файлов, перезагрузись. Время загрузки очень сильно увеличится.

Не замечал, у меня диск С 130 гигов, из них занято 90.
Цитата
2) Закинь папку на рабочий стол с фотографиями. Пару гигов, много файлов - время загрузки заметно увеличится.

Все это уже лежит давно на рабочем столе.
Цитата
3) Открой фотографии из папки на рабочем столе стандартным просмотрщиком рисунков, листай фотографии. Каждая фотография будет прогружаться с задержкой.

Так всегда и делаю. вроде нормально открываются.

P.S даже интересно, пойду все с диска С уберу и посмотрю что изменится.

Автор: DarkMaster 6.8.2013, 11:42

Цитата
Не замечал, у меня диск С 130 гигов, из них занято 90.

тут скорее вопрос не в занятости, а именно в количестве файлов в корне. У меня nvidea как-то дровишки туда распаковала и не удалила темпы. Почувствовал при первой же перезагрузке.

Автор: WKnight 6.8.2013, 13:00

Цитата
Изменяю что-то в скрипте, сохраняю скрипт, жму даже сохранить настройки пилота. Запускаю. Скрипт работает, но только БЕЗ последних изменений, словно в памяти всё ещё держит старый.

В новой версии есть такой пункт "Исправил сохранение изменений в скрипте, при добавлении нового скрипта кнопкой "+". "
Очень похоже на описанное.

Автор: xolost 6.8.2013, 13:22

Цитата(WKnight @ 6.8.2013, 14:00) *

В новой версии есть такой пункт "Исправил сохранение изменений в скрипте, при добавлении нового скрипта кнопкой "+". "
Очень похоже на описанное.

Действительно похоже.
Но я пока 2.32 не юзаю, не знаю бывает ли там такое(

Автор: veiron 6.8.2013, 17:11

Цитата(DarkMaster @ 6.8.2013, 11:42) *

тут скорее вопрос не в занятости, а именно в количестве файлов в корне. У меня nvidea как-то дровишки туда распаковала и не удалила темпы. Почувствовал при первой же перезагрузке.

Ради интереса переустановил винду. Изменений сильных не заметил. А вот проблема с пилотом как была так и осталась вылетает ошибка при включении таймера.

Автор: DarkMaster 6.8.2013, 17:40

пилот переместил?

// Можно было не переустанвливать, а просто забить корень С пустыми тхт файлами.

Автор: veiron 6.8.2013, 17:44

Цитата(DarkMaster @ 6.8.2013, 17:40) *

пилот переместил?

Пилот переместил из корня. Запускаю от админа.

Автор: DarkMaster 6.8.2013, 18:44

в смысле из корня? он же на рабочем столе был...

Автор: veiron 6.8.2013, 19:25

Цитата(DarkMaster @ 6.8.2013, 18:44) *

в смысле из корня? он же на рабочем столе был...

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

Автор: DarkMaster 6.8.2013, 19:53

можешь дать скрипт в том виде, в котором он должен работать? можешь в личку. Просто очень сложно что-то советовать по неводомому глюку без кода...

Автор: veiron 6.8.2013, 20:26

Цитата(DarkMaster @ 6.8.2013, 19:53) *

можешь дать скрипт в том виде, в котором он должен работать? можешь в личку. Просто очень сложно что-то советовать по неводомому глюку без кода...

Кинул скрипт в ЛС.

Автор: DarkMaster 7.8.2013, 6:33

старт/стопы скриптов используешь?

Автор: DarkMaster 7.8.2013, 6:56

Камень случайно не атлончик?

Автор: veiron 7.8.2013, 7:00

Цитата(DarkMaster @ 7.8.2013, 6:33) *

старт/стопы скриптов используешь?

Нет не использую.
Цитата
Камень случайно не атлончик?

Intel® Core™ i7-3770

Автор: DarkMaster 7.8.2013, 7:38

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

Автор: veiron 7.8.2013, 7:57

Цитата(DarkMaster @ 7.8.2013, 7:38) *

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

У Вас есть 5 минут глянуть через ТеймВивер как вылетает ошибка

Автор: DarkMaster 7.8.2013, 9:52

реквизиты в пм

Автор: DarkMaster 7.8.2013, 11:50

Вспомнил я тут про свой локальный ад под НГ. https://forum.uokit.com/index.php?showtopic=25243&hl=sto
Та же проблема. Сейчас через удаленку разбирался и нашел очень и очень интересные закономерности. Если сделать вывод ошибок в лог + dev/null, то все проскакивает и бежит дальше. Ошибка сыпится, но скрипт не останавливается. Дальше интереснее. Если врубить log commands, то ошибка вообще не возникает. Т.е. врубаешь отладку - исчезает ошибка. Кнайт, я уже предчувствую как тебе будет весело. Причем хочу напомнить, что у меня эта проблема была аж в 2.17, проблема старая. И там таких прелестей не было, чтобы скрипт продолжил работать при сбоях...

Цитата
Переиграл ты немножечко в линейку))

это не присущее только л2 сокращение.

Автор: veiron 7.8.2013, 12:31

Спасибо огромное DarkMaster, уже час пилот работает и ни одной ошибки.

Автор: DarkMaster 7.8.2013, 16:55

Кнайт ты чиркни, если добавил в список багов. А то не понятно видел ты или нет.

Автор: WKnight 8.8.2013, 11:42

Цитата
лог + dev/null
Добавил.

Автор: veiron 8.8.2013, 17:46

Код

set #q1 0
set #kt 0
:start
for #i 1 #sz
    if %a[#i 1] %a[#i 2] #color
        set #x %a[#i 1] + 41
        set #y %a[#i 2]    
        get color #colorN #x #y  
             if #colorN = #color    
                    if #x #y #color      
                       log НАШЕЛ В  %a[#i 1] %a[#i 2]  #color
                       set #q1 #q1 + 1      
                       set %zhe[#q1 1] %a[#i 1] %a[#i 2]
                       save_array %zhe c:\logs\pravo.txt
             end_if
    end_if
end_for
for #i 1 #sz
     if %a[#i 1] %a[#i 2] #color
         set #x1 %a[#i 1]
        set #y1 %a[#i 2] + 41  
        get color #colorN1 #x1 #y1  
             if #colorN1 = #color    
                 if #x1 #y1 #color    
                      log НАШЕЛ В  %a[#i 1] %a[#i 2]  #color
                     set #kt #kt + 1  
                     set %zhe1[#kt 1] %a[#i 1] %a[#i 2]
                     save_array %zhe1 c:\logs\niz.txt
                 end_if
             end_if          
    end_if
end_for
wait 5s
goto start


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

Автор: DarkMaster 8.8.2013, 18:01

Цитата
get color #colorN1 #x1 #y1
if #colorN1 = #color

if #x1 #y1 #color
Я уже об этом говорил. Дальше пока в логику не вникал.

Автор: veiron 8.8.2013, 18:04

Цитата(DarkMaster @ 8.8.2013, 18:01) *

if #x1 #y1 #color
Я уже об этом говорил. Дальше пока в логику не вникал.

Я помню, почему то, если делаю одной строкой тогда проскакивает в иф другой цвет.

Автор: veiron 8.8.2013, 18:33

Кстати по поводу ошибки в таймере. При добавлении только строчки log commands проблема полностью не исчезает, а только оттягивает время вылета ошибки.

Автор: DarkMaster 8.8.2013, 18:37

какие-то чудеса у тебя творятся. Сделай, как я говорю - ифом, а после ифа сделай гет колор с выводом в лог. Хоть посмотрю на это чудо. Вдруг еще какой-то баг.

Цитата
ИНОГДА файл куда надо записать данные, не перезаписывается, а просто добавляется новые данные.

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

В первом цикле ошибка - три ифа открываются, но только два закрываются.

Цитата
if #colorN1 = #color
if #x1 #y1 #color

можно заменить на:
if #x1 #y1 #color and #colorN1 = #color

не очень понятно откуда берется #sz и каким образом она изменяется в ходе работы скрипта. Так же не очень понятно что в себе содержит массив. Теоретически, если сетка статичная, то можно чуть-чуть сэкономить время на вычислении:
Цитата
set #x1 %a[#i 1]
set #y1 %a[#i 2] + 41

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

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

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

Автор: veiron 8.8.2013, 19:08

Цитата(DarkMaster @ 8.8.2013, 18:37) *
странно... я вообще мечтал о таком функционале, но его вроде так и не сделали. Перед записью проверь размер массива. Возможно он в себе содержит лишние данные.


В начале скрипта стоит:
Код
set size (%a)
init_arr %zhe1 2)
save_array %zhe c:\logs\niz.txt
// Перезаписать файл с пустым массивом, . Запускаю скрипт, все перезаписывается, но иногда не перезаписывается заново, а с прошлого массива остается 1 строчка с координатами. Хотя как я понимаю строка set size (%a) должна очищать массив.


Цитата(DarkMaster @ 8.8.2013, 18:37) *
не очень понятно откуда берется #sz и каким образом она изменяется в ходе работы скрипта. Так же не очень понятно что в себе содержит массив.

Код
set $a1 findcolor (238, 115 489, 374 1 1 (576495) %a 2 -1)

Вот отсюда берется. Массив содержит найденные координаты цвета.
Цитата(DarkMaster @ 8.8.2013, 18:37) *

Если нужны совпадения только с обоих сторон,
то можно вообще одним ифом ограничиться с несколькими условиями через and.
Нужно с 4 сторон. Вообще искать надо с 4 сторон, но если начинаю искать с 4 у меня, если цвет находится в двух соседних клетках, засчитывает 2 раза(слева направо и справа налево). Уже пол года бьюсь над созданием этого скрипта, который будет искать камня одного цвета на поле и соединять их в 3 в ряд и ни чего не выходит. Даже https://forum.uokit.com/index.php?showtopic=25306&hl=%ED%E5%E1%E5%F1%E0 когда то про это создавал.

Автор: DarkMaster 8.8.2013, 19:29

че-нить придумаем.

Автор: veiron 8.8.2013, 19:46

Цитата(DarkMaster @ 8.8.2013, 19:29) *

че-нить придумаем.

Это вы о чем?

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

Проверил, массив был пуст. А произошло вот что, в файле были записаны координаты 424 350, при следующем запуске скрипта, скрипт нашел координаты 301 309 и просто взял и сместил старые координаты на 2 строку, а последние записал 1 строкой.

Автор: veiron 8.8.2013, 20:27

Нашел почему появляется лишняя строчка, только не понял как с этим бороться.

Код
:start
set #q1 0
save_array %zhe c:\logs\zheltie_poisk_2\niz.txt
for #i 1 #sz
    if #x #y #color and #colorN = #color
         set #q1 #q1 + 1      
         set %zhe[#q1 1] %a[#i 1] %a[#i 2]
             save_array %zhe c:\logs\zheltie_poisk_2\zheltie_pravo.txt
    end_if
end_for
pause_script
goto start

Если запускать пилот и в конце цикла после паузы делать стоп, сколько бы я так не делал, что будет прописано в файле, все удалится, после каждого запуска. А вот если я буду просто снимать с паузы, не делая старт/стоп, будет происходить что. первый цикл: нашли 1 координаты и записали в 1 строку, пошли выполнять второй цикл и нашли 2 координаты, теперь уже в файле записано 2 строки, а вот на 3 цикл нашли всего 1 координату, ее то и пропишет пилот 1 строкой, а вот 2 строка с прошлого раза, как была так и останется. Может подскажете как это вылечить ? И почему если делать старт/стоп, 3 строка скрипта, полностью очищает файл. Даже просто если написать три строчки то они будут очищать файл:
Код
:b
save_array %zhe c:\logs\zheltie_poisk_2\niz.txt
wait 1s
pause_script
goto start


Тогда, что может блокировать в скрипте осуществить полное очищение?

Автор: DarkMaster 8.8.2013, 20:33

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

Автор: veiron 8.8.2013, 21:07

Цитата(DarkMaster @ 8.8.2013, 20:33) *

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

Может вы разберетесь.


Код
set #kt 0 
:a
save_array %zhe1 c:\logs\zheltie_poisk_2\niz.txt
// пример 7 - посчитаем количество точек заданного цвета из перечисленных в скрипте
// set linedelay 1 // раскомментировать эту строку, если нужно чтобы скрипт работал быстро
init_arr %a(1 2) 39 24, 16 14, 25 30, 23 48, 45 89, 34 33, 12 32 // перечисляем после скобок пары координат всех проверяемых точек
set #color 32768 // искомый цвет точки
set #sz size (%a) // определили число пар точек в массиве %a
set #n 0 // тут будем считать число точек нужного цвета
for #i 1 #sz // в цикле проверяем цвет всех точек
  if %a[#i 1] %a[#i 2] #color // проверяем цвет в #i-й точке
     set #n #n + 1 // если цвет совпал с заданным, то увеличиваем счетчик найденных точек
  end_if
               set #kt #kt + 1    
             set %zhe1[#kt 1] %a[#i 1] %a[#i 2]
             save_array %zhe1 c:\logs\zheltie_poisk_2\niz.txt
end_for
msg Найдено #n точек с цветом #color
pause_script
goto a


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

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

Вроде разобрался. Теперь не путает строчки.

Автор: veiron 9.8.2013, 11:21

Изображение

Хотел перетянут мышкой пилот вниз и весь скрипт заменился на эти иероглифы. Как теперь скрипт вернуть обратно в нормальный вид ?

Автор: WKnight 9.8.2013, 11:52

Цитата
Хотел перетянут мышкой пилот вниз и весь скрипт заменился на эти иероглифы. Как теперь скрипт вернуть обратно в нормальный вид

Что-то перетащил в пилот, он это загрузил.
Вообще отмена последних изменений в скрипте, также как и везде Ctrl+Z. Но вероятно теперь уже поздно. Если ничего подозрительного не делал, то найти файл скрипта и скопировать куданить, или в пилоте открыть.
Цитата
Нужно с 4 сторон. Вообще искать надо с 4 сторон, но если начинаю искать с 4 у
Я так понимаю что точки ищутся на фиксированном растоянии от исходной. А если сделать финдимидж с узенькой картинкой, в которой на прозрачном фоне помечены нужные точки?

Автор: veiron 9.8.2013, 12:34

Цитата(WKnight @ 9.8.2013, 11:52) *

Что-то перетащил в пилот, он это загрузил. Вообще отмена последних изменений в скрипте, также как и везде Ctrl+Z. Но вероятно теперь уже поздно.

Вы меня не поняли! Я ни чего не перетаскивал в пилот. Просто ткнул мышкой в верхнею область пилота, чтобы сместить его ниже на экране. А он как то очень быстро заменил мой скрипт на эти иероглифы. У меня даже на компе нет таких файлов с иероглифами, а за все время пользования пилотом так происходит уже второй раз.
Цитата
Я так понимаю что точки ищутся на фиксированном расстоянии от исходной. А если сделать финдимидж с узенькой картинкой, в которой на прозрачном фоне помечены нужные точки?

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

Автор: DarkMaster 9.8.2013, 18:17

Код
set linedelay 0

// Координата левого верхнего изображения.
// С точностью до пикселя.
set #startOffsetX 5
set #startOffsetY 5
// Шаг сетки изображений.
// С точностью до пикселя.
set #cellOffsetX 10
set #cellOffsetY 10
// Изображения шариков
set %image [ 1 ] image1.bmp
set %image [ 2 ] image2.bmp
set %image [ 3 ] image3.bmp
set #countImage size (%image)

for #i 1 #countImage
// Имидж или колор сам выбирай.
//    set $a findimage ... %image [ #i ] %arr ...
//    set $a findcolor ( 2, 1 50, 50 1 1 2366701 %arr 2 )
//    log $a
    for #n 1 $a 1
        set #fieldX ( %arr [ #n 1 ] - #startOffsetX ) / #cellOffsetX + 1
        set #fieldY ( %arr [ #n 2 ] - #startOffsetY ) / #cellOffsetY + 1
        log #fieldX #fieldY
        set %field [ #fieldY #fieldX ] #i
    end_for
end_for

save_array %field field.txt
stop_script

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

Автор: veiron 9.8.2013, 19:01

Цитата(DarkMaster @ 9.8.2013, 18:17) *

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

скрипт

set linedelay 0

// Координата левого верхнего изображения.
// С точностью до пикселя.
set #startOffsetX 5
set #startOffsetY 5
// Шаг сетки изображений.
// С точностью до пикселя.
set #cellOffsetX 10
set #cellOffsetY 10
set %image [ 1 ] 348463
set %image [ 2 ] 553935
set %image [ 3 ] 895278
set #countImage size (%image)
for #i 1 #countImage
set $a findcolor ( 239, 122 492, 375 1 1 ( %image [ #i ]) %arr 2 )
for #n 1 $a 1
set #fieldX ( %arr [ #n 1 ] - #startOffsetX ) / #cellOffsetX + 1
set #fieldY ( %arr [ #n 2 ] - #startOffsetY ) / #cellOffsetY + 1
log #fieldX #fieldY
set %field [ #fieldX #fieldY ] #i
end_for
end_for

Спасибо большое за скрипт. Посмотрите, правильно я под финдколор сделал, а то он у меня сетку рисует, только цвета на поле не совпадают с цветами в сетке. Координаты поля, шаг и цвет указываю правильно.

Автор: DarkMaster 9.8.2013, 19:14

ну он сетку и должен нарисовать. Он создаст массив типа:
123456
113341
233547

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

оффсеты под себя то поменяй.

Автор: veiron 9.8.2013, 19:28

Цитата(DarkMaster @ 9.8.2013, 19:14) *

ну он сетку и должен нарисовать. Он создаст массив типа:
123456
113341
233547

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

оффсеты под себя то поменяй.

офсеты и координаты поменял. я так понимаю, каждая цифра в файле будет обозначать цвет(set %image [ 1 ] 348463) это значит, что под цифрой 1 будет цвет 348463. Если я это правильно понял, тогда сетка рисуется совсем не правильно. Цифра в файле не соответствует цвету на поле. И создает он масиив типа:
1 2 3 4 5 6

1 1 3 3 4 1

2 3 3 5 4 7

Автор: DarkMaster 9.8.2013, 20:25

пока не понимаю чем не правильный массив.

Автор: veiron 9.8.2013, 20:32

Цитата(DarkMaster @ 9.8.2013, 20:25) *

пока не понимаю чем не правильный массив.

set %image [ 1 ] 348463
set %image [ 2 ] 553935
set %image [ 3 ] 895278
Я вас правильно понимаю, что под цифрой 1 в массиве должен быть цвет 348463, под цифрой 2 должен быть цвет 553935 ??? Если это так то у меня цифры в массиве не соответствую цветам на поле.

Автор: DarkMaster 9.8.2013, 20:56

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

Кстати там левых значений финдколора точно нет? Сделай шаг поиска такой же, как оффсет сетки.

Автор: veiron 9.8.2013, 21:10

Цитата(DarkMaster @ 9.8.2013, 20:56) *

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


set #startOffsetX 260
set #startOffsetY 145
set #cellOffsetX 41
set #cellOffsetY 41
Получает массив
245342
444445
454531
545233
454141
334545

должен быть:
224543
245453
514534
345215
143344
251315
левых значений нет, я сделал скрипт на ифах и каждый шар с цветом находит не путаясь. только он очень долго ищет.

Автор: DarkMaster 9.8.2013, 21:15

оставь один цвет, посмотри, что получится. Добавляй потихоньку. Я на пэинте тестил, а это искуственный аквариум все-таки.

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

Автор: veiron 9.8.2013, 21:19

Цитата(DarkMaster @ 9.8.2013, 21:15) *

оставь один цвет, посмотри, что получится. Добавляй потихоньку. Я на пэинте тестил, а это искуственный аквариум все-таки.

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

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

Автор: DarkMaster 9.8.2013, 21:32

log $a
в идеале еще можно сделать
save_array %arr arr#i.txt

Тут вообще варианта два:
1) находит лишнее.
2) ошибочно сделаны оффсеты.

Ты понимаешь, что все найденные точки должны быть точно в одних координатах? Т.е. если у нас есть поле 5*5=25 клеток, то всего 25 координат в которых должна быть проверка. Скажем у нас есть кружок, треугольник и квадрат. Все эти фигуры должны быть найдены в одной точке ячейки.

http://flockdraw.com/8hj2qv

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

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

Автор: veiron 9.8.2013, 21:56

Цитата(DarkMaster @ 9.8.2013, 21:32) *

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

Вы были правы, один цвет выдавал много лишних точек. Попробовал без этого цвета. В таблице все равно рисует неправильно. А вот в save_array записывает только последний найденный цвет, координаты полностью совпадают с найденными шарами, а вот в таблице они записаны уже неправильно. log $a всегда показывает количество правильно найденных шаров.

Автор: DarkMaster 10.8.2013, 6:04

чиркани координаты найденных точек, оффсеты которые ты выставил.

Автор: veiron 10.8.2013, 6:47

Цитата(DarkMaster @ 10.8.2013, 6:04) *

чиркани координаты найденных точек, оффсеты которые ты выставил.

set #startOffsetX 260
set #startOffsetY 145
set #cellOffsetX 41
set #cellOffsetY 41

Может я не так выставляю set #startOffsetX 260 - тут я ставлю координаты с первой верхней ячейки слева, там где начинается цвет искомой точки. Почти до утра сидел, пытался понять, как ваш скрипт работает, так и не понял. фор в форе, да и внутри фора все закручено, это мне тяжело понять.

Автор: DarkMaster 10.8.2013, 15:34

Цитата
чиркани координаты найденных точек

хде оно?
Цитата
Может я не так выставляю set #startOffsetX 260 - тут я ставлю координаты с первой верхней ячейки слева, там где начинается цвет искомой точки.

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

Автор: veiron 10.8.2013, 15:36

Цитата(DarkMaster @ 10.8.2013, 15:34) *

хде оно?

Я не понимаю, какие координаты я должен дать? Координаты последнего найденного цвета которые записались в файл ?

Автор: DarkMaster 10.8.2013, 17:08

координаты найденных точек. Т.е. те массивы, которые находятся финдколором.

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

Цитата(DarkMaster @ 10.8.2013, 17:08) *

координаты найденных точек. Т.е. те массивы, которые находятся финдколором.

Вставляю save_array arr#i.txt после строки set %field [ #fieldX #fieldY ] #i и происходит запись координат только цвета который ищется последним, может я его не туда ставлю ?
а так вот координаты:
260 145
424 186
465 186
342 227
465 227
383 309
301 350
342 350
465 350

Автор: DarkMaster 10.8.2013, 17:47

#i.txt некорректное применение переменной. Скрипт считает, что "." является признаком ссылки в другую вкладку с названием "txt". Можно сделать так:
set $txt .txt
save_array arr#i$txt
Все перечисленные координаты являются корректными. При этом какие-либо из приведенных координат были неправильно записаны в итоговую таблицу?

Автор: veiron 10.8.2013, 18:10

Цитата(DarkMaster @ 10.8.2013, 17:47) *

#i.txt некорректное применение переменной. Скрипт считает, что "." является признаком ссылки в другую вкладку с названием "txt". Можно сделать так:
set $txt .txt
save_array arr#i$txt
Все перечисленные координаты являются корректными. При этом какие-либо из приведенных координат были неправильно записаны в итоговую таблицу?

Искал один цвет №1, финдколор нашел правильно все шары. В массиве были координаты записаны правильные.
260 186
383 186
301 309
342 309
424 350
расположение шаров как они находились на поле:
000000
100100
000000
000000
011000
000010

а вот в файле сетка была нарисована такая:
010000
000010
000010
010000
000001
000000

то есть, ни один шар в файле, не соответствует как они находятся на поле.

Автор: DarkMaster 10.8.2013, 18:14

мля) X и Y местами поменяй)) почему так хз, лень смотреть, но табличка на бок упала)

set %field [ #fieldX #fieldY ] #i
вот тут местами махни
set %field [ #fieldY #fieldX ] #i

Автор: veiron 10.8.2013, 18:26

Цитата(DarkMaster @ 10.8.2013, 18:14) *

мля) X и Y местами поменяй)) почему так хз, лень смотреть, но табличка на бок упала)

set %field [ #fieldX #fieldY ] #i
вот тут местами махни
set %field [ #fieldY #fieldX ] #i

Теперь все правильно рисует)) Только теперь встает риторический вопрос, что с этим делать?

Автор: DarkMaster 10.8.2013, 18:35

примерно тоже саме, что ты делал ифами. Только теперь это можно делать обращаясь к массиву, а не цепляя цвета. Это намного быстрее. Ты кстати шаг поиска установил, как я тебе говорил? Это очень сильно увеличит скорость поиска. Так же есть у меня к тебе просьба: напиши перед сохранением массива:
msg timer
результат сюда.
По поводу поиска внутри массив, чтобы не перебирать все значения и не тратить на это очень много времени, можно использовать indexOf. Это будет твой основной инструмент. У меня уже даже есть мысль, как это должно выглядеть.

Автор: veiron 10.8.2013, 18:46

Цитата(DarkMaster @ 10.8.2013, 18:35) *

примерно тоже саме, что ты делал ифами. Только теперь это можно делать обращаясь к массиву, а не цепляя цвета. Это намного быстрее. Ты кстати шаг поиска установил, как я тебе говорил? Это очень сильно увеличит скорость поиска. Так же есть у меня к тебе просьба: напиши перед сохранением массива:
msg timer
результат сюда.
По поводу поиска внутри массив, чтобы не перебирать все значения и не тратить на это очень много времени, можно использовать indexOf. Это будет твой основной инструмент. У меня уже даже есть мысль, как это должно выглядеть.

Да шаг поиска установил, каждую клетку строго просчитывает через определенные координаты. Так на ифах я просчитывал так: сравнивал ячейку 1 с ячейкой 2, потом 2 с ячейкой 3 и т.д... потом внутри ифа искал еще по 6 точкам от куда можно переместить к найденным 2 третий шар. Если искал ифом по координатам найденного цвета, получалась путаница. Фколор находит 2 шара которые стоят рядом и у меня получается иф 1 шар находит справа, а второй иф находит слева и где искать 3 уже происходит путаница. indexOf -- это что, такого даже на вике нет(((( ohmy.gif sad.gif

Автор: DarkMaster 10.8.2013, 18:52

это есть в истории развития. последние фенечки. С помощью индексОф ищешь первый элемент с цветом "1", потом относительно него смотришь есть ли вправо или вниз такой же элемент в радиусе двух клеток. Для начала это сделай, потом скажу что с получившимся творить =)

Автор: veiron 10.8.2013, 18:58

Цитата(DarkMaster @ 10.8.2013, 18:52) *

это есть в истории развития. последние фенечки. С помощью индексОф ищешь первый элемент с цветом "1", потом относительно него смотришь есть ли вправо или вниз такой же элемент в радиусе двух клеток. Для начала это сделай, потом скажу что с получившимся творить =)

Спасибо вам за помощь. Буду теперь изучать indexOf.

Автор: DarkMaster 10.8.2013, 19:08

Результат таймера то выложи. Мне же интересно, что получилось.

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

Цитата(DarkMaster @ 10.8.2013, 19:08) *

Результат таймера то выложи. Мне же интересно, что получилось.

Что за результат ?

Автор: DarkMaster 10.8.2013, 19:34

Цитата
Так же есть у меня к тебе просьба: напиши перед сохранением массива:
msg timer
результат сюда.



массив field который

Автор: veiron 10.8.2013, 19:40

Цитата(DarkMaster @ 10.8.2013, 19:34) *

массив field который

Это сейчас сделаю. Я просто не понял про это.

P.S получается от 5200 до 5400

Автор: DarkMaster 10.8.2013, 19:44

многовато что-то. задержка между строк какая* set linedelay 0 не менял? Финдколором ищешь по 1 или 2 методу?

Автор: veiron 10.8.2013, 19:59

Цитата(DarkMaster @ 10.8.2013, 19:44) *

многовато что-то. задержка между строк какая* set linedelay 0 не менял? Финдколором ищешь по 1 или 2 методу?

Я строку linedelay 0 вообще почему удалил)) Вернул на место, время показало от 2200 до 2800. Да и пилот как то странно работает, медленно стартует и такое ощущение, что он даже с linedelay 0 работает с какой-то другой задержкой. Медленно стартует и по строчкам бежит ни так быстро.

P.S Сейчас перешел на другой комп, время показало от 700 до 900 ohmy.gif
Тот комп но котором показывал таймер 2200, после перезагрузки показывает от 580 до 800.

P.S Среднее время поиска на 2 компах показывает от 700 до 800. Ищу финдколором по 2 методу.

Автор: DarkMaster 10.8.2013, 20:05

Я ставил на 800. Прямо-таки угадал.

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

Автор: veiron 10.8.2013, 20:09

Цитата(DarkMaster @ 10.8.2013, 20:05) *

Я ставил на 800. Прямо-таки угадал. Ты так и не ответил как метод используешь в финдколоре 1 или 2?

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

Вот это дааааааа, отключил слежение, от 300 до 400. Пользуюсь 2 методом. Поставил первый, пилот дошел до финдколора и все, стал в ступор.

Автор: DarkMaster 10.8.2013, 20:10

вот поэтому второй. сразу чет не заметил, что ты написал... или ты просто потом приписал)))
Ну все. По этому куску краткий курс окончен. Ваяйте дальше, а я спать =)

Автор: veiron 10.8.2013, 20:11

Цитата(DarkMaster @ 10.8.2013, 20:10) *

вот поэтому второй. сразу чет не заметил, что ты написал... или ты просто потом приписал)))
Ну все. По этому куску краткий курс окончен. Ваяйте дальше, а я спать =)

Еще раз спасибо. Спокойной ночи)

Автор: WKnight 11.8.2013, 14:34

Цитата
У меня даже на компе нет таких файлов с иероглифами,
Это не иероглифы, и это даже не текст. Очень похоже на картинку в формате .bmp
Если такие есть на рабочем столе, то предположенный мной вариант наиболее вероятная причина.

Автор: veiron 11.8.2013, 15:18

Цитата(WKnight @ 11.8.2013, 14:34) *

Это не иероглифы, и это даже не текст. Очень похоже на картинку в формате .bmp
Если такие есть на рабочем столе, то предположенный мной вариант наиболее вероятная причина.

Ндааа, вот как бывает, это не пилот скрипт поменял, а я. Только вы не угадали немного. Это песня в формате mp3.

Автор: veiron 11.8.2013, 15:44

Код
////////////////////////поиск 1 цвета
set linedelay 0
load_array %arr e:\UO\field.txt  
set %result indexOf ( %arr  (#z1) )
set #sz size(%result)
for #i 1 #sz
    set #d #d + 1
    set %f[#d 1]  %result[#i 1] %result[#i 2]
    set $zlt1 .txt
    save_array %f e:\UO\$zlt1 .txt
end_for
load_array %s e:\UO\$zlt1 .txt
set #s size(%s)
for #i 1 #s
   set #m %s[#i 1]%s[#i 2]
   set #d size(%s)
       for #z 1 #d
       set #v %s[#z 1]
       set #vv #v - 1
           if #m = #vv
                   log nashel #m = #vv  
           end_if
       end_for
end_for
////////////////////////////поиск завершен

Вот что получилось после 16 часов непрерывного труда) Другого придумать ни чего не смог. Ищет долго, зато работает. Получается на каждый цвет, что бы найти такой же цвет справа от найденного уходит 400. Еще 400 что бы найти с низу. Потом надо будет к каждому цвету найти по 6 точек с цветом это еще 2400 x 5. И того на поиск всех цветов уйдет где-то 20000, по сравнению, что у меня до этого было, этот работает очень шустро) Еще остается время на то что бы передвинуть шар в нужную точку.

Автор: WKnight 11.8.2013, 15:55

Цитата
Только вы не угадали немного. Это песня в формате mp3.

Несогласен. У mp3 другие сигнатуры.

Автор: veiron 11.8.2013, 16:25

Цитата(WKnight @ 11.8.2013, 15:55) *

Несогласен. У mp3 другие сигнатуры.

Тогда если только .wav, из картинок .bmp на рабочем столе у меня только одна, и совсем в другом углу монитора. Не сама же она в пилот залетела!

Автор: DarkMaster 11.8.2013, 16:50

по коду. На вскидку вижу 2 одинаковых косяка. Массив зачем-то сохранятся в файл, потом загружается. Зачем? Используй напрямую.

Автор: veiron 11.8.2013, 17:26

Цитата(DarkMaster @ 11.8.2013, 16:50) *

по коду. На вскидку вижу 2 одинаковых косяка. Массив зачем-то сохранятся в файл, потом загружается. Зачем? Используй напрямую.

Так тогда не понятно будет, где какого цвета шар? Так у меня было каждый фал свой цвет. А так я правильно делаю. Или как то можно попроще. А то у меня получается. таких блоков 5 + еще 5 которые ищут по вертикали. Потом еще надо еще 6 которые будут искать вокруг найденных 2. И того 16 блоков получается.

Автор: DarkMaster 11.8.2013, 17:32

то ли я дурак, то ли ты видишь вселенскую мудрость...
ну замени %s на %f - все будет тоже самое, только загрузка станет не нужна...

Автор: veiron 11.8.2013, 17:40

Цитата(DarkMaster @ 11.8.2013, 17:32) *

то ли я дурак, то ли ты видишь вселенскую мудрость...
ну замени %s на %f - все будет тоже самое, только загрузка станет не нужна...

Заменил. А как теперь из общего массива вытащить цвет под №5? Раньше у меня был каждый файл для определенного цвета.

Автор: DarkMaster 11.8.2013, 17:56

перечитал скрипт. За однобуквенные переменные и 0 комментариев хочется дать немного в лоб)
я сначала не так понял всю логику скрипта. При твоем подходе %field можно вообще не генерировать. Можно сразу пачку массивов создать разных. У меня была мысль пойти по такому пути, но мне показалось решение с полноценным воссозданием поля более перспективным и полноценным. Я бы искал пары прямо в %field, а потом прогонял возможные варианты при которых картинка "соберется". Тут внезапно подвел indexOf, который оказался не в состоянии искать в границах Х координаты в массиве. Из-за этого я уже не уверен в правильности варианта - быстродействие может подвести. На самом деле я сегодня весь день в голове фоном прокручиваю алгоритмы поиска, пытаясь найти красивое решение. Самое шикарное по быстродействию и красивое боюсь не потянуть, там математика больно хитрая, но вариантов решения действительно много. Кстати схема поиска вправо и вниз при некоторых реализациях может пропускать варианты сборки. В целом: работает - не трогай). У меня пока мысли крутятся еще. Может не поленюсь.

По диагонали собирать надо или нет?

Автор: veiron 11.8.2013, 18:34

Цитата(DarkMaster @ 11.8.2013, 17:56) *

перечитал скрипт. За однобуквенные переменные и 0 комментариев хочется дать немного в лоб)

Постараюсь исправиться.
Цитата
Кстати схема поиска вправо и вниз при некоторых реализациях может пропускать варианты сборки. В целом: работает - не трогай).

Мне супер скорость и не надо, а вот что ходы будет пропускать это плохо.
Цитата
У меня пока мысли крутятся еще. Может не поленюсь.

Было бы не плохо.
Цитата
По диагонали собирать надо или нет?

Изображение
Да надо. На картинке, белым цветом выделены те которые я нашел. А желтым, это которые можно подвинуть что бы составить линию из трех шаров. Мне надо с начало найти 2 вместе, а потом проверить 6 этих точек. И еще надо их распознать так, что левых 3 шара подводятся с левой сторон, а правые справа.

Автор: DarkMaster 11.8.2013, 18:55

С indexOf подстава ппц... Так удобно было бы пары искать... Ну будем думать.

Автор: veiron 11.8.2013, 19:45

Цитата(DarkMaster @ 11.8.2013, 18:55) *

С indexOf подстава ппц... Так удобно было бы пары искать... Ну будем думать.

Так что не стоит дальше пробовать с indexOf ? У меня и так уже мозг закипает. А надо еще как-то придумать, что бы к 2 еще 6 точек найти, так доже страшно представить как я это делать буду с моим 0 познанием в програмированнии.

Автор: DarkMaster 11.8.2013, 20:37

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

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

Из-за indexOf пункты 2, 3, 5 придется заменить обычными ифами и форами. Это по идее должно быть существенно медленнее.

Цитата
моим 0 познанием в програмированнии.

98% моего познания в программировании - это пилот) Но вроде шибко не мешает. Хотя иногда охота научиться новым трюкам.

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

Цитата(DarkMaster @ 11.8.2013, 20:37) *

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

Даже не представляю как это сделать в пилоте. Если надумаете объяснить как это делается, то не надо, мой мозг к такому еще не готов))

Цитата
98% моего познания в программировании - это пилот) Но вроде шибко не мешает. Хотя иногда охота научиться новым трюкам.

У меня 100% познаний это пилот. Я когда тут на форуме увидел скрипты, быстренько закрыл форум и написал в пилоте скрипт с одними left и wait. Потом этого оказалось мало, стал больше вникать, благодоря вам и Zeleax дело потихоньку сдвинулось с мертвой точки.

P.S Скорее всего буду 2 искать indexOf, потом ифом проверять остальные 6 клеток. Только теперь опять проблема, как перевести назад цифры с файла в координаты поля.

Автор: DarkMaster 11.8.2013, 21:37

Цитата
P.S Скорее всего буду 2 искать indexOf

А не получится при таком синтаксисе. Он вам будет искать в диапазоне У-У+1, а вот X будет от 1 и до конца массива. В этом и беда.
Цитата
Только теперь опять проблема, как перевести назад цифры с файла в координаты поля.

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

Автор: veiron 11.8.2013, 21:54

Цитата(DarkMaster @ 11.8.2013, 21:37) *

А не получится при таком синтаксисе. Он вам будет искать в диапазоне У-У+1, а вот X будет от 1 и до конца массива. В этом и беда.

Вроде работает. Правдо фор много при этом работает. Я делаю как если в фале есть запись 11 значит это левая верхняя клетка, значит по горизантали спрова от нее в фале должно быть 12. Я тупо делаю +1 и в фале ищу строчку с цифрой 12. Вроде получается довольно быстро. Сейчас еще вроде способ придумал, В файл записываются не только цифры цвета, но и сами координаты. Вот сейчас пробую по координатам найти рядом 2 и сразу 3. Может что получится, по неумению, может и повезет)

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

А как из этого вашего скрипта, напрямую записать разных 5 массивов?

Автор: DarkMaster 11.8.2013, 22:56

Учитывая, что трехмерных массивов не бывает, то я вижу всего два способа:
1) развернуть for и просто подставить 5 разных массивов. Т.е. рабочая часть будет в 5 раз длиннее. Ну можно что-то в подпрограммы выкинуть, если сильно не хочется удлинять скрипт.

2) Попробовать на*бать природу. Есть такой забавный момент:

Код
set #var 123
set %arr [ 1 1 ] #
set %arr [ 1 2 ] var
msg %arr [ 1 ]
stop_script

Можно попробовать подсунуть подобным образом массив в паре с оператором eval. Но у меня не получилось. Может zeleax или кнайт осилят.

Автор: veiron 11.8.2013, 23:27

Цитата(DarkMaster @ 11.8.2013, 22:56) *

Учитывая, что трехмерных массивов не бывает, то я вижу всего два способа:
1) развернуть for и просто подставить 5 разных массивов. Т.е. рабочая часть будет в 5 раз длиннее. Ну можно что-то в подпрограммы выкинуть, если сильно не хочется удлинять скрипт.

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

Цитата
2) Попробовать на*бать природу. Есть такой забавный момент:
Можно попробовать подсунуть подобным образом массив в паре с оператором eval. Но у меня не получилось. Может zeleax или кнайт осилят.

Было бы неплохо, еслиб помогли.

Автор: DarkMaster 12.8.2013, 8:39

Код
set #i 1
set $b %arr#i
eval (set $b 123)
msg %arr1 [ 1 ]
stop_script

Оно работает!

сколько всего типов фигур ищем?

Автор: veiron 12.8.2013, 8:44

Цитата(DarkMaster @ 12.8.2013, 8:39) *

сколько всего типов фигур ищем?

Всего 5 цветов.

Автор: DarkMaster 12.8.2013, 9:16

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

Автор: xolost 12.8.2013, 9:48

Как наше состояние одним словом!? - Работает! - А двумя словами? - Не работает...

Автор: DarkMaster 12.8.2013, 9:55

xolost, жду твоего решения данного вопроса.

Автор: veiron 12.8.2013, 15:40

Код
if #verx #vwry #colzh   //  иф 1 если нашли выполняем действие
     .........
end_if
     if #gytx #gyty #koh   // иф 2 идем в начало
           goto start
     end_if
if #verx #vwry #colzh   //  если нашли выполняем действие
     .........
end_if

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

Автор: DarkMaster 12.8.2013, 16:01

Цитата
1 иф со 2 или 2 иф добавить к первому.

переведи. лучше кодом оба варианта.

у тебя кстати вообще не должно быть столько ифов. откуда? Там for'ом перебор по уму делать надо.

Автор: veiron 12.8.2013, 16:29

Цитата(DarkMaster @ 12.8.2013, 16:01) *

переведи. лучше кодом оба варианта.

Код
if #verx #vwry #colzh and #gytx #gyty #koh      //  иф 1 если нашли выполняем действие +  иф 2 идем в 
    .........
end_if

Мой цвет шара и мой ход, Если моего хода нет пропустить.

Цитата
у тебя кстати вообще не должно быть столько ифов. откуда? Там for'ом перебор по уму делать надо.

Я не могу понять как сделать фор в разные координаты.
Код
 
    set #d findcolor (0, 0 500, 500 1 1 (207) %arr 2)
      set #xx %s[#t 1]          
      set #yy %s[#t 2]   //  найденный  шар
      set #x1 #xx - 20
      set #y1 #yy + 28   // ищем шар слева внизу
      set #x2 #xx - 35
      set #y2 #yy        // ищем шар слева по центру
      set #x3 #xx - 48
      set #y3 #yy - 48   // ищем шар справа внизу
if #x1 #y1 #colzh   //  нашел, идем передвигать шар.
     gosub
end_if
if #x2 #y2 #colzh   //  нашел, идем передвигать шар.
     gosub
end_if
if #x3 #y2 #colzh   //  нашел, идем передвигать шар.
     gosub
end_if

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

Автор: DarkMaster 12.8.2013, 17:20

Цитата
if #verx #vwry #colzh and #gytx #gyty #koh

это гораздо шустрее, чем 2 ифа
Цитата
Разве это можно фором заменить?

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

Автор: veiron 12.8.2013, 17:50

Цитата(DarkMaster @ 12.8.2013, 17:20) *

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

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

Цитата
это гораздо шустрее, чем 2 ифа

И еще, а если у меня в одном ифе 10 координат, что лучше, сделать ифом или фором перебирать?

Автор: DarkMaster 12.8.2013, 17:54

Код
set %arr [ 1 1 ] 11
set %arr [ 1 2 ] 12
set %arr [ 1 3 ] 13
set %arr [ 2 1 ] 21
set %arr [ 2 2 ] 22
set %arr [ 2 3 ] 23
set #sizeArr size (%arr)

for #i 1 #sizeArr 1
     if %arr [ #i 1 ] %arr [ #i 2 ] %arr [ #i 3 ]
          log попался
     end_if
end_for

Автор: veiron 12.8.2013, 19:27

Цитата(DarkMaster @ 12.8.2013, 17:54) *

Код
set %arr [ 1 1 ] 11
set %arr [ 1 2 ] 12
set %arr [ 1 3 ] 13
set %arr [ 2 1 ] 21
set %arr [ 2 2 ] 22
set %arr [ 2 3 ] 23
set #sizeArr size (%arr)

for #i 1 #sizeArr 1
     if %arr [ #i 1 ] %arr [ #i 2 ] %arr [ #i 3 ]
          log попался
     end_if
end_for



Спасибо. Только массив от куда я беру цвет и координаты у меня %color, а его куда вставить?

Автор: DarkMaster 12.8.2013, 19:39

вместо %arr вроде.

Цитата
set #xx %s[#t 1]
set #yy %s[#t 2] // найденный шар
set #x1 #xx - 20
set #y1 #yy + 28 // ищем шар слева внизу
set #x2 #xx - 35
set #y2 #yy // ищем шар слева по центру
set #x3 #xx - 48
set #y3 #yy - 48 // ищем шар справа внизу

Чтобы вот этой ерундой не заниматься, есть field, в котором достаточно четко прописаны шары и цвета. Вообще после создания field тебе больше не нужно обращаться к цветам. Только перебор внутри массива. Весь смысл был уйти от поисков на экране. У тебя есть вся необходимая информация в %field, Делай if'ы на ячейки.

Автор: veiron 12.8.2013, 20:21

Цитата(DarkMaster @ 12.8.2013, 19:39) *

вместо %arr вроде.

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

Цитата
Чтобы вот этой ерундой не заниматься, есть field, в котором достаточно четко прописаны шары и цвета. Вообще после создания field тебе больше не нужно обращаться к цветам. Только перебор внутри массива. Весь смысл был уйти от поисков на экране. У тебя есть вся необходимая информация в %field, Делай if'ы на ячейки.

Я так понимаю, что я должен просканировать поле и записать в массив field все поле. А как потом в этом массиве найти нужный цвет, да еще потом найти 2 шара по горизонтали и 2 по вертикали, а потом еще проверить 6 точек по горизонтали и 6 точек по вертикали, и все это с одного массива, в котором не понятно где какой цвет и координаты.

Автор: DarkMaster 12.8.2013, 21:05

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

в смысле где в моем скрипте %arr, в твоем должно быть %color. Уходи от этой схемы. Копай %field.
Цитата
и все это с одного массива, в котором не понятно где какой цвет и координаты.

Без паники. Все есть. Просто в другом виде, более пригодном для обработки. Смотри. У нас есть таблица %field, каждая ячейчка содержит в себе цифру. Эта цифра и есть цвет. Нам уже не важно как она в RGB выглядит, нам важно, что мы просто можем различить все типы изображений, т.к. они записаны разными цифрами. Координаты нам тоже больше не нужны. Вместо координат можно просто использовать номера ячеек. Ты когда сам собираешь линию, тебе же не важно в каких координатах, что находится? Тебе же важны только ряды и строки. В %field у нас как раз эти ряды и строки с номерами цветов. Теперь к практике.
Предположим, что мы нашли изображение номер 4 в %field [ 3 5 ]Как найти пару?
Начнем с очевидного. Пара должна быть в соседней ячейке. Направление нам не известно. У нас есть координаты изображения x=3, y =5. Соответственно нам необходимо искать изображение на 1 влево x-1=2, на 1 вправо x+1=4, на 1 вверх y-1=4, на 1 вниз y+1=6. Таким образом у нас получилась область поиска x:2-4, y:4-6. Берем наш любимый for:
Код
set #xStart 2
set #xEnd 4
set #yStart 4
set #yEnd 6
for #x #xStart #xEnd 1
     for #y #yStart #yEnd 1
          if %field [ #x #y ] = %field [ 3 5 ]
             log обнаружена пара
          end_if
     end_for
end_for

Не забудь, что выходить за пределы массива нельзя. Т.е. если мы найдем изображение в координате 1, 1, то нельзя делать поиск начиная с координаты 0, 0. Если попытаться выйти за пределы массива, то произойдет ошибка. Условие добавишь сам. Добавлять его нужно ДО for'а.
Так же не забудь, что при поиске в таком диапазоне мы обязательно найдем картинку в исходной ячейке %field [ 3 5 ], ее тоже необходимо отфильтровать, но уже внутри for'а, добавив условие в уже существующий if.

По поводу поиска начального изображения %field [ 3 5 ]. Тут есть два варианта:
1)indexOf. Тут думаю все понятно. Он нам как раз вернет эти 3 5. Вообще все, что он вернет необходимо будет перебрать.

2) Если нам не важен порядок перебора типов изображений, то я бы просто пошел перебирать весь %field.
Код
for #xField 1 10 1 // Я хз какого размера у тебя поле. Предположим 10 на 10.
    for #yField 1 10 1
         log текущая ячейка #xField #yField . Значение ячейки %field [ #xField #yField ]
    end_for
end_for

Это простейший перебор поля. Теперь подставим пример поиска пары в скрипт перебора ячеек:
Код
for #xField 1 10 1 // Я хз какого размера у тебя поле. Предположим 10 на 10.
    for #yField 1 10 1
         log текущая ячейка #xField #yField . Значение ячейки %field [ #xField #yField ]
         set #xStart #xField - 1
         set #xEnd #xField + 1
         set #yStart #yField - 1
         set #yEnd #yField + 1

         for #x #xStart #xEnd 1
              for #y #yStart #yEnd 1
                   if %field [ #x #y ] = %field [ #xField #yField ]
                      log обнаружена пара в ячейках #x #y и #xField #yField
                   end_if
              end_for
         end_for
    end_for
end_for

Таким образом мы переберем все поле, найдем все пары.

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

Автор: veiron 12.8.2013, 22:05

Цитата(DarkMaster @ 12.8.2013, 21:05) *

Без паники.

Какое тут без паники) Я уже за эти дни 100 раз переписываю скрипт, сдвиг конечно огромный. И про массивы от вас много чего понял, да и про фор тоже.

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

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

По поводу поиска начального изображения %field [ 3 5 ]. Тут есть два варианта:
1)indexOf. Тут думаю все понятно. Он нам как раз вернет эти 3 5. Вообще все, что он вернет необходимо будет перебрать.

Цитата
2) Если нам не важен порядок перебора типов изображений, то я бы просто пошел перебирать весь %field.

Ваш скрипт

Код
for #xField 1 10 1 // Я хз какого размера у тебя поле. Предположим 10 на 10.
    for #yField 1 10 1
         log текущая ячейка #xField #yField . Значение ячейки %field [ #xField #yField ]
    end_for
end_for

Это простейший перебор поля. Теперь подставим пример поиска пары в скрипт перебора ячеек:
Код
for #xField 1 10 1 // Я хз какого размера у тебя поле. Предположим 10 на 10.
    for #yField 1 10 1
         log текущая ячейка #xField #yField . Значение ячейки %field [ #xField #yField ]
         set #xStart #xField - 1
         set #xEnd #xField + 1
         set #yStart #yField - 1
         set #yEnd #yField + 1
                 for #x #xStart #xEnd 1
              for #y #yStart #yEnd 1
                   if %field [ #x #y ] = %field [ #xField #yField ]
                      log обнаружена пара в ячейках #x #y и #xField #yField
                   end_if
              end_for
         end_for
    end_for
end_for

Перед вашим кодом поставил фколор, записал все поле в массив. На 11 строке выскакивает ошибка: Ошибка! Проверьте правильность скрипта! EAccessViolation Access violation at adress 0051DA4C in module UOpilot. Read of address FFFFFFFC и дальше указана вся 11 строка.

скрипт
Код
set $a findcolor ( 100, 100 500, 500  1 1 (#color1, #color2, #color3, #color4, #color6) %field  2 )
for #xField 1 6 1 // Размер поля 6 х 6
    for #yField 1 6 1
         log текущая ячейка #xField #yField . Значение ячейки %field [ #xField #yField ]
         set #xStart #xField - 1
         set #xEnd #xField + 1
         set #yStart #yField - 1
         set #yEnd #yField + 1
                 for #x #xStart #xEnd 1
              for #y #yStart #yEnd 1
    ОШИБКА               if %field [ #x #y ] = %field [ #xField #yField ]  
                      log обнаружена пара в ячейках #x #y и #xField #yField
                   end_if
              end_for
         end_for
    end_for
end_for


Автор: DarkMaster 12.8.2013, 22:15

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

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

а больше ничего и не надо.
Цитата
На 11 строке выскакивает ошибка: Ошибка! Проверьте правильность скрипта! EAccessViolation Access violation at adress 0051DA4C in module UOpilot. Read of address FFFFFFFC и дальше указана вся 11 строка.

Естественно. Ведь он выходит за пределы массива. Я сразу сказал, что сначала надо условие на пределы массива. Представь что ты зашел в поезд, в 3 вагон, потом пошел к хвосту поезда, перешел во 2 вагон, потом в первый, а потом головой об рельсы и шпалы, потому что вагона с номерном "0" не существует.
Цитата
set $a findcolor ( 100, 100 500, 500 1 1 (#color1, #color2, #color3, #color4, #color6) %field 2 )

Откуда взялось это произведение?) Пролистай пару страниц назад и найди как я собирал %field.

дальше - завтра. я спать)

Автор: veiron 12.8.2013, 22:29

Цитата(DarkMaster @ 12.8.2013, 22:15) *

а больше ничего и не надо.

Так я в ифе умею только if 161, 343 73130 тоесть указывать координаты и цвет, еще знаю or и and, и дальше мои познания заканчиваются.
Цитата
Естественно. Ведь он выходит за пределы массива. Я сразу сказал, что сначала надо условие на пределы массива. Представь что ты зашел в поезд, в 3 вагон, потом пошел к хвосту поезда, перешел во 2 вагон, потом в первый, а потом головой об рельсы и шпалы, потому что вагона с номерном "0" не существует.

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

Цитата
Откуда взялось это произведение?) Пролистай пару страниц назад и найди как я собирал %field.
Так это я его изобразил, думал этого хватит)

Цитата
дальше - завтра. я спать)

Спасибо за терпеливое и подробное объяснение. Спокойной ночи.

P.S заменил фколор на ваш скрипт, по логу в массив %field все прекрасно собирается, как только второй скрипт начинает работать в том же месте опять ошибка, я даже поле с 6х6 уменьшил до 3х3 думал так пойдет, не вышло) в лог записывается только текущая ячейка 1 1 . Значение ячейки 5

Автор: DarkMaster 13.8.2013, 7:12

Цитата
Так я в ифе умею только if 161, 343 73130 тоесть указывать координаты и цвет

Жмем ?/Помощь по языку скриптов, либо идем на вики. Читаем про иф и сравнение чисел.
Цитата
Так я после первого вагона дальше и не пойду, зачем мне шпалы головой собирать.

В данном случае ты именно идешь.
Цитата
даже поле с 6х6 уменьшил до 3х3 думал так пойдет, не вышло

иногда очень не хватает бумажки и рядом сидящего человека. У поля 4 угла и 4 грани(края в данном случае). Ты изменяешь 2 угла, 2 грани. Возьми бумажку, не поленись. Расчерти морской бой. Знаешь игру такую? Обычно одну сторону нумеруют цифрами, а другую буквами. Пронумеруй обе стороны цифрами. Каждый раз когда ты обращаешься к массиву, ты "стреляешь в морской бой". Смысл тот же самый 1 в 1. Стреляю в 5/4 - это обращение к ячейке массива 5/4. Так вот. От того, что ты в поле 6 на 6 стал стрелять только 1-3 на 1-3 (посмотри на бумажку!), ты ушел от всех краев?

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

Автор: veiron 13.8.2013, 7:17

Цитата(DarkMaster @ 13.8.2013, 7:12) *

Жмем ?/Помощь по языку скриптов, либо идем на вики. Читаем про иф и сравнение чисел.

Я уже читал про это. if 4 > 5

Цитата
ты ушел от всех краев?

нет
Цитата
Теперь несколько приземленнее. Посмотри в скрипт. Где расчитывается поле поиска пары? Об этом уже писал. Найди в скрипте этот момент, напиши сюда.

Код
if %field [ #x #y ] = %field [ #xField #yField ]
                      log обнаружена пара в ячейках #x #y и #xField #yField
                   end_if

Автор: DarkMaster 13.8.2013, 7:26

Мимо. Это вообще сравнение. Тут ведь даже ничего не считается. Найди _расчеты_ области поиска второго изображения из пары.
https://forum.uokit.com/index.php?showtopic=26456&st=140&gopid=192912&# читаем еще раз, в коде расчетов не было, только в описании. Ниже уже с расчетами.

Автор: veiron 13.8.2013, 7:36

Цитата(DarkMaster @ 13.8.2013, 7:26) *

Мимо. Это вообще сравнение. Тут ведь даже ничего не считается. Найди _расчеты_ области поиска второго изображения из пары.
https://forum.uokit.com/index.php?showtopic=26456&st=140&gopid=192912&# читаем еще раз, в коде расчетов не было, только в описании. Ниже уже с расчетами.

Код
         set #xStart #xField - 1
         set #xEnd #xField + 1
         set #yStart #yField - 1
         set #yEnd #yField + 1

Значит тут. Получается найден шар по центру, а +/- 1 ищет вокруг него.

Автор: DarkMaster 13.8.2013, 7:38

Вооо. При каких значениях x/y у нас будет выход за пределы массива?

Автор: veiron 13.8.2013, 7:39

Цитата(DarkMaster @ 13.8.2013, 7:38) *

Вооо. При каких значениях x/y у нас будет выход за пределы массива?

0 0

Автор: DarkMaster 13.8.2013, 7:46

Цитата
0

Начерти на бумажке. Посмотри на количество граней. Это только один из вариантов.

У нас 4 расчета. Посмотри на каждый. Посмотри какие значения какому из них нельзя принимать.

Уже очень близко на самом деле smile.gif

Автор: veiron 13.8.2013, 7:51

Цитата(DarkMaster @ 13.8.2013, 7:46) *

Начерти на бумажке. Посмотри на количество граней. Это только один из вариантов.

У нас 4 расчета. Посмотри на каждый. Посмотри какие значения какому из них нельзя принимать.

Уже очень близко на самом деле smile.gif


0/1 1/0 6/0 0/6

Автор: DarkMaster 13.8.2013, 7:56

Немного не понял почему 4 ПАРЫ чисел.

Автор: veiron 13.8.2013, 7:56

Цитата(DarkMaster @ 13.8.2013, 7:56) *

Немного не понял почему 4 ПАРЫ чисел.

0 0 7 7

Автор: DarkMaster 13.8.2013, 8:00

Цитата
0 0 7 7

В принципе правильно. Это значения, которых не должно получиться. При каких значениях #xField значение #xStart будет в переделах допустимого?

set #xStart #xField - 1

Автор: veiron 13.8.2013, 8:02

Цитата(DarkMaster @ 13.8.2013, 8:00) *

В принципе правильно. Это значения, которых не должно получиться. При каких значениях #xField значение #xStart будет в переделах допустимого?

set #xStart #xField - 1

2

Автор: DarkMaster 13.8.2013, 8:03

Теперь ифом тоже самое.

Автор: veiron 13.8.2013, 8:05

Цитата(DarkMaster @ 13.8.2013, 8:03) *

Теперь ифом тоже самое.

if 1 < 2

Автор: DarkMaster 13.8.2013, 8:07

Цитата
При каких значениях #xField значение #xStart будет в переделах допустимого?

Хде здесь #xField?

Автор: veiron 13.8.2013, 8:11

Цитата(DarkMaster @ 13.8.2013, 8:07) *

Хде здесь #xField?


if #xField < 2

Автор: DarkMaster 13.8.2013, 8:13

вооо! К этому и шли. Осталось математику дооформить.
если
if #xField < 2
то какое значение должен принять #xStart?

Автор: veiron 13.8.2013, 8:17

Цитата(DarkMaster @ 13.8.2013, 8:13) *

вооо! К этому и шли. Осталось математику дооформить.
если
if #xField < 2
то какое значение должен принять #xStart?

if ( #xField < 2) or ( #xStart < 7)

Автор: DarkMaster 13.8.2013, 8:18

Цитата
( #xStart < 7)

У нас #xStart еще вообще не существует. Ему надо как раз задать значение. Какое значение ему надо задать, если #xField < 2?

Автор: veiron 13.8.2013, 8:20

Цитата(DarkMaster @ 13.8.2013, 8:18) *

У нас #xStart еще вообще не существует. Ему надо как раз задать значение. Какое значение ему надо задать, если #xField < 2?

#xStart < 7

Автор: DarkMaster 13.8.2013, 8:22

эмм... Походу надо чуть передохнуть) Как переменным то задаем значения?

Автор: veiron 13.8.2013, 8:24

Цитата(DarkMaster @ 13.8.2013, 8:22) *

эмм... Походу надо чуть передохнуть) Как переменным то задаем значения?

set #xStart 1

Автор: DarkMaster 13.8.2013, 8:26

Да!!!
Теперь пихаем все это в иф, не забываем закрыть if.

Автор: veiron 13.8.2013, 8:29

Цитата(DarkMaster @ 13.8.2013, 8:26) *

Да!!!
Теперь пихаем все это в иф, не забываем закрыть if.

Код
set #xStart 1
if #xField < 2
set #xStart #xField - 1
end_if

Вроде как то так.

Автор: DarkMaster 13.8.2013, 8:33

можно и таким подходом. Только ты написал наоброт. smile.gif Вообще я думал сделать через:
if
...
else
...
end_if
Что шустрее не понятно, но с else код более читабелен и логичен. Но работоспособны оба варианта. Твой возможно даже чуть шустрее. Только не забудь поправить присвоения.

Автор: veiron 13.8.2013, 8:40

Цитата(DarkMaster @ 13.8.2013, 8:33) *

можно и таким подходом. Только ты написал наоброт. smile.gif

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


Код
set #xStart 1
if #xStart < 2
      set #xStart #xField - 1
   else
end_if

Исправил. Так?

Автор: DarkMaster 13.8.2013, 8:46

Цитата
set #xStart 1
if #xField < 2
set #xStart #xField - 1
end_if

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

Цитата
При каких значениях #xField значение #xStart будет в переделах допустимого?

ты ответил
Цитата
set #xStart 1

Вот это и напиши. +/- пока не касайся.

Автор: veiron 13.8.2013, 8:48

Цитата(DarkMaster @ 13.8.2013, 8:42) *

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

Код
set #xStart 1
if #xField < 2

Надо поменять местамию #xStar с #xField.
Код
set #xStart 1
if #xStart < 2
      set #xStart #xField - 1
   else
end_if

а так я все правильно написал?

Автор: DarkMaster 13.8.2013, 8:51

Цитата
set #xStart 1
if #xStart < 2

у тебя всегда будет истиной. Выражение всегда будет 1 < 2
Цитата
При каких значениях #xField значение #xStart будет в переделах допустимого?

ты ответил
Цитата
set #xStart 1

Вот это и напиши. +/- пока не касайся.

Автор: veiron 13.8.2013, 8:56

Цитата(DarkMaster @ 13.8.2013, 8:51) *

у тебя всегда будет истиной. Выражение всегда будет 1 < 2

Код
set #xStart 0
if #xStart < #xField
   else
end_if


Вот отредактировал, теперь правильно?

Автор: DarkMaster 13.8.2013, 9:04

Вернись назад.

Код
set #xStart 1
if #xField < 2
set #xStart #xField - 1
end_if

Все было почти верно. if #xField < 2 - условие верное. Но посмотри что ты делаешь дальше. Если #xField < 2, то ты вычитаешь единицу. Т.е. если #xField = 1, то ты делаешь 1 - 1 = 0. Может наоброт вычитать не надо, если #xField < 2?

Автор: veiron 13.8.2013, 9:07

Цитата(DarkMaster @ 13.8.2013, 9:04) *

Все было почти верно. if #xField < 2 - условие верное. Но посмотри что ты делаешь дальше. Если #xField < 2, то ты вычитаешь единицу. Т.е. если #xField = 1, то ты делаешь 1 - 1 = 0. Может наоброт вычитать не надо, если #xField < 2?

Код
set #xStart 1
if #xField < 2
else
set #xStart #xField - 1
end_if

Автор: DarkMaster 13.8.2013, 9:12

о как забавно. Подводил к одному варианту, а ты сразу перескочил на шаг дальше. Оно так даже заработает. set #xStart 1 убери внутрь ифа то. Он там изначально и должен был быть. Если #xField = 1, то и начало поиска должно начинаться set #xStart 1.

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

Автор: veiron 13.8.2013, 9:17

Цитата(DarkMaster @ 13.8.2013, 9:12) *

о как забавно. Подводил к одному варианту, а ты сразу перескочил на шаг дальше. Оно так даже заработает. set #xStart 1 убери внутрь ифа то. Он там изначально и должен был быть. Если #xField = 1, то и начало поиска должно начинаться set #xStart 1.

Код

if #xField < 2
set #xStart 1
else
set #xStart #xField - 1
end_if

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

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

Автор: DarkMaster 13.8.2013, 9:20

Цитата
Так правильно?

Да. Отступы перед set'ами сделай, чтобы глаза потом не ломать. Но это уже оформление. Тут только внешне.

Автор: veiron 13.8.2013, 9:21

Цитата(DarkMaster @ 13.8.2013, 9:20) *

Да. Отступы перед set'ами сделай, чтобы глаза потом не ломать. Но это уже оформление. Тут только внешне.

Код
if #xField < 2
    set #xStart 1
else
    set #xStart #xField - 1
end_if

Вот как то так будет.

Автор: DarkMaster 13.8.2013, 9:22

ага.

Автор: veiron 13.8.2013, 9:23

Цитата(DarkMaster @ 13.8.2013, 9:22) *

ага.

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

Автор: veiron 13.8.2013, 11:53

Код
         if #xField < 2
            set #xStart 1
         else
            set #xStart #xField - 1
         end_if
         if #xField < 7
            set #xEnd 6
         else
            set #xEnd #xField + 1
         end_if
         if #yField < 2
            set #yStart 1
         else
            set #yStart #yField - 1
         end_if
         if #yField < 7
            set #yEnd 6
         else
            set #yEnd #yField + 1
         end_if

Код
11:49:44 9 (, 38): текущая ячейка 1 1 . Значение ячейки 5
11:49:44 9 (, 63): обнаружена пара в ячейках #x #y и #xField #yField
11:49:44 9 (, 63): обнаружена пара в ячейках #x #y и #xField #yField
11:49:44 9 (, 63): обнаружена пара в ячейках #x #y и #xField #yField
11:49:44 9 (, 63): обнаружена пара в ячейках #x #y и #xField #yField
11:49:44 9 (, 63): обнаружена пара в ячейках #x #y и #xField #yField
11:49:44 9 (, 63): обнаружена пара в ячейках #x #y и #xField #yField
11:49:44 9 (, 63): обнаружена пара в ячейках #x #y и #xField #yField
11:49:44 9 (, 63): обнаружена пара в ячейках #x #y и #xField #yField
11:49:44 9 (, 63): обнаружена пара в ячейках #x #y и #xField #yField

И так почему-то все ячейки?

Автор: DarkMaster 13.8.2013, 12:12

Цитата
if #xField < 7

ошибка. Поле у нас 6*6, если я правильно понял. Подставь 6 и поймешь.
Цитата
обнаружена пара в ячейках #x #y и #xField #yField

странно, что не подставляет значения. Индексы должен писать. Полностью скрипт выкладывай. Где-то что-то не так.
Цитата
И так почему-то все ячейки?

Пара будет везде потому, что мы еще не успели исключить исходную ячейку. Смотри, мы нашли совпадение в координатах %field [ 3 5 ], после чего ищем такую же картинку в +/- 1 диапазоне. Но ведь %field [ 3 5 ], тоже находится в этом диапазоне. Надо ее исключить. В условие:
if %field [ #x #y ] = %field [ #xField #yField ]
необходимо так же добавить условие, что координаты исходной картинки и текущей различные.

Координаты в данном случае то же самое, что и индексы массива, например, [ 3 5 ]
Вопрос:
1) Какие переменные содержат в себе координаты исходного изображения?
2) Какие переменные содержат в себе координаты проверяемого изображения в области +/-1?

Автор: veiron 13.8.2013, 12:22

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

ошибка. Поле у нас 6*6, если я правильно понял. Подставь 6 и поймешь.
странно, что не подставляет значения. Индексы должен писать. Полностью скрипт выкладывай. Где-то что-то не так.
поставил. вроде ни каких изменений нет.
Скрипт
Код

set #startOffsetX 260
set #startOffsetY 145
// Шаг сетки изображений.
// С точностью до пикселя.
set #cellOffsetX 41
set #cellOffsetY 41
// Изображения шариков
set %image [ 1 ] 476925            
set %image [ 2 ] 453298      
set %image [ 3 ] 134586    
set %image [ 4 ] 746852  
set %image [ 5 ] 643258    
set #countImage size (%image)

for #i 1 #countImage
// Имидж или колор сам выбирай.
   // set $a findimage ... %image [ #i ] %arr ...
    set $a findcolor ( 100, 100 500, 500  1 1 (%image[ #i ]) %arr  2 )
    log $a   финд колор
    for #n 1 $a 1
        set #fieldX ( %arr [ #n 1 ] - #startOffsetX ) / #cellOffsetX + 1
        set #fieldY ( %arr [ #n 2 ] - #startOffsetY ) / #cellOffsetY + 1
        log #fieldX #fieldY
        set %field [ #fieldY #fieldX ] #i
    end_for
end_for
///////////////////////////////////
for #xField 1 6 1 // Я хз какого размера у тебя поле. Предположим 10 на 10.
    for #yField 1 6 1
             log текущая ячейка #xField #yField . Значение ячейки %field [ #xField #yField ]
         if #xField < 2
            set #xStart 1
         else
            set #xStart #xField - 1
         end_if
         if #xField < 6
            set #xEnd 6
         else
            set #xEnd #xField + 1
         end_if
         if #yField < 2
            set #yStart 1
         else
            set #yStart #yField - 1
         end_if
         if #yField < 6
            set #yEnd 6
         else
            set #yEnd #yField + 1
         end_if

         for #x #xStart #xEnd 1
              for #y #yStart #yEnd 1
                   if %field [ #x #y ] = %field [ #xField #yField ]
                      log обнаружена пара в ячейках #x #y и #xField #yField
                   end_if
              end_for
         end_for
    end_for
end_for


Цитата
Пара будет везде потому, что мы еще не успели исключить исходную ячейку. Смотри, мы нашли совпадение в координатах %field [ 3 5 ], после чего ищем такую же картинку в +/- 1 диапазоне. Но ведь %field [ 3 5 ], тоже находится в этом диапазоне. Надо ее исключить. В условие:
if %field [ #x #y ] = %field [ #xField #yField ]
необходимо так же добавить условие, что координаты исходной картинки и текущей различные.

Код
if %field [ #x #y ] = %field [ #xField #yField ]
  if  #x #y

Так

Цитата
Координаты в данном случае то же самое, что и индексы массива, например, [ 3 5 ]
Вопрос:
1) Какие переменные содержат в себе координаты исходного изображения?
2) Какие переменные содержат в себе координаты проверяемого изображения в области +/-1?

1. #x #y
2. #xField #yField

Автор: DarkMaster 13.8.2013, 12:31

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

Я имел ввиду в голове посчитай, что получится.

Цитата
if %field [ #x #y ] = %field [ #xField #yField ]
if #x #y


Так

не торопись smile.gif
Цитата
1) Какие переменные содержат в себе координаты исходного изображения?
2) Какие переменные содержат в себе координаты проверяемого изображения в области +/-1?

1. #x #y
2. #xField #yField

Еще раз, внимательнее. Мы когда первое изображение искали, в каких переменных перебирали координаты? Это будет исходная картинка.

Автор: veiron 13.8.2013, 12:34

Цитата(DarkMaster @ 13.8.2013, 12:31) *

Я имел ввиду в голове посчитай, что получится.
не торопись smile.gif
Искать будет только до 5 ячейки.

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


#fieldX #fieldY

Автор: DarkMaster 13.8.2013, 12:38

Цитата
if #xField < 7
set #xEnd 6
else
set #xEnd #xField + 1
end_if

Подставь вместо #xField возможные значения. И посчитай в голове что получится. Значения:
1) 1
2) 3
3) 6
Цитата
Еще раз, внимательнее. Мы когда первое изображение искали, в каких переменных перебирали координаты? Это будет исходная картинка.
#fieldX #fieldY

Правильно. Если #fieldX #fieldY исходные координаты, то какие координаты при поиске +/-1?

Автор: veiron 13.8.2013, 12:41

Цитата(DarkMaster @ 13.8.2013, 12:38) *

Подставь вместо #xField возможные значения. И посчитай в голове что получится. Значения:
1) 1
2) 3
3) 6
думал что 123456

Цитата
Правильно. Если #fieldX #fieldY исходные координаты, то какие координаты при поиске +/-1?

#xField #yField

Автор: DarkMaster 13.8.2013, 12:47

Цитата
думал что 123456

Всмысле? ну просчитай сам, что получится, если следовать логике скрипта.
Цитата
Если #fieldX #fieldY исходные координаты, то какие координаты при поиске +/-1?

#xField #yField

Так меня уже замыкать начинает) Откуда ты взял #fieldX?) Я шибко не вглядывался и посчитал, что имелось ввиду #xField #yField.

Автор: veiron 13.8.2013, 12:50

Цитата(DarkMaster @ 13.8.2013, 12:47) *

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

если #xField 7 то #xStart при -1 будет 6

Цитата
Так меня уже замыкать начинает) Откуда ты взял #fieldX?) Я шибко не вглядывался и посчитал, что имелось ввиду #xField #yField.

#fieldX это из первого скрипта который собирал все цвета на поле.

Автор: DarkMaster 13.8.2013, 12:54

Ух. Как опасно пересеклись переменные, а я и не заметил.

Собственно первая версия была опять почти правильная. Только опять все наоборот.

Цитата
1) Какие переменные содержат в себе координаты исходного изображения?
2) Какие переменные содержат в себе координаты проверяемого изображения в области +/-1?

1. #x #y
2. #xField #yField

Цитата
если #xField 7 то #xStart при - будет 6

Размер поля какой?
если #xField 3, то чему будет равен #xStart? Внимательно посмотри. Ответ будет НЕ 2.

Автор: veiron 13.8.2013, 12:59

Цитата(DarkMaster @ 13.8.2013, 12:54) *

Размер поля какой?
если #xField 3, то чему будет равен #xStart? Внимательно посмотри. Ответ будет НЕ 2.

set #xField 3
if #xField < 2
set #xStart #xField - 1
end_if
Почему это не 2. Ответ в логе 2. А размер поля 6 х 6

Автор: DarkMaster 13.8.2013, 13:06

Спутал я. Не start, а end.
if #xField < 7
set #xEnd 6
else
set #xEnd #xField + 1
end_if
Подставь #xField равное 3, посчитай. Будет не 2.

Цитата
if #xField < 7

Цитата
А размер поля 6 х 6

Ничего не смущает?)

Автор: veiron 13.8.2013, 13:08

Цитата(DarkMaster @ 13.8.2013, 13:06) *

Спутал я. Не start, а end.
if #xField < 7
set #xEnd 6
else
set #xEnd #xField + 1
end_if
Подставь #xField равное 3, посчитай. Будет не 2.
Ничего не смущает?)

будет 4

Автор: DarkMaster 13.8.2013, 13:10

будет 6

Автор: veiron 13.8.2013, 13:12

Цитата(DarkMaster @ 13.8.2013, 13:10) *

будет 6

Почему, ведь 3 + 1 = 4

Автор: DarkMaster 13.8.2013, 13:12

А ты на условие посмотри. 3+1=4 не будет выполняться. Будет 6.

Автор: veiron 13.8.2013, 13:16

Цитата(DarkMaster @ 13.8.2013, 13:12) *

А ты на условие посмотри. 3+1=4 не будет выполняться. Будет 6.

это из за set #xEnd 6

Автор: DarkMaster 13.8.2013, 13:18

ага. Ты на условие вообще посмотри. У тебя поле 6*6, оно всегда будет < 7.

Автор: veiron 13.8.2013, 13:19

Цитата(DarkMaster @ 13.8.2013, 13:18) *

ага. Ты на условие вообще посмотри. У тебя поле 6*6, оно всегда будет < 7.

получается всегда 36? Значит все, скрипт работать не будет?

Автор: DarkMaster 13.8.2013, 13:24

Значит надо посмотреть на условие и изменить его для End значений.
Давай по 2 кругу =)
При каких значениях #xField у нас станет некорректным выражение set #xEnd #xField + 1?

Автор: veiron 13.8.2013, 13:31

Цитата(DarkMaster @ 13.8.2013, 13:24) *

Значит надо посмотреть на условие и изменить его для End значений.
Давай по 2 кругу =)
При каких значениях #xField у нас станет некорректным выражение set #xEnd #xField + 1?

наверно 6


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

Верно. Значит для каких значений нельзя выполнять set #xEnd #xField + 1?

получается для 6 и нельзя

Автор: DarkMaster 13.8.2013, 13:32

Цитата
наверно 6

Верно. Как ифом записать, данное условие?

Автор: veiron 13.8.2013, 13:33

Цитата(DarkMaster @ 13.8.2013, 13:32) *

Верно. Как ифом записать, данное условие?

if #xField = 6

Автор: DarkMaster 13.8.2013, 13:36

все верно.
Для симметрии можно было бы использовать > 5, либо в стартах = 1. Но принципиальной разницы нет.

Автор: veiron 13.8.2013, 13:40

Цитата(DarkMaster @ 13.8.2013, 13:36) *

все верно.
Для симметрии можно было бы использовать > 5, либо в стартах = 1. Но принципиальной разницы нет.

Код
         if #xField < 6
              if #xField > 5
                   set #xEnd 6
               end_if
         else
            set #xEnd #xField + 1
         end_if

Так правильно ?

Автор: DarkMaster 13.8.2013, 13:43

Цитата
Так правильно ?

А одним ифом? Старый по сути безпослезен. Он в 100% будет истиной.

Автор: veiron 13.8.2013, 13:44

Цитата(DarkMaster @ 13.8.2013, 13:43) *

А одним ифом? Старый по сути безпослезен. Он в 100% будет истиной.

Код
if #xField > 5
       set #xEnd 6
   else
       set #xEnd #xField + 1
end_if

Наверно тогда так.

Автор: DarkMaster 13.8.2013, 13:50

ага. Можно возвращаться к нашим баранам с одинаковыми координатами.
Как сравнить x координаты исходного изображения и изображения +/- 1 ? Берем переменные, if, пробуем.

Автор: veiron 13.8.2013, 13:52

Цитата(DarkMaster @ 13.8.2013, 13:50) *

ага. Можно возвращаться к нашим баранам с одинаковыми координатами.
Как сравнить x координаты исходного изображения и изображения +/- 1 ? Берем переменные, if, пробуем.

Код

                   if %field [ #x #y ] = %field [ #xField #yField ]
                      log обнаружена пара в ячейках #x #y и #xField #yField
                   end_if

Автор: DarkMaster 13.8.2013, 13:54

Это сравнение значений массива. При этом выражении не сравниваются индексы.

Давай с простого. Напиши сравнение x координат. Только x.

Автор: veiron 13.8.2013, 13:56

Цитата(DarkMaster @ 13.8.2013, 13:54) *

Это сравнение значений массива. При этом выражении не сравниваются индексы.

Давай с простого. Напиши сравнение x координат. Только x.

if #xField = #xStart
нашел
end_if

Автор: DarkMaster 13.8.2013, 13:58

На прошлой странице мы разбирали, какие переменные содержат Х координаты исходного изображения и проверяемого +/-1?

Автор: veiron 13.8.2013, 14:00

Цитата(DarkMaster @ 13.8.2013, 13:58) *

На прошлой странице мы разбирали, какие переменные содержат Х координаты исходного изображения и проверяемого +/-1?

if #x = #xField
нашел
end_if

Автор: DarkMaster 13.8.2013, 14:04

Во. Теперь про "=". Поскольку нам надо исключить равенство, то знак должен быть иным. Не равно в пилоте обозначается, как != либо <>.

Составь два условия неравенства: для X и для Y координат.

Автор: veiron 13.8.2013, 14:06

Цитата(DarkMaster @ 13.8.2013, 14:04) *

Во. Теперь про "=". Поскольку нам надо исключить равенство, то знак должен быть иным. Не равно в пилоте обозначается, как != либо <>.

Составь два условия неравенства: для X и для Y координат.

if #x != #xField and #y != #xField
нашел
end_if

Автор: DarkMaster 13.8.2013, 14:14

Нашел? Может быть все-таки НЕ нашел?)

Ну и подставить к сравнению значений этих ячеек.

Автор: veiron 13.8.2013, 14:16

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

Нашел? Может быть все-таки НЕ нашел?)

Ну и подставить к сравнению значений этих ячеек.

if #x #xField != #y #xField
нашел
end_if

Автор: DarkMaster 13.8.2013, 14:23

не-не. это фантастика какая-то)
if %field [ #x #y ] = %field [ #xField #yField ]
вот с этим совместить.

просто в кучу 3 условия собрать

Автор: veiron 13.8.2013, 14:32

Цитата(DarkMaster @ 13.8.2013, 14:23) *

не-не. это фантастика какая-то)
if %field [ #x #y ] = %field [ #xField #yField ]
вот с этим совместить.

просто в кучу 3 условия собрать

if %field [ #x #y ] = %field [ #xField #yField ] != [ #xField #yField ]

Автор: DarkMaster 13.8.2013, 14:32

Не изобретай велосипед. and в помощь.

Автор: veiron 13.8.2013, 14:37

Цитата(DarkMaster @ 13.8.2013, 14:32) *

Не изобретай велосипед. and в помощь.

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

Автор: DarkMaster 13.8.2013, 14:44

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

Автор: veiron 13.8.2013, 14:47

Цитата(DarkMaster @ 13.8.2013, 14:44) *

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

Код
if %field [ #x #y ] = %field [ #xField #yField ] and [#x != #xField and #y != #yField]

может так?

Автор: DarkMaster 13.8.2013, 14:49

Скобки только квадратные убери [#x != #xField and #y != #yField]
И все.

Готово.

Если сразу не заведется (не дай бог), то буду заниматься отладкой.

Автор: veiron 13.8.2013, 14:50

Цитата(DarkMaster @ 13.8.2013, 14:49) *

Скобки только квадратные убери [#x != #xField and #y != #yField]
И все.

Готово.

Если сразу не заведется (не дай бог), то буду заниматься отладкой.

Код
if %field [ #x #y ] = %field [ #xField #yField ] and #x != #xField and #y != #yField

так ?

Автор: DarkMaster 13.8.2013, 14:51

ага

Автор: veiron 13.8.2013, 14:53

Цитата(DarkMaster @ 13.8.2013, 14:51) *

ага

так все равно ни чего не находит, да и вроде ни чего не изминилось в логе?

Автор: DarkMaster 13.8.2013, 14:58

дай полный скрипт еще раз.

// тег кода внутри спойлера так же работает wink.gif

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

Автор: veiron 13.8.2013, 15:00

Цитата(DarkMaster @ 13.8.2013, 14:58) *

дай полный скрипт еще раз.

// тег кода внутри спойлера так же работает wink.gif

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

скрипт
Код
set #startOffsetX 260
set #startOffsetY 145
// Шаг сетки изображений.
// С точностью до пикселя.
set #cellOffsetX 41
set #cellOffsetY 41
// Изображения шариков
set %image [ 1 ] 476925            
set %image [ 2 ] 453298      
set %image [ 3 ] 134586    
set %image [ 4 ] 746852  
set %image [ 5 ] 643258    
set #countImage size (%image)

for #i 1 #countImage
// Имидж или колор сам выбирай.
   // set $a findimage ... %image [ #i ] %arr ...
    set $a findcolor ( 100, 100 500, 500  1 1 (%image[ #i ]) %arr  2 )
    log $a   финд колор
    for #n 1 $a 1
        set #fieldX ( %arr [ #n 1 ] - #startOffsetX ) / #cellOffsetX + 1
        set #fieldY ( %arr [ #n 2 ] - #startOffsetY ) / #cellOffsetY + 1
        log #fieldX #fieldY
        set %field [ #fieldY #fieldX ] #i
    end_for
end_for
///////////////////////////////////
for #xField 1 6 1 // Я хз какого размера у тебя поле. Предположим 10 на 10.
    for #yField 1 6 1
             log текущая ячейка #xField #yField . Значение ячейки %field [ #xField #yField ]
         if #xField < 2
            set #xStart 1
         else
            set #xStart #xField - 1
         end_if
         if #xField > 5
            set #xEnd 6
         else
            set #xEnd #xField + 1
         end_if
         if #yField < 2
            set #yStart 1
         else
            set #yStart #yField - 1
         end_if
         if #yField > 5
            set #yEnd 6
         else
            set #yEnd #yField + 1
         end_if

         for #x #xStart #xEnd 1
              for #y #yStart #yEnd 1
                   if %field [ #x #y ] = %field [ #xField #yField ] and #x != #xField and #y != #yField
                      log обнаружена пара в ячейках #x #y и #xField #yField
                   end_if
              end_for
         end_for
    end_for
end_for

что за картинка?

Автор: DarkMaster 13.8.2013, 15:01

из игры. и на седня свободен)

Автор: veiron 13.8.2013, 15:05

Цитата(DarkMaster @ 13.8.2013, 15:01) *

из игры. и на седня свободен)

Изображение
такая пойдет ?

Автор: DarkMaster 13.8.2013, 15:07

Нет. Bmp 24 бита. В противном случае происходит искажение цветов.

Автор: veiron 13.8.2013, 15:13

Цитата(DarkMaster @ 13.8.2013, 15:07) *

Нет. Bmp 24 бита. В противном случае происходит искажение цветов.

у меня почемуто радикал сам в формат png переводит((

Автор: DarkMaster 13.8.2013, 15:14

filebeam.com

Автор: veiron 13.8.2013, 15:20

Цитата(DarkMaster @ 13.8.2013, 15:14) *

filebeam.com

http://filebeam.com/1a01a1fddbfbbbb808a7a95a6ceb8d2d только она почемуто не открывается. давайте я вам акк дам с игрой?

Автор: DarkMaster 13.8.2013, 15:24

все открылось.

Автор: veiron 13.8.2013, 15:26

Цитата(DarkMaster @ 13.8.2013, 15:24) *

все открылось.

а у меня только 4545.bmp, а внизу что-то пишет Using Filebeam.com = No Waiting!

Автор: DarkMaster 13.8.2013, 15:30

Там есть кнопка скачать. Это не хостинг рисунков, а файловый хостинг.

Автор: veiron 13.8.2013, 15:35

Цитата(DarkMaster @ 13.8.2013, 15:30) *

Там есть кнопка скачать. Это не хостинг рисунков, а файловый хостинг.

Так я же английский не понимаю))

Автор: DarkMaster 13.8.2013, 17:50

if %field [ #x #y ] = %field [ #xField #yField ] and ( #x != #xField or #y != #yField )
Чуть накосячил я. Ведь достаточно чтобы только одна из двух координат была отличной у изначального и +/-1 изображения. Вроде все шуршит. Ты кстати в финдколоре не выставил шаг, у тебя там шаг стоит 1 1.

Находит 50 пар, среднее полное время работы скрипта 599.52 мс. Имхо вполне достойно.

Автор: veiron 14.8.2013, 15:59

Цитата(DarkMaster @ 13.8.2013, 17:50) *

if %field [ #x #y ] = %field [ #xField #yField ] and ( #x != #xField or #y != #yField )
Чуть накосячил я. Ведь достаточно чтобы только одна из двух координат была отличной у изначального и +/-1 изображения. Вроде все шуршит. Ты кстати в финдколоре не выставил шаг, у тебя там шаг стоит 1 1.

Находит 50 пар, среднее полное время работы скрипта 599.52 мс. Имхо вполне достойно.

Ого как у вас скрипт быстро находит. У меня на весь этот скрипт уходило около 5000 мс. А в финколоре мне что, надо заменить 1 1 на 40 40, то есть на растояние на котором меожет находиться рядом цвет?

Автор: DarkMaster 14.8.2013, 18:14

41 41
Откуда 40 то? =)

Цитата
У меня на весь этот скрипт уходило около 5000 мс.

Какой камень? Убери обязательно все строки:
log ....
Они сильно тормозят скрипт.

Автор: veiron 14.8.2013, 18:27

Цитата(DarkMaster @ 14.8.2013, 18:14) *

Какой камень? Убери обязательно все строки:
log ....
Они сильно тормозят скрипт.

Не оставил ни одного лога 2300мс, камень Intel® Core™ i7-3770 CPU @ 3400GHz

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

Гипертрейдинг включен? В диспетчере задач сколько графиков загрузки процессора?

сделай скрипт:
set linedelay 0
repeat 9999999999
set #i #i + 1
end_repeat
Насколько % этот скрипт грузит твой процессор?

Слежение за скриптом выключил?

Автор: veiron 14.8.2013, 18:36

Цитата(DarkMaster @ 14.8.2013, 18:30) *

Гипертрейдинг включен? В диспетчере задач сколько графиков загрузки процессора?

Гипертрейдинг -- где это надо смотреть ? 8
Код

сделай скрипт:
set linedelay 0
repeat 9999999999
set #i #i + 1
end_repeat
Насколько % этот скрипт грузит твой процессор?

на строчке repeat 9999999999 выбивает ошибку. если убераю одну 9 то на 11-12%

Цитата
Слежение за скриптом выключил?

нет

Автор: DarkMaster 14.8.2013, 18:38

Цитата
на строчке repeat 9999999999 выбивает ошибку

поставь чуть поменьше. Где текст ошибки то?
Цитата
нет

Ну и откуда производительность будет?

Автор: veiron 14.8.2013, 18:40

Цитата(DarkMaster @ 14.8.2013, 18:38) *

поставь чуть поменьше. Где текст ошибки то?


убрал одну 9, на 11-12%. проверте правильность скрипта и repeat 9999999999

Цитата
Ну и откуда производительность будет?

я не знаю как включать

Автор: DarkMaster 14.8.2013, 18:43

Цитата
я не знаю как включать

настроки/настройки/правая верхняя галка

Цитата
Гипертрейдинг -- где это надо смотреть ?

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

Автор: veiron 14.8.2013, 18:45

Цитата(DarkMaster @ 14.8.2013, 18:43) *

настроки/настройки/правая верхняя галка

это я знаю где вырубать, я про Гипертрейдинг.
Код
В биосе. Вырубить бы его лучше нахрен. Толку от него 0, только камень греется и однопоточные прилотжения работают на 1/2 от возможного.

а где там в биосе искать?

Автор: DarkMaster 14.8.2013, 18:49

Вообще лучше вбить в гугл точное название матери и фразу "отключить hyperthreading". Вообще должен быть в настройках камня. Где-то неподалеку от частоток.

Кстати ты говорил, что наискосок тоже пары нужно искать. Однако я на картинке видел линии из 3 одинаковых по диагонали. Нам точно надо собирать по диагонали?

кстати мать может не уметь отключать эту пакость. особенно если это ноутбук или бюджетная мать.

Автор: veiron 14.8.2013, 18:53

Цитата(DarkMaster @ 14.8.2013, 18:49) *

Вообще лучше вбить в гугл точное название матери и фразу "отключить hyperthreading". Вообще должен быть в настройках камня. Где-то неподалеку от частоток.

сча попробую че нить сломать))
Цитата

Кстати ты говорил, что наискосок тоже пары нужно искать. Однако я на картинке видел линии из 3 одинаковых по диагонали. Нам точно надо собирать по диагонали?

111211
112121
2 это искомые шары.

Цитата
кстати мать может не уметь отключать эту пакость. особенно если это ноутбук или бюджетная мать.
это стационар, а плата ASUS P8Z77-V , а бюджетная это или нет я не понимаю.

P.S если отключать ход скрипта показывает 347-468

Автор: DarkMaster 14.8.2013, 18:57

http://occlub.ru/images/posts/reviews/asus/p8z77v_pro/asus_bios_08.jpg
это на страшего брата твоей матери. разницы большой не должно быть.

Цитата
111211
112121
2 это искомые шары.

Но собирать то диагонали не надо?

Автор: veiron 14.8.2013, 19:00

Цитата(DarkMaster @ 14.8.2013, 18:57) *

http://occlub.ru/images/posts/reviews/asus/p8z77v_pro/asus_bios_08.jpg

Спасибо. Сейчас почитаю.

Цитата
это на страшего брата твоей матери. разницы большой не должно быть.
Но собирать то диагонали не надо?

Почему не надо, если переставить с первой строки 2 между двумя нижними получитсь 3 в линию.

Автор: DarkMaster 14.8.2013, 19:03

Три/четыре/пять по диагонали собирать надо или нет?
X00000
0X0000
00X000
000X00
0000X0
Вот такие линии собираются?

Автор: veiron 14.8.2013, 19:18

Цитата(DarkMaster @ 14.8.2013, 19:03) *

Три/четыре/пять по диагонали собирать надо или нет?
X00000
0X0000
00X000
000X00
0000X0
Вот такие линии собираются?

Такие нет. А вот такие собираются.
0Х0000
Х0Х000
000000
000000
000000

Отключил в биосе, скрипт работать быстрее не стал. А вот тот, что вы давали для проверкитеперь грузит процессор на 1%, вместо 11

Автор: DarkMaster 14.8.2013, 19:52

забавно. по идее должен был на 25% начать грузить и работать соответственно)

в целом включать не рекомендую. Это +10 градусов, выигрыш на 5% производительности при кодировании видео. В остальных случаях это тормоз.

Дальше есть мысли, что делать со скриптом?

в диспетчере задач сколько графиков камня стало?

Автор: veiron 14.8.2013, 20:39

Цитата(DarkMaster @ 14.8.2013, 19:52) *

Дальше есть мысли, что делать со скриптом?

1. Надо теперть перевести ячейки в координаты.
2. Искать в 3 точках совпадения цвета слева от найденной двойки и 3 совпадения цвета справа.
Цитата
в диспетчере задач сколько графиков камня стало?

Теперь почему-то 4 стало(

Автор: DarkMaster 14.8.2013, 20:48

Цитата
1. Надо теперть перевести ячейки в координаты.

это в самом, самом конце. у нас нет еще проработки 3, 4, 5 ячеек в линию.
Цитата
2. Искать в 3 точках совпадения цвета слева от найденной двойки и 3 совпадения цвета справа.

Фишка в том, что искать придется не только в право и вниз, а во все стороны. Кстати от двойки надо проверить будет только 2 координаты. Либо я не досчтиал где-то. Завтра днем меня не будет, можешь по аналогии со вторым сделать проверку 3 уровня. Ближе к вечеру посмотрим, что получилось, подправим, дальше пойдем.
Цитата
Теперь почему-то 4 стало(

Их и было 4. Мы отключили эмуляцию доп ядер. На каждое ядро приходилось еще одно виртуальное.

Автор: veiron 14.8.2013, 20:58

Цитата(DarkMaster @ 14.8.2013, 20:48) *

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

это как 3 уровня?

Цитата
Их и было 4. Мы отключили эмуляцию доп ядер. На каждое ядро приходилось еще одно виртуальное.

8 звучит лучше, чем 4))
P.S А что, надо чтобы пилот всегда не отображал ход выполнения скрипта?

Автор: DarkMaster 14.8.2013, 21:01

Цитата
это как 3 уровня?

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

Цитата
8 звучит лучше, чем 4))

А на деле в такой реализации больше проблем, чем толку.

Автор: veiron 14.8.2013, 21:10

Цитата(DarkMaster @ 14.8.2013, 21:01) *

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

так третьий ход это ведь поиск 3 точек слева и 3 справа от 2 найденных.

Автор: DarkMaster 14.8.2013, 21:14

если пара диагональная, то двух. Нарисуй мне три варианта сборки при ОДНОЙ диагональной паре.

Автор: veiron 14.8.2013, 21:20

Цитата(DarkMaster @ 14.8.2013, 21:14) *

если пара диагональная, то двух. Нарисуй мне три варианта сборки при ОДНОЙ диагональной паре.

030030
302203
030030
3 это шары по диагонали

Автор: DarkMaster 14.8.2013, 21:24

000000
000000
002000
000200
000000
000000

Нарисуй 6 вариантов сбора линии. Я тут вижу только 2+2 варианта.

000000
000000
000000
002200
000000
000000
Здесь можно их нарисовать. 3+3

Автор: veiron 14.8.2013, 21:36

Цитата(DarkMaster @ 14.8.2013, 21:24) *

000000
000000
002000
000200
000000
000000
Нарисуй 6 вариантов сбора линии. Я тут вижу только 2+2 варианта.

так к этим 2 нельзя подставить по 1 шару, только если пары подставить, так их не 6, а 10
040300
440330
002011
550200
066077
006070
Цитата
000000
000000
000000
002200
000000
000000
Здесь можно их нарисовать. 3+3

003300
003300
030030
302203
030030
000000
Вот как то так, со всех этих мест можно подставить.

Автор: DarkMaster 14.8.2013, 21:40

Цитата
так к этим 2 нельзя подставить по 1 шару, только если пары подставить

000000
000400
002040
040200
004000
000000

Вот как-то так. Подставлять пары смысла нет. Это уже следующий шаг.

Автор: veiron 14.8.2013, 21:46

Цитата(DarkMaster @ 14.8.2013, 21:40) *

000000
000400
002040
040200
004000
000000

Вот как-то так. Подставлять пары смысла нет. Это уже следующий шаг.

Ужас, как все запутано. А 4 это что, тоже шары такого цвета?

Автор: DarkMaster 14.8.2013, 21:49

да. это четыре возможные позиции третьего шара с цветом 2.

Автор: veiron 14.8.2013, 21:51

Цитата(DarkMaster @ 14.8.2013, 21:49) *

да. это четыре возможные позиции третьего шара с цветом 2.

Так это мне надо, еще один такой скрипт на форах делать ?

Автор: DarkMaster 14.8.2013, 21:53

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

Автор: veiron 14.8.2013, 22:04

Цитата(DarkMaster @ 14.8.2013, 21:53) *

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

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

Автор: DarkMaster 14.8.2013, 22:06

Главное начать писать. Тут как у писателей - самое страшное чистый лист. Две закорючки поставил - дальше пойдет.

Автор: DarkMaster 15.8.2013, 18:50

успехи есть?

Автор: veiron 15.8.2013, 19:18

Цитата(DarkMaster @ 15.8.2013, 18:50) *

успехи есть?

Код
        if #xField < 2
           set #xStart 1
        else
           set #xStart #xField + 2   // ищем на 2 клетке справа от найденного
        end_if
                if #yField < 2
           set #yStart 1
        else
           set #yStart #yField + 2   // ищем на 2 клетки ниже от найденного.
        end_if

что то не очень они сдвигаются. как с 2 сетами сделать смещение я понимаю, а как с одним что то не очень.

Автор: DarkMaster 15.8.2013, 19:36

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

Автор: veiron 15.8.2013, 19:42

Цитата(DarkMaster @ 15.8.2013, 19:36) *

во 1 измени название переменных. Ты сетами перезапишешь рабочие переменные, к которым может еще понадобиться обратиться.

Переменую переменные, ток в голову на что не приходит. Только #defx #defy я у себя только такие пишу.
Цитата
Во 2 это код под какой случай? Все шесть строк можешь не расписывать.

000000
000000
002040
000000
004000

Автор: DarkMaster 15.8.2013, 20:19

а пара то где? она же может быть поразному повернута и может быть в разные стороны от начального изображения.
Ну а в целом начал писать - пиши. Что-то хоть осмысленное пошло. Радует.
Мне когда-то в давние времена помогал писать незамысловатый прием. Человек многие вещи воспринимает, как очевидные и не задумывается над ними. Если не знаешь как что-то реализовать, подумай как ты определяешь разницу/необходимость что-то сделать.

// свалил. я седня замученный.

Автор: veiron 15.8.2013, 20:27

Цитата(DarkMaster @ 15.8.2013, 20:19) *

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

Так это надо данные из прошлого скрипта как то прикрутить.
Цитата
Ну а в целом начал писать - пиши. Что-то хоть осмысленное пошло. Радует.
Мне когда-то в давние времена помогал писать незамысловатый прием. Человек многие вещи воспринимает, как очевидные и не задумывается над ними. Если не знаешь как что-то реализовать, подумай как ты определяешь разницу/необходимость что-то сделать.

set #x
set #y
left #x #y
как так смещение сделать я знаю, у меня все скрипты на них построены. А тут, что то где то ищется, а где что, я что то туго не понимаю.

Цитата
// свалил. я седня замученный.

Пока. Картошку копал?)

Автор: DarkMaster 16.8.2013, 8:56

Цитата
Так это надо данные из прошлого скрипта как то прикрутить.

Из данных тебе нужны только координаты текущей ячейки(ты их кстати уже прикрутил), так же нужны координаты парной ячейки. Вообще будет восемь вариантов поиска третьего изображения в зависимости от того, как была расположена пара. Можно срезать до четырех, но при этом надо будет менять местами координаты. Но давай вперед забегать не будем.
Для начала напиши расположение 8 возможных пар. Изначальная картинка пусть обозначается "1", парная +/-1 "2".

Автор: DarkMaster 17.8.2013, 7:18

Ну что там?

Автор: veiron 17.8.2013, 17:27

Цитата(DarkMaster @ 17.8.2013, 7:18) *

Ну что там?

Сегодня начну пробовать. Только я не пойму, это будет отдельная часть скрипта, или она вставится в предыдущий. 2 пары найденных ведь в массив не сохранялись? И почему 8, а не 11, если искать сразу в 2 парах.
003000
030300
032030
302203
030330
003000

Автор: DarkMaster 17.8.2013, 17:49

Цитата
И почему 8, а не 11, если искать сразу в 2 парах.

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

Вставится. Но в первую очередь это надо воспринимать как самостоятельную задачу. От прошлой части скрипта нам понадобятся только 4 переменные, т.е. две координатые точки.
Цитата
2 пары найденных ведь в массив не сохранялись?

Нет. Но оно нам по сути и не нужно. Их можно взять из переменных, которые отвечают за координаты текущего поиска. Входные данные(координаты) ума много подсунуть не надо, тут главное алгоритм поиска. Ну и как я уже говорил, ты одну пару координат вполне успешно подсунул.
Цитата
003000
030300
032030
302203
030330
003000

Не очень понял суть записи. Точнее это не много не то, что я хотел. Давай, я попробую начать:
01
20
где 1 первое найденное изображение, а 2 второе парное +/-1. Размер поля даже не важен, просто перечисли возможные варианты пар (не третьей картинки, а именно пар).

Автор: veiron 17.8.2013, 18:02

Цитата(DarkMaster @ 17.8.2013, 17:49) *

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

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

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

Про это я так и понял, раз нет записи в массив.

Цитата
Не очень понял суть записи. Точнее это не много не то, что я хотел. Давай, я попробую начать:
01
20
где 1 первое найденное изображение, а 2 второе парное +/-1. Размер поля даже не важен, просто перечисли возможные варианты пар (не третьей картинки, а именно пар).

Теперь я не понял, Вообще если 2 это пара, тогда на 1 вниз и на 1 влево это и будет, возможность подставить изображение 1 к 2.

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

Цитата
Теперь я не понял, Вообще если 2 это пара, тогда на 1 вниз и на 1 влево это и будет, возможность подставить изображение 1 к 2.

Не рассматривай вопрос третьего изображения пока что. У нас может быть несколько вариантов входных данных. Ведь согласись для горизонтальной и диагональной пары надо искать в разных местах третий элемент. Прежде чем приступать к поиску третьего элемента, надо сначала разобраться как могут выглядеть найденные пары.
Цитата
01
20

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

Автор: veiron 17.8.2013, 18:22

Цитата(DarkMaster @ 17.8.2013, 18:19) *

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

Так если нет горизонтальной или вертикальной пары, диагональную нам и незачем искать, толку от нее?

Автор: DarkMaster 17.8.2013, 18:24

000000
000x00
00x0x0
000000

Цитата
Так если нет горизонтальной или вертикальной пары

Их нет, но я легко соберу тут линию =)

Автор: veiron 17.8.2013, 18:25

Цитата(DarkMaster @ 17.8.2013, 18:24) *

000000
000x00
00x0x0
000000

Их нет, но я легко соберу тут линию =)

Что вы соберете, в этом я не сомневаюсь)) Так скрипт и такие тройки сможет собирать? Я такой вариант поиска даже не рассматривал.

Автор: DarkMaster 17.8.2013, 18:28

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

Автор: veiron 17.8.2013, 18:34

Цитата(DarkMaster @ 17.8.2013, 18:28) *

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

000000
00х000
0х0100
0020х0
000х00
000000
Вот 4 точки откуда в таком расположении шара 1 и 2 можно сделать ход.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)