А может и не управлюсь...))) вот обновлённый код:
Code
Procedure FIZIKA;
var
i:integer;
begin
//проверка сетки раз в 16 мс
{if step_setka=0 then begin}
for i:=1 to MAX_BLOCK do begin
if (blok[i].posY=0) and (blok[i].postavlen=true) or (blok[i].posY>0) and (blok[i].posY<16) and (blok[i].postavlen=true) then begin setka_Y[1]:=1 ; blok[i].setka_YY:=1 end else begin setka_Y[1] :=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=16) and (blok[i].postavlen=true) or (blok[i].posY>16) and (blok[i].posY<32) and (blok[i].postavlen=true) then begin setka_Y[2]:=1 ; blok[i].setka_YY:=2 end else begin setka_Y[2] :=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=32) and (blok[i].postavlen=true) or (blok[i].posY>32) and (blok[i].posY<48) and (blok[i].postavlen=true) then begin setka_Y[3]:=1 ; blok[i].setka_YY:=3 end else begin setka_Y[3] :=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=48) and (blok[i].postavlen=true) or (blok[i].posY>48) and (blok[i].posY<64) and (blok[i].postavlen=true) then begin setka_Y[4]:=1 ; blok[i].setka_YY:=4 end else begin setka_Y[4] :=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=64) and (blok[i].postavlen=true) or (blok[i].posY>64) and (blok[i].posY<80) and (blok[i].postavlen=true) then begin setka_Y[5]:=1 ; blok[i].setka_YY:=5 end else begin setka_Y[5] :=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=80) and (blok[i].postavlen=true) or (blok[i].posY>80) and (blok[i].posY<96) and (blok[i].postavlen=true) then begin setka_Y[6]:=1 ; blok[i].setka_YY:=6 end else begin setka_Y[6] :=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=96) and (blok[i].postavlen=true) or (blok[i].posY>96) and (blok[i].posY<112) and (blok[i].postavlen=true) then begin setka_Y[7]:=1 ; blok[i].setka_YY:=7 end else begin setka_Y[7] :=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=112) and (blok[i].postavlen=true) or (blok[i].posY>112) and (blok[i].posY<128) and (blok[i].postavlen=true) then begin setka_Y[8]:=1 ; blok[i].setka_YY:=8 end else begin setka_Y[8] :=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=128) and (blok[i].postavlen=true) or (blok[i].posY>128) and (blok[i].posY<144) and (blok[i].postavlen=true) then begin setka_Y[9]:=1 ; blok[i].setka_YY:=9 end else begin setka_Y[9] :=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=144) and (blok[i].postavlen=true) or (blok[i].posY>144) and (blok[i].posY<160) and (blok[i].postavlen=true) then begin setka_Y[10]:=1; blok[i].setka_YY:=10 end else begin setka_Y[10]:=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=160) and (blok[i].postavlen=true) or (blok[i].posY>160) and (blok[i].posY<176) and (blok[i].postavlen=true) then begin setka_Y[11]:=1; blok[i].setka_YY:=11 end else begin setka_Y[11]:=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=176) and (blok[i].postavlen=true) or (blok[i].posY>176) and (blok[i].posY<192) and (blok[i].postavlen=true) then begin setka_Y[12]:=1; blok[i].setka_YY:=12 end else begin setka_Y[12]:=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=192) and (blok[i].postavlen=true) or (blok[i].posY>192) and (blok[i].posY<208) and (blok[i].postavlen=true) then begin setka_Y[13]:=1; blok[i].setka_YY:=13 end else begin setka_Y[13]:=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=208) and (blok[i].postavlen=true) or (blok[i].posY>208) and (blok[i].posY<224) and (blok[i].postavlen=true) then begin setka_Y[14]:=1; blok[i].setka_YY:=14 end else begin setka_Y[14]:=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=224) and (blok[i].postavlen=true) or (blok[i].posY>224) and (blok[i].posY<240) and (blok[i].postavlen=true) then begin setka_Y[15]:=1; blok[i].setka_YY:=15 end else begin setka_Y[15]:=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=240) and (blok[i].postavlen=true) or (blok[i].posY>240) and (blok[i].posY<256) and (blok[i].postavlen=true) then begin setka_Y[16]:=1; blok[i].setka_YY:=16 end else begin setka_Y[16]:=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=256) and (blok[i].postavlen=true) or (blok[i].posY>256) and (blok[i].posY<272) and (blok[i].postavlen=true) then begin setka_Y[17]:=1; blok[i].setka_YY:=17 end else begin setka_Y[17]:=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=272) and (blok[i].postavlen=true) or (blok[i].posY>272) and (blok[i].posY<288) and (blok[i].postavlen=true) then begin setka_Y[18]:=1; blok[i].setka_YY:=18 end else begin setka_Y[18]:=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=288) and (blok[i].postavlen=true) or (blok[i].posY>288) and (blok[i].posY<304) and (blok[i].postavlen=true) then begin setka_Y[19]:=1; blok[i].setka_YY:=19 end else begin setka_Y[19]:=0; blok[i].setka_YY:=0 end;
if (blok[i].posY=304) and (blok[i].postavlen=true) or (blok[i].posY>304) and (blok[i].posY<320) and (blok[i].postavlen=true) then begin setka_Y[20]:=1; blok[i].setka_YY:=20 end else begin setka_Y[20]:=0; blok[i].setka_YY:=0 end;
//if blok[i].posY=320 then begin setka_Y[]:=1 end;
end;//цикл
{end;//условие}
for i:=1 to MAX_BLOCK do begin
st_X:=blok[i].setka_XX;
st_Y:=blok[i].setka_YY;
if (setka_Y[st_Y+1]=0) and (blok[i].postavlen=true) then begin blok[i].padenie:=true end else begin blok[i].padenie:=false end;
if (blok[i].padenie=true) and (blok[i].postavlen=true) and (blok[i].zakreplen=false) then begin blok[i].posY:=blok[i].posY+1 end else begin blok[i].padenie:=false end;
end;
//моя информация
if blok[1].padenie=true then begin DrawText('падение включено',0,12); end else begin DrawText('падение выключено',0,12); end;
DrawText('позиция Y:'+(blok[1].posY),0,24);
DrawText('номер сетки Y:'+(blok[1].setka_YY),0,36);
end;//процедура
я подправил тот недочёт, но есть небольшое НО, Мидлет зависает когда блок уходит на какое то определенное кол-во пиксилей(я так полагаю что блок переходит за предполагаемую "границу") причём я БЫЛ уверен что это происходит из-за того что когда блок падаает и достаёт до координаты Y 304 номер сетки в которой по идее стоит значение 20 в условии будет равно 21 поэтому и мидлет "падает", но по какой то причине это не так! Когда я вывожу информацию на экран то перед моими глазами падает блок но номер сетки блока и не думает меняться! Возможно кто то найдет мой недочет