Показать сообщение отдельно
Старый 29.08.2010, 10:44   #19
Местный
 
Регистрация: 10.08.2010
Сообщений: 634
Сказал Спасибо: 22
Имеет 95 спасибок в 70 сообщенях
mira пока неопределено
По умолчанию

Цитата:
Сообщение от 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 программы а не ФС
скрипт он хоть и фаст но он всеже скрипт )))
mira вне форума   Ответить с цитированием