|
28.02.2009, 23:55
|
#1
|
Знающий
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений (для 6 пользователей)
|
Динамический массив - способы реализации!
Нужен двухмерный бесконечный массив.
То есть если к примеру number-это бесконечность, то мне нужен такой массив, если его представлять в обычной форме:
Dim MyArray(number, number)
;Ну типа создаем квадрат для морского боя, только размер ничем не ограничен - это мне надо!
Посоветовали пользоваться банками(банки памяти всмысле), дак что-то так ссебе впечатление оставили. Какие-то неповоротливые они, трудно с ними работать, они очевидно не дают всех тех возможностей, что могут дать обыкновенные массивы...Ну хотя бы например тем, что банки могут быть только одномерными, чтобы создавать двухмерность или трёхмерность в одном банке, придётся сильно извращаться
И вообще что-то странное с ними творится: я в цикле работаю с PokeInt ну и ResizeBank естественно, дак вот поличить правильный указательнь на ентити из банка получается только в этом цикле, если же за его пределы написать - PeekInt(bank, 4) - то с этим энтити будет программа вылетать со всем изместной мав.(((
Вообщем что делать? Типы...
|
(Offline)
|
|
01.03.2009, 00:10
|
#2
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: Динамический массив - способы реализации!
Сообщение от ELIAS
Вообщем что делать? Типы...
|
Они, родимые...
Тип в блитце - это и есть безразмерный динамический массив
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
01.03.2009, 00:10
|
#3
|
|
Ответ: Динамический массив - способы реализации!
ELIAS
пользуйся n-мерной проекцией масива в 1-мерный (в данном случае 2д проекция это X1 = Y2 * SizeX2 + X2), а 1-мерным масивом "неограниченого" размера может быть даже файл на диске
под понятием "неограниченый" я представляю себе такой масив данных обьемом 1 - 1.5 гигабайта, потому про производительность таких решений не важна для работы системы, потому если обьем данных не превышает 1-5 мегабайт то следует это всё тупо засунуть в динамические структуры (типы хотя бы) и не мучать себе голову
|
|
|
Сообщение было полезно следующим пользователям:
|
|
01.03.2009, 11:09
|
#4
|
Знающий
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений (для 6 пользователей)
|
Ответ: Динамический массив - способы реализации!
А зачем же нужны банки памяти???
Мне доверенные люди точно сказали что динамический массив в блитце - банк памяти!..
|
(Offline)
|
|
01.03.2009, 13:06
|
#5
|
|
Ответ: Динамический массив - способы реализации!
ELIAS
банк памяти это особенная структура данных, нужна она к примеру для создания пакетов для отправки через сеть, работу как буфер который может создаватся из зашифрованого файла и тд
|
|
|
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
|
|
01.03.2009, 13:46
|
#6
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Динамический массив - способы реализации!
Банки очень удобны, но из встроенных типов данных там
byte
short
int
float
К тому же, так или иначе, для удобной работы их скорее всего понадобиться обёртывать в типы и писать ряд методов. В идеале - написать на их базе класс-контейнер для произвольного типа данных.
Так же можно используя только типы и команды object-handle написать связанный список произвольной архитектуры, но "разыменование" достаточно долгая по выполнению команда.
www.boolean.name > Программирование в широком смысле слова > Алгоритмика
Туториальчик по Связанным спискам
http://forum.boolean.name/showthread.php?t=1194
www.boolean.name > Программирование игр для компьютеров > Blitz3D > FAQ
Контейнер данных
http://forum.boolean.name/showthread.php?t=5730
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
03.03.2009, 13:27
|
#7
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,359
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: Динамический массив - способы реализации!
В блице можно много раз юзать Dim допустим следующий код :
Dim map(10,10) map_width=100 map_height=100 Dim map(map_width,map_height)
Это не даст ошибки и не создаст дубликата массива map.
Полный безразмерный массив либо через типы либо так:
Dim map(0,0) global map_w global map_h
Для изменения размера вызваем Dim(map_w, map_h) предварительно привсовив им значения.
Пример на практике:
Dim map(0,0) Global map_width=20 ; Ширина мапы Global map_height=20 ; Высота мапы ; создаём мапу Dim map(map_width,map_height) For poy=0 To map_height For pox=0 To map_width map(pox,poy)=Rand(0,9); заполним ячейки случайными числами Next Next ; Поработаем с мапкой ^_^ Repeat Cls For poy=0 To map_height For pox=0 To map_width Rect pox*32,poy*32,32,32,False Text pox*32,poy*32,map(pox,poy) Next Next Flip Until KeyHit(1)
Через типы всё немного посложнее:
Опять же если речь идёт о 2D карте:
Type TArray Field dat End Type Global map_width=10 Global map_height=10 ; Создаём рандомную мапу с рандомными числами в каждой ячейке For poY=0 To map_height For pox=0 To map_width arr.TArray=New TArray arr\dat=Rand(0,9); лучайное число от нуля до девяти Next Next ; А работать с такой мапой так: Repeat pox=0 poy=0 For arr.TArray=Each TArray Rect pox*32-1,poy*32-1,32,32,False Text pox*32,poy*32,arr\dat poy=poy+1 If poy>map_height Then poy=0:pox=pox+1 Next Flip Until KeyHit(1)
Личная заметка:
Както так получилось, что первый способ у меня работает быстрее(который без типов) В принципе способ живой и не возбраняется его использовать
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
|
|
06.03.2009, 22:10
|
#8
|
Знающий
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений (для 6 пользователей)
|
Ответ: Динамический массив - способы реализации!
В blitz-FAQ от avel написано:
Вопрос: как в типе создать массив?
Ответ: Для этого просто впишите следующую строку в тип:
Field имя_массива[кол-во_элементов]
Теперь обращатся к этому массиву можно так:
указатель\имя_массива[номер_элемента] = …
|
А как создать двухмерный массив в типе???
Если писать так field array[100,2] - то блитц выдает ошибочку ((
|
(Offline)
|
|
07.03.2009, 02:46
|
#9
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Динамический массив - способы реализации!
Никак
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
07.03.2009, 15:33
|
#10
|
Знающий
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений (для 6 пользователей)
|
Ответ: Динамический массив - способы реализации!
А как тогда создать тип в типе?...
|
(Offline)
|
|
07.03.2009, 15:45
|
#11
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Динамический массив - способы реализации!
type a
field x
end type
type b
field internal.a
end type
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.03.2009, 18:17
|
#12
|
Знающий
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений (для 6 пользователей)
|
Ответ: Динамический массив - способы реализации!
Мдеее... А никто не может хотя бы словестно описать, как на блитце замутить такую вещь: при нажатии на ентер создаётся некоторое количество кубиков, расположенных по клеткам на поле Rand(1,100)xRand(1,100) - то есть всего за одно нажатие создаётся от 1 до 10000 кубиков. Причём этими кубиками можно манипулировать позже - то есть указатели на них сохраняются!!! И ещё, у каждого кубика есть по три свойства, определяющих например его цвет, которые можно считать и изменить отдельно(это соотвектсвенно свойсва r g b).
Вот... сложно! Помогите пожалуйста!
Хотя все было бы аццко просто, если бы не это ограничение на создание многомерных массивв в типе!!!
Вот как бы выглядел этот код без этого обидного недостатка блица:
Type A
Field Sq[100,100,4]
End Type
где
sq[1,1,1] - это сам ентити куба
sq[1,1,2] - r
sq[1,1,2] - g
sq[1,1,2] - b
Последний раз редактировалось ELIAS, 07.03.2009 в 18:22.
|
(Offline)
|
|
07.03.2009, 18:43
|
#13
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Динамический массив - способы реализации!
Type A
Field Cubes[100]
Field Colors[100]
End Type
Цвет можно описать одним-единственным Integer'ом $AARRGGBB (т.е. как раз 4 байта) - поетому можно обойтись 2-мя массивами
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
07.03.2009, 19:21
|
#14
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Динамический массив - способы реализации!
Любой n-мерный массив можно спроецировать на одномерный. Если конечно его размеры известны.
АВТОМАТ +1, тока не 100, а 10 000
|
(Offline)
|
|
07.03.2009, 19:40
|
#15
|
Знающий
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений (для 6 пользователей)
|
Ответ: Динамический массив - способы реализации!
Я с проекциями массивов не разобрался, (jimon говорил про них)...
Кстати, что только массивами здесь выкрутиться можно??? А нельзя никак использовать типы в типах или массив типа?
Мне кажется что раюотать с проекциями массивов жутко трудно и неудобно (( даже если научиться.
Зы: АВТОМАТ, я не понял как это с цветом???.. Как объявлять такую перемнную, присваивать ей значение и потом красить цветом из этой переменной объект??? У меня выдает ошибку
А вообще я же сказал, что цвет - это только пример, мне нужно просто помимо самого ентити 3 свойства...Пускай это будет posX, posY, posZ
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:57.
|