Показать сообщение отдельно
Старый 03.03.2009, 13:27   #7
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений
(для 6,854 пользователей)
Ответ: Динамический массив - способы реализации!

В блице можно много раз юзать 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)