Array
(
)

Coleção de objetos

Pjrm1470
   - 28 out 2009

Primeiramente não vi nada de novo no novo forum, retirando as novas ferramentas incluídas no editor, mas se dizem que vai ser melhor, acreditar que a equipe devmedia fará um bom trabalho.

A razão pelo tópico, é saber modos de se construir uma coleção de objetos.
No desenvolver de um jogo de estratégia, estou criando as classes das unidades.
(Cade a tag CODE?)

| TShip = Class
| private
|   FNome:  String;
|   FAvail: Boolean; //se esta habilitada
|   FAtk:   Integer;
|   FDef:   Integer;
|   FLife:  Integer;
| public
|   property Nome:  String  read FNome  write FNome;
|   property Avail: Boolean read FAvail write FAvail;
|   property Atk:   Integer read FAtk   write FAtk;
|   property Def:   Integer read FDef   write FDef;
|   property Life:  Integer read FLife  write FLife;
| end;
|
| TCacaPT = Class(TShip)
| end;

Pensei que num jogo de estratégia vc pode construir quantas unidades você quisesse.
Pensei que uma Array dinâmica adiantaria, mas daria estouro de memoria. Onde poderia se ter um indice de 1 a 200.000 (200 mil) ou mais, de acordo com o tempo de jogo.
"Poxa 200mil é um numero grande..." R: sim.

Gostaria de saber aonde consigo matéria sobre coleção de objetos!?
Como eu poderia fazer nesse meu caso!? Alguem tem um exemplo de como eu poderia usar um sistema de coleção que não dê um estouro de memória!?

Informações:
Plataforma: WinXP/WinVista
IDE:        Delphi 2010
Memoria:    1GB (WinXP) / 2GB (WinVista)

Att,
PJRM1470.

Guinther
|
MVP
Pontos: 5
    28 out 2009

Olá Plinio Como você está usando Delphi 2010, você tem um grande recurso nas mãos, generics. Você pode usar generics com listas. Além de ter uma coleção que aloca dados dinamicamente, os dados lá colocados são fortemente tipados, diferentes de arrays de objetos, pointers ou mesmo TObjectList. Aqui vai um exemplo: // uses Generics.Collections; var Col: TList; Ship1,Ship2: TShip; begin Col := TList.Create(); Ship1 := TShip.Create(); Ship2 := TShip.Create(); Col.Add(Ship1); Col.Add(Ship2); end; Att, Guinther Pauli Editor Geral Revista ClubeDelphi http://twitter.com/guintherpauli

0
|
0

Guinther
|
MVP
Pontos: 5
    28 out 2009

Olá Plinio

Como você está usando Delphi 2010, você tem um grande recurso nas mãos, generics. Você pode usar generics com listas. Além de ter uma coleção que aloca dados dinamicamente, os dados lá colocados são fortemente tipados, diferentes de arrays de objetos, pointers ou mesmo TObjectList.

Aqui vai um exemplo:

// uses Generics.Collections;
var
Col: TList<TShip>;
Ship1,Ship2: TShip;
begin
Col := TList<TShip>.Create();
Ship1 := TShip.Create();
Ship2 := TShip.Create();
Col.Add(Ship1);
Col.Add(Ship2);
end;

Att,

Guinther Pauli
Editor Geral Revista ClubeDelphi
http://twitter.com/guintherpauli

0
|
0

Pjrm1470
   - 28 out 2009

Mas de qualquer forma, mesmo usando Generics, isso pelo que me recordo, me permitiria ter minha TList guardando os objetos sem que eu precise me preocupar com Cast.

So para entendimento, O generics diminui a possiblidade de causar um estouro de memória de acordo com a minha situação!? Eu não irei colocar limite na minha aplicação. Pretendo deixar o usuário ter uma coleção ilimitada do tipo daquela variavel.

0
|
0

Pjrm1470
   - 30 out 2009

Fiquei no vaco. xD rsrs.
So me tira a minha duvida e ta de boa. Eu teria fechado o topico, mas somete isso não me diz se realmente irá diminuir o impacto na memoria.

Att,
Plínio.

0
|
0

Guinther
|
MVP
Pontos: 5
    30 out 2009

Olá Plinio Não se precupe quanto ao uso de memória de List, é alocado dinamicamente ;) Abs GP

0
|
0