Цитата:
Сообщение от supernewbie
в чем разница между for o:=1 to max do и for o:=1 to 1500 do ?
как вообще реализуются такие массивы
|
моя реализация :
creatures - массив структур хранящих чаров
pciA-пакет чаринфо (если точнее его кусок)
bnew булево - чар уже имеетса в массиве или нет?
lastfree - индекс последней "дырки" образвовашейся по objectdelete
по возможности будем повторно использовать дырки если их нехватит то увеличим l2_maxcreatures (максимальный индекс используемый в массиве)
и добавим сверх
delphi Код:
n:=0;
lastfree:=-1;
index:=-1;
mc:=ClientHeader.l2_maxcreatures;
while (n<mc) do begin // перебор масива от 0 до потолкового индекса
if creatures[n].ID=pciA.ID then begin
index:=n; // если такой както уже оказалса в массиве заканчиваем
bNew:=false;
break;
end;
if creatures[n].ID=0 then lastfree:=n; // опа "дырка"! запоминаем...
inc(n);
end;
if (index= -1)then begin //ничего не нашли? пробуем использовать "дырку"
index:=lastfree;
end;
if (index= -1)then begin { и дырки тоже нет? че делать
увеличиваем массив... и дописываем новую запись на вершину увеличив потолок}
index:=mc;
inc(ClientHeader.l2_maxcreatures);
end;
тут возможнв процедуры дефрагментации чтобы скинуть потолковое значение и код прилизать поидее.
у меня тормозов никаких нет правдо это выполняет RTL программы а не ФС
скрипт он хоть и фаст но он всеже скрипт )))