Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D

Ответ
 
Опции темы
Старый 28.02.2009, 23:55   #1
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Смех Динамический массив - способы реализации!

Нужен двухмерный бесконечный массив.
То есть если к примеру number-это бесконечность, то мне нужен такой массив, если его представлять в обычной форме:

Dim MyArray(number, number)
;Ну типа создаем квадрат для морского боя, только размер ничем не ограничен - это мне надо!

Посоветовали пользоваться банками(банки памяти всмысле), дак что-то так ссебе впечатление оставили. Какие-то неповоротливые они, трудно с ними работать, они очевидно не дают всех тех возможностей, что могут дать обыкновенные массивы...Ну хотя бы например тем, что банки могут быть только одномерными, чтобы создавать двухмерность или трёхмерность в одном банке, придётся сильно извращаться
И вообще что-то странное с ними творится: я в цикле работаю с PokeInt ну и ResizeBank естественно, дак вот поличить правильный указательнь на ентити из банка получается только в этом цикле, если же за его пределы написать - PeekInt(bank, 4) - то с этим энтити будет программа вылетать со всем изместной мав.(((

Вообщем что делать? Типы...
(Offline)
 
Ответить с цитированием
Старый 01.03.2009, 00:10   #2
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Динамический массив - способы реализации!

Сообщение от ELIAS Посмотреть сообщение
Вообщем что делать? Типы...
Они, родимые...
Тип в блитце - это и есть безразмерный динамический массив
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ELIAS (01.03.2009)
Старый 01.03.2009, 00:10   #3
jimon
 
Сообщений: n/a
Ответ: Динамический массив - способы реализации!

ELIAS
пользуйся n-мерной проекцией масива в 1-мерный (в данном случае 2д проекция это X1 = Y2 * SizeX2 + X2), а 1-мерным масивом "неограниченого" размера может быть даже файл на диске
под понятием "неограниченый" я представляю себе такой масив данных обьемом 1 - 1.5 гигабайта, потому про производительность таких решений не важна для работы системы, потому если обьем данных не превышает 1-5 мегабайт то следует это всё тупо засунуть в динамические структуры (типы хотя бы) и не мучать себе голову
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ELIAS (01.03.2009)
Старый 01.03.2009, 11:09   #4
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Ответ: Динамический массив - способы реализации!

А зачем же нужны банки памяти???
Мне доверенные люди точно сказали что динамический массив в блитце - банк памяти!..
(Offline)
 
Ответить с цитированием
Старый 01.03.2009, 13:06   #5
jimon
 
Сообщений: n/a
Ответ: Динамический массив - способы реализации!

ELIAS
банк памяти это особенная структура данных, нужна она к примеру для создания пакетов для отправки через сеть, работу как буфер который может создаватся из зашифрованого файла и тд
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
ELIAS (03.03.2009), NitE (01.03.2009)
Старый 01.03.2009, 13:46   #6
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Alex_Noc (01.03.2009)
Старый 03.03.2009, 13:27   #7
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: Динамический массив - способы реализации!

В блице можно много раз юзать 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 за это полезное сообщение:
3dr1aN (03.03.2009), ABTOMAT (03.03.2009), Alex_Noc (05.03.2009), ELIAS (03.03.2009)
Старый 06.03.2009, 22:10   #8
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Ответ: Динамический массив - способы реализации!

В blitz-FAQ от avel написано:
Вопрос: как в типе создать массив?

Ответ: Для этого просто впишите следующую строку в тип:

Field имя_массива[кол-во_элементов]

Теперь обращатся к этому массиву можно так:

указатель\имя_массива[номер_элемента] = …
А как создать двухмерный массив в типе???
Если писать так field array[100,2] - то блитц выдает ошибочку ((
(Offline)
 
Ответить с цитированием
Старый 07.03.2009, 02:46   #9
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Динамический массив - способы реализации!

Никак
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 07.03.2009, 15:33   #10
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Ответ: Динамический массив - способы реализации!

А как тогда создать тип в типе?...
(Offline)
 
Ответить с цитированием
Старый 07.03.2009, 15:45   #11
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ELIAS (07.03.2009)
Старый 07.03.2009, 18:17   #12
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 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
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 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
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Динамический массив - способы реализации!

Любой n-мерный массив можно спроецировать на одномерный. Если конечно его размеры известны.

АВТОМАТ +1, тока не 100, а 10 000
(Offline)
 
Ответить с цитированием
Старый 07.03.2009, 19:40   #15
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Ответ: Динамический массив - способы реализации!

Я с проекциями массивов не разобрался, (jimon говорил про них)...
Кстати, что только массивами здесь выкрутиться можно??? А нельзя никак использовать типы в типах или массив типа?
Мне кажется что раюотать с проекциями массивов жутко трудно и неудобно (( даже если научиться.

Зы: АВТОМАТ, я не понял как это с цветом???.. Как объявлять такую перемнную, присваивать ей значение и потом красить цветом из этой переменной объект??? У меня выдает ошибку

А вообще я же сказал, что цвет - это только пример, мне нужно просто помимо самого ентити 3 свойства...Пускай это будет posX, posY, posZ
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Lib_array2d - Динамический двухмерный массив odd Библиотеки 18 23.11.2013 01:31
Lib_bytes - Динамический массив байт odd Библиотеки 9 07.03.2011 19:56
A* и способы его оптимизации SubZer0 Алгоритмика 29 24.01.2011 12:10
Как сделать динамический массив целых чисел? artemff Основной форум 2 31.12.2009 03:51
Способы сжатия графики Phantom FAQ 26 12.10.2008 20:24


Часовой пояс GMT +4, время: 07:56.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com