|
|
  |
Упростить скрипт |
|
|
veiron |
12.8.2013, 16:29
|
       
Master
Сообщений: 1.264
Регистрация: 22.5.2012 Группа: Пользователи Наличность: 0 Из: Белоруссии
Пользователь №: 14.972

|
Цитата(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 блока на один цвет. Потому и скрипт очень длинный получается.
|
|
|
|
veiron |
12.8.2013, 20:21
|
       
Master
Сообщений: 1.264
Регистрация: 22.5.2012 Группа: Пользователи Наличность: 0 Из: Белоруссии
Пользователь №: 14.972

|
Цитата(DarkMaster @ 12.8.2013, 19:39)  вместо %arr вроде.
Я дико извеняюсь за свое незнание, но как это вместо %arr, если у меня в нем записаны координаты на сколько мне надо сместится по клеткам поля, что бы найтигде может быть нужный шар с цветом. Цитата Чтобы вот этой ерундой не заниматься, есть field, в котором достаточно четко прописаны шары и цвета. Вообще после создания field тебе больше не нужно обращаться к цветам. Только перебор внутри массива. Весь смысл был уйти от поисков на экране. У тебя есть вся необходимая информация в %field, Делай if'ы на ячейки. Я так понимаю, что я должен просканировать поле и записать в массив field все поле. А как потом в этом массиве найти нужный цвет, да еще потом найти 2 шара по горизонтали и 2 по вертикали, а потом еще проверить 6 точек по горизонтали и 6 точек по вертикали, и все это с одного массива, в котором не понятно где какой цвет и координаты.
|
|
|
|
DarkMaster |
12.8.2013, 21:05
|
          
Модератор UOPilot
Сообщений: 9.742
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29658
Пользователь №: 11.279

|
Цитата Я дико извеняюсь за свое незнание, но как это вместо %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 Таким образом мы переберем все поле, найдем все пары. // Код не прогонял, но вроде ошибок быть не должно. Не забудь, что пока ты не сделаешь проверку на выход за пределы массива, ты не сможешь искать пары в крайних строках и столбцах.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
veiron |
12.8.2013, 22:05
|
       
Master
Сообщений: 1.264
Регистрация: 22.5.2012 Группа: Пользователи Наличность: 0 Из: Белоруссии
Пользователь №: 14.972

|
Цитата(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
|
          
Модератор UOPilot
Сообщений: 9.742
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29658
Пользователь №: 11.279

|
Цитата Не забудь, что выходить за пределы массива нельзя.
Сорри даже в голову ни чего не приходит как это выполнить, все что я умею, это пользоваться не в полном обьеме ифами а больше ничего и не надо. Цитата На 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. дальше - завтра. я спать)
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
veiron |
12.8.2013, 22:29
|
       
Master
Сообщений: 1.264
Регистрация: 22.5.2012 Группа: Пользователи Наличность: 0 Из: Белоруссии
Пользователь №: 14.972

|
Цитата(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
|
          
Модератор UOPilot
Сообщений: 9.742
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29658
Пользователь №: 11.279

|
Цитата Так я в ифе умею только if 161, 343 73130 тоесть указывать координаты и цвет Жмем ?/Помощь по языку скриптов, либо идем на вики. Читаем про иф и сравнение чисел. Цитата Так я после первого вагона дальше и не пойду, зачем мне шпалы головой собирать. В данном случае ты именно идешь. Цитата даже поле с 6х6 уменьшил до 3х3 думал так пойдет, не вышло иногда очень не хватает бумажки и рядом сидящего человека. У поля 4 угла и 4 грани(края в данном случае). Ты изменяешь 2 угла, 2 грани. Возьми бумажку, не поленись. Расчерти морской бой. Знаешь игру такую? Обычно одну сторону нумеруют цифрами, а другую буквами. Пронумеруй обе стороны цифрами. Каждый раз когда ты обращаешься к массиву, ты "стреляешь в морской бой". Смысл тот же самый 1 в 1. Стреляю в 5/4 - это обращение к ячейке массива 5/4. Так вот. От того, что ты в поле 6 на 6 стал стрелять только 1-3 на 1-3 (посмотри на бумажку!), ты ушел от всех краев? Теперь несколько приземленнее. Посмотри в скрипт. Где расчитывается поле поиска пары? Об этом уже писал. Найди в скрипте этот момент, напиши сюда.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
veiron |
13.8.2013, 7:17
|
       
Master
Сообщений: 1.264
Регистрация: 22.5.2012 Группа: Пользователи Наличность: 0 Из: Белоруссии
Пользователь №: 14.972

|
Цитата(DarkMaster @ 13.8.2013, 7:12)  Жмем ?/Помощь по языку скриптов, либо идем на вики. Читаем про иф и сравнение чисел.
Я уже читал про это. if 4 > 5 Цитата ты ушел от всех краев? нет Цитата Теперь несколько приземленнее. Посмотри в скрипт. Где расчитывается поле поиска пары? Об этом уже писал. Найди в скрипте этот момент, напиши сюда. Код if %field [ #x #y ] = %field [ #xField #yField ] log обнаружена пара в ячейках #x #y и #xField #yField end_if
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|