metalpasha
Локальных список в блице нет, но можно сделать вручную, например:
Type TNode
Field Entity%
Field PrevNode.TNode; ссылка на предыдущий объект в списке
Field NextNode.TNode; ссылка на следующий объект в списке
End Type
Type TZone
Field HeadNode.TNode; ссылка на первый объект в списке
Field TailNode.TNode; ссылка на последний объект в списке
End Type
; добавляет объект в конец списка Zone
Function Zone_AddNode.TNode(Zone.TZone, Node.TNode)
Node\NextNode = Null
Node\PrevNode = Zone\TailNode
If Zone\TailNode <> Null Then
Zone\TailNode\NextNode = Node
Else
Zone\HeadNode = Node
End If
Zone\TailNode = Node
Return Node
End Function
; убирает объект из списка Zone
Function Zone_RemoveNode(Zone.TZone, Node.TNode)
If Node\PrevNode <> Null Then
Node\PrevNode\NextNode = Node\NextNode
Else
Zone\HeadNode = Node\NextNode
EndIf
If Node\NextNode <> Null Then
Node\NextNode\PrevNode = Node\PrevNode
Else
Zone\TailNode = Node\PrevNode
EndIf
End Function
; создаем зону
Local Zone.TZone = New TZone
; добавляем 4 объекта
Local Node1.TNode = Zone_AddNode(Zone, New TNode)
Node1\Entity = 1
Local Node2.TNode = Zone_AddNode(Zone, New TNode)
Node2\Entity = 2
Local Node3.TNode = Zone_AddNode(Zone, New TNode)
Node3\Entity = 3
Local Node4.TNode = Zone_AddNode(Zone, New TNode)
Node4\Entity = 4
; убираем второй объект
Zone_RemoveNode(Zone, Node2)
; выводим список
Local Node.TNode = Zone\HeadNode
While Node <> Null
Print(Str(Node\Entity))
Node = Node\NextNode
Wend
WaitKey()
End
или, если ты заранее знаешь максимальное кол-во объектов в таком списке, используй как уже предлагали массив, например:
Type TNode
Field Entity%
Field Slot%; номер ячейки в массиве
End Type
Type TZone
Field Size%; кол-во объектов в массиве
Field List.TNode[10]; массив объектов, макс. 10 штук
End Type
; добавляет объект в массив Zone
Function Zone_AddNode.TNode(Zone.TZone, Node.TNode)
Zone\List[Zone\Size] = Node
Node\Slot = Zone\Size
Zone\Size = Zone\Size + 1
Return Node
End Function
; убирает объект из массива Zone
Function Zone_RemoveNode(Zone.TZone, Node.TNode)
Zone\Size = Zone\Size - 1
Zone\List[Node\Slot] = Zone\List[Zone\Size]
End Function
; создаем зону
Local Zone.TZone = New TZone
; добавляем 4 объекта
Local Node1.TNode = Zone_AddNode(Zone, New TNode)
Node1\Entity = 1
Local Node2.TNode = Zone_AddNode(Zone, New TNode)
Node2\Entity = 2
Local Node3.TNode = Zone_AddNode(Zone, New TNode)
Node3\Entity = 3
Local Node4.TNode = Zone_AddNode(Zone, New TNode)
Node4\Entity = 4
; убираем второй объект
Zone_RemoveNode(Zone, Node2)
; выводим массив
Local Slot%
For Slot = 0 To Zone\Size - 1
Local Node.TNode = Zone\List[Slot]
Print(Str(Node\Entity))
Next
WaitKey()
End