(06-11-2023, 08:32 AM)sivacc Wrote: Thanks Terry ! didnt know ReDim x(0) as Integer is ok ?
You're welcome. Glad I could help.
DIM and REDIM will accept any index value(s) for an array. All legal:
DIM x(-1 TO 10) AS <your_type_here>
DIM x(-100 TO -10) AS <your_type_here>
DIM x(50 TO 100) AS <your_type_here>
DIM x(1 TO 10, 50 TO 100) AS <your_type_here>
All of the DIMs above could also be REDIM if you like for dynamic arrays.
When you declare an array with an index of 0 -> DIM x(0) <- you are actually creating an array with one value. Remember, QB64 and most other programming languages treat zero as a valid amount.
DIM x(0)
x(0) = 10
Many times I'll create dynamic arrays at the top of my code with a 0 index, such as for a ship firing bullets. As each bullet is fired I simply increase the size of the dynamic array to accommodate.
TYPE Type_Bullet
x AS SINGLE ' x coordinate of bullet
y AS SINGLE ' y coordinate of bullet
vx AS SINGLE ' x vector (travel)
vy AS SINGLE ' y vector (travel)
Alive AS INTEGER ' is bullet still active? (true/false)
END TYPE
REDIM Bullet(0) AS Type_Bullet ' player bullet array
<later in the code>
IF PlayerFiredBullet THEN ' did player fire bullet?
REDIM _PRESERVE Bullet(UBOUND(Bullet) + 1) AS Type_Bullet ' increase the size of array while preserving data already contained within
Bullet(UBOUND(Bullet)).x = ShipX ' apply new bullet values
Bullet(UBOUND(Bullet)).y = ShipY
Bullet(UBOUND(Bullet)).vx = ShipVx
Bullet(UBOUND(Bullet)).vy = ShipVy
Bullet(UBOUND(Bullet)).Alive = -1
END IF
Here is the link to the wiki for DIM:
https://qb64phoenix.com/qb64wiki/index.php/DIM