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

 
Ответить в эту темуОткрыть новую тему
> 3D массивы в пилоте, обсуждение вариантов реализации
Zeleax
сообщение 19.2.2013, 8:36
Сообщение #1


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Цитата(BSW_rama @ 19.2.2013, 5:51) *

захотел в одном скрипте облегчить себе жизнь и оказалось что трёхмерные масивы не существуют (IMG:style_emoticons/default/sad.gif)...
а как бцыло бы хорошо.. напрмер описать матрицу 8х8 суказанием координат и значения

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

Сообщение отредактировал Zeleax - 20.2.2013, 23:48


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
BSW_rama
сообщение 19.2.2013, 20:27
Сообщение #2


****

Apprentice
Сообщений: 188
Регистрация: 28.1.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 15.728
Возраст: 32



Цитата(Zeleax @ 19.2.2013, 11:36) *

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

я привёл, если вы не заметили сэээээр.
канешно я решил задачу, но для этого пришлось использовать 3 двухмерных масивов.
масив координат х "%Xmatrix"
масив с координатами у "%Ymatrix"
массив со значениями "Zmatrix"
зачем нам команда get color, если есть if? типа того хоть и не похоже.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 19.2.2013, 20:45
Сообщение #3


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



BSW_rama
Сэр, ) например, вам нужно сохранить для координат 15, 28 значение 185.
Пишем:
Код
set %a[15 28] 185

или же
Код
init_arr %b(1) 15 28 185  // так даже лучше

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

Сообщение отредактировал Zeleax - 19.2.2013, 23:17


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
BSW_rama
сообщение 20.2.2013, 16:58
Сообщение #4


****

Apprentice
Сообщений: 188
Регистрация: 28.1.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 15.728
Возраст: 32



ты не понял мою задачу
у меня идёт обработака данных
Код

for #x 1 10 1
for #y 1 10 1
%bla[#x #y]  и куда писать несколько значений для этой ячейки?
end_for
end_for

поэтому приходится использовать несколько масивов для каждого значения
Код
%x[#x #y] 111
%y[#x #y] 222
%data[#x #y] 555
%prochee[#x #y] 74747

и т.д. конкретный пример применения "многомерного масива" я уже приводил - расчёт линии из трёх предметов с последующим ходом.
в игре для сапёра тоже нужно 3 паралельных масива..
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 20.2.2013, 20:23
Сообщение #5


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



BSW_rama
Код
// для последовательного доступа к массиву координат и их значениям
set linedelay 1
set delimiter ' '
set #k 0
for #x 1 10 1
  for #y 1 10 1
    set #k #k + 1
    init_arr %bla(#k) #x #y 1 2 3 4 5 6 7 8 9
    log %bla[#k]
  end_for
end_for
set #s size( %bla[1] ) - 2
log Инициализировано #k координат, к каждой относится #s значений
end_script


Код
// для произвольного доступа к массиву координат и их значениям
set linedelay 1
set delimiter ' '
set #k 0
for #x 1 10 1
  for #y 1 10 1
    set #k #k + 1
    set %nums[#x #y] #k
    init_arr %bla(#k) 1 2 3 4 5 6 7 8 9
    log (#x #y) = %bla[#k]
  end_for
end_for
set #s size( %bla[1] )
log Инициализировано #k координат, к каждой относится #s значений
end_script


Сообщение отредактировал Zeleax - 20.2.2013, 20:45


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 21.2.2013, 15:46
Сообщение #6


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



Саперу не надо ни 3д массива, ни трех массивов, ему хватит одного двумерного. Просто его надо грамотно использовать.

От 3д отказались в самом начале появления массивов, из-за их крайне редкого использования, и непомерного требования к памяти.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
BSW_rama
сообщение 21.2.2013, 16:51
Сообщение #7


****

Apprentice
Сообщений: 188
Регистрация: 28.1.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 15.728
Возраст: 32



если не сложно можно вот эту программку с одним масивом?
Код

:x6
for #ly1 1 8 1
for #lx1 1 7 1
set #lx2 #lx1 + 1
set #lx3 #lx1 + 2
set #ly2 #ly1 + 1
set #r %m[#lx1, #ly1] + %m[#lx2, #ly2] + %m[#lx3, #ly1]  
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left %polex[#lx2 #ly2], %poley[#lx2 #ly2]
wait 10
left %polex[#lx2 #ly1], %poley[#lx2 #ly1]
end_if
set #r %m[#lx1, #ly2] + %m[#lx2, #ly1] + %m[#lx3, #ly2]  
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left %polex[#lx2 #ly1], %poley[#lx2 #ly1]
wait 10
left %polex[#lx2 #ly2], %poley[#lx2 #ly2]
end_if
set #r %m[#lx1, #ly1] + %m[#lx2, #ly1] + %m[#lx3, #ly2]  
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left %polex[#lx3 #ly2], %poley[#lx3 #ly2]
wait 10
left %polex[#lx3 #ly1], %poley[#lx3 #ly1]
end_if
set #r %m[#lx1, #ly2] + %m[#lx2, #ly2] + %m[#lx3, #ly1]  
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left %polex[#lx3 #ly1], %poley[#lx3 #ly1]
wait 10
left %polex[#lx3 #ly2], %poley[#lx3 #ly2]
end_if
set #r %m[#lx1, #ly2] + %m[#lx2, #ly1] + %m[#lx3, #ly1]  
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left %polex[#lx1 #ly2], %poley[#lx1 #ly2]
wait 10
left %polex[#lx1 #ly1], %poley[#lx1 #ly1]
end_if
set #r %m[#lx1, #ly1] + %m[#lx2, #ly2] + %m[#lx3, #ly2]  
if #r = 3 or #r = 15 or #r = 60 or #r = 300 or #r = 1500 or #r = 3000
left %polex[#lx1 #ly1], %poley[#lx1 #ly1]
wait 10
left %polex[#lx1 #ly2], %poley[#lx1 #ly2]
end_if
end_for
end_for
return
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 22.2.2013, 10:08
Сообщение #8


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



Думаю не сложно, но даже не смотрел. Без форматирования надоело по строчкам бегать. Однако даже с форматированием небуду его ковырять, есть чего в пилоте блее полезного делать.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
BSW_rama
сообщение 23.2.2013, 19:51
Сообщение #9


****

Apprentice
Сообщений: 188
Регистрация: 28.1.2013
Группа: Пользователи
Наличность: 0
Пользователь №: 15.728
Возраст: 32



тема сменила название.. т.е. как реализовать?
на практике трёхмерные масивы нужны для решения задач в порядковых матрицах. т.е. там нет больших чисел, там есть только указатели порядковых элементов. при этом первые 2 указателя массива уйдут на координаты порядкового указателя элемента %a[#x #y #z], а третий элемент сосно его значения, напримет 1 - это координаты по оси х в реальной плоскости, 2 это координаты по оси "у" в реальной плоскости, 3 - скажем цвет, 4 - какой-нить ID и т.д.
поэтому для 3D массива можно смело вводить ограничение 255х255х255. покрайней мере для програмки такого масштаба этого будет заглазище.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 27.2.2013, 20:42
Сообщение #10


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Я уже привел примеры реализации хранения 9 произвольных параметров для _каждой_ координаты.
https://forum.uokit.com/index.php?s=&sh...st&p=186668
Что еще тут объяснять- не знаю


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
esqado
сообщение 27.2.2013, 21:18
Сообщение #11


*****

Journeyman
Сообщений: 357
Регистрация: 5.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.217



Ну раз такая пьянка...
Даешь объедки и классы! Как реализовать свойства и методы?!


--------------------
В обычном программировании: любое значение может быть преобразовано в тип string
В программировании Pilot: любое значение должно быть типа имейдж.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 27.2.2013, 21:32
Сообщение #12


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Цитата(zavas @ 27.2.2013, 22:18) *

Ну раз такая пьянка...
Даешь объедки и классы! Как реализовать свойства и методы?!

Раз такая пьянка - C# (C++) в руки и творите что угодно )


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
esqado
сообщение 27.2.2013, 22:04
Сообщение #13


*****

Journeyman
Сообщений: 357
Регистрация: 5.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.217



Шутка не удалась...
Если бы я с этим разобрался - я был бы королём


--------------------
В обычном программировании: любое значение может быть преобразовано в тип string
В программировании Pilot: любое значение должно быть типа имейдж.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 27.2.2013, 22:20
Сообщение #14


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Есть книжки в инете C++ за 20 уроков и т.п.


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
esqado
сообщение 27.2.2013, 22:23
Сообщение #15


*****

Journeyman
Сообщений: 357
Регистрация: 5.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.217



Занимаюсь.


--------------------
В обычном программировании: любое значение может быть преобразовано в тип string
В программировании Pilot: любое значение должно быть типа имейдж.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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