Вашему вниманию представлена процедура, которая отвечает за поведение монстров в моей игре. Здесь реализован простенький штучный интеллект. Возможно кому-то будет интересно и принесет пользу в создании своих игр
procedure Monstr_Draw; var i,j,zz:integer; vzaklinanii,ubeganiye:boolean; Obzor:integer; begin vzaklinanii:=false; //form2.vrag_health.Visible:=false;
//zaderzhka pokaza udara v tsiklah
//proverka mozhet li monstr udarit geroya for i:=round(Player.x/60)-1 to round(Player.x/60)+1 do for j:=round(Player.y/60)-1 to round(Player.y/60)+1 do if Karta.monsters[i,j,1]>0 then begin
//vibor pravilnogo povorota //esli geroy snizu if (round(Player.x/60)=i) and (round(Player.y/60)>j) then Monsters[Karta.monsters[i,j,2]].povorot:=1; //esli geroy sverhu if (round(Player.x/60)=i) and (round(Player.y/60)<j) then Monsters[Karta.monsters[i,j,2]].povorot:=2; //esli geroy sleva if (round(Player.x/60)<i) and (round(Player.y/60)=j) then Monsters[Karta.monsters[i,j,2]].povorot:=3; //esli geroy sprava if (round(Player.x/60)>i) and (round(Player.y/60)=j) then Monsters[Karta.monsters[i,j,2]].povorot:=4; //esli geroy snizu sleva if (round(Player.x/60)<i) and (round(Player.y/60)>j) then Monsters[Karta.monsters[i,j,2]].povorot:=5; //esli geroy snizu sprava if (round(Player.x/60)>i) and (round(Player.y/60)>j) then Monsters[Karta.monsters[i,j,2]].povorot:=6; //esli geroy sverhu sleva if (round(Player.x/60)<i) and (round(Player.y/60)<j) then Monsters[Karta.monsters[i,j,2]].povorot:=7; //esli geroy sverhu sprava if (round(Player.x/60)>i) and (round(Player.y/60)<j) then Monsters[Karta.monsters[i,j,2]].povorot:=8;
//proveryaem zaderzhku udara if monsters[Karta.monsters[i,j,2]].udar>0 then monsters[Karta.monsters[i,j,2]].udar:=monsters[Karta.monsters[i,j,2]].udar+1;
//esli prishlo vremya dlya udara obnulyaem if (monsters[Karta.monsters[i,j,2]].udar=monsters[Karta.monsters[i,j,2]].SkorostUdara) then monsters[Karta.monsters[i,j,2]].udar:=0;
monsters[Karta.monsters[i,j,2]].MonstersUron:=0;
if ((Karta.monsters[i,j,1]<>0) //and (i<>Player.x) and (monsters[Karta.monsters[i,j,2]].udar=0) and (monsters[Karta.monsters[i,j,2]].visible=true))
or ((Karta.monsters[i,j,1]<>0) //and (j<>Player.y) and (monsters[Karta.monsters[i,j,2]].udar=0) and (monsters[Karta.monsters[i,j,2]].visible=true)) then
begin //monstr udaril poetomu zapuskaem zaderzhku udara monsters[Karta.monsters[i,j,2]].udar:=1;
//prorisovka magicheskoy ikonki esli monstr popal na zaklinaniye if (mag.ispolzovaniye<>9) and (mag.ispolzovaniye<>7) then monsters[Karta.monsters[i,j,2]].Fight:=true;
//proverka na popadaniye i promah randomize; buh1:=random(Player.lovkost+monsters[Karta.monsters[i,j,2]].metkost)+1;
//esli ispolzovano zaklinaniye kamennaya kozha if (mag.ispolzovaniye=9)
or ( (Player.Tip_oruzhiya='posoh') and (Posohi[Player.odezhda[11]].zaklinaniye='Щит') and ( Posohi[Player.odezhda[11]].DlitMin<=Posohi[Player.odezhda[11]].dlitelnost+Posohi[Player.odezhda[11]].power ) and (Posohi[Player.odezhda[11]].DlitMin>=0) )
or ( (Player.Tip_oruzhiya='posoh') and (Posohi[Player.odezhda[11]].zaklinaniye='Ослепление') and ( Posohi[Player.odezhda[11]].DlitMin<=Posohi[Player.odezhda[11]].dlitelnost+Posohi[Player.odezhda[11]].power ) and (Posohi[Player.odezhda[11]].DlitMin>=0) )
then monsters[Karta.monsters[i,j,2]].Fight:=false
else begin if (Player.health>0) and (buh1>Player.lovkost) and (mag.ispolzovaniye<>9) then begin monsters[Karta.monsters[i,j,2]].MonstersUron:=1; if (mag.ispolzovaniye=5) then begin Player.health:=Player.health - round(monsters[Karta.monsters[i,j,2]].sila/2); monsters[Karta.monsters[i,j,2]].NURON:= monsters[Karta.monsters[i,j,2]].NURON+round(monsters[Karta.monsters[i,j,2]].sila/2); end
else begin Player.health:=Player.health-monsters[Karta.monsters[i,j,2]].sila; monsters[Karta.monsters[i,j,2]].NURON:= monsters[Karta.monsters[i,j,2]].NURON+monsters[Karta.monsters[i,j,2]].sila; monsters[Karta.monsters[i,j,2]].NPOPADANIYA:=monsters[Karta.monsters[i,j,2]].NPOPADANIYA+1; end; end;
if (Player.health>0) and (buh1<=Player.lovkost) and (mag.ispolzovaniye<>9) then begin monsters[Karta.monsters[i,j,2]].MonstersUron:=2; monsters[Karta.monsters[i,j,2]].NPROMAHI:= monsters[Karta.monsters[i,j,2]].NPROMAHI+1; end;
end;
end; end;
//obnuleniye vseh monstrov v nachale for zz:=1 to nomer do begin
//ne derutsya v nachale if Monsters[zz].health>0 then begin Monsters[zz].Go:=false; end;
//esli ubit to cherez skolko poyavitsya if Monsters[zz].health<=0 then begin Monsters[zz].Poyavleniye:=Monsters[zz].Poyavleniye+1; if Monsters[zz].Poyavleniye>=Monsters[zz].Poyavleniye_max then begin Monsters[zz].Poyavleniye:=0; case monsters[zz].tip of 1:monsters[zz].health:=90; 2:monsters[zz].health:=120; 3:monsters[zz].health:=200; 4:monsters[zz].health:=300; end; Monsters[zz].Visible:=true; end; end;
end;
//proverka na prorisovku magicheskoy ikonki for i:=round(Mag.x/60)-mag.radius to round(Mag.x/60)+mag.radius do for j:=round(Mag.y/60)-mag.radius to round(Mag.y/60)+mag.radius do begin
if (Monsters[Karta.monsters[i,j,2]].ubezhal=false) and (Karta.monsters[i,j,1]<>0) then begin //proverka popadaniya monstra na zaklinaniye case mag.ispolzovaniye of //esli popal na zibuchiy pesok 1:begin //for ii:=round(Mag.x/60)-mag.radius to round(Mag.x/60)+mag.radius do //for jj:=round(Mag.y/60)-mag.radius to round(Mag.y/60)+mag.radius do //begin // if (round(Monsters[Karta.monsters[i,j,2]].x/60)=ii) // and (round(Monsters[Karta.monsters[i,j,2]].y/60)=jj) // and (monsters[Karta.monsters[i,j,2]].visible=true) then Monsters[Karta.monsters[i,j,2]].vzaklinanii:=true; //end; end;
//esli popal na zamedleniye 4:begin //for ii:=round(Mag.x/60)-mag.radius to round(Mag.x/60)+mag.radius do //for jj:=round(Mag.y/60)-mag.radius to round(Mag.y/60)+mag.radius do //begin // if (round(Monsters[Karta.monsters[i,j,2]].x/60)=ii) // and (round(Monsters[Karta.monsters[i,j,2]].y/60)=jj) // and (monsters[Karta.monsters[i,j,2]].visible=true) then Monsters[Karta.monsters[i,j,2]].vzaklinanii:=true; //end; end;
//esli popal na usipleniye 7:begin //for ii:=round(Mag.x/60)-mag.radius to round(Mag.x/60)+mag.radius do //for jj:=round(Mag.y/60)-mag.radius to round(Mag.y/60)+mag.radius do // begin // if (round(Monsters[Karta.monsters[i,j,2]].x/60)=ii) // and (round(Monsters[Karta.monsters[i,j,2]].y/60)=jj) // and (monsters[Karta.monsters[i,j,2]].visible=true) then Monsters[Karta.monsters[i,j,2]].vzaklinanii:=true; Monsters[Karta.monsters[i,j,2]].Fight:=false; // end; end;
//esli popal na chumu 8:begin //for ii:=round(Mag.x/60)-mag.radius to round(Mag.x/60)+mag.radius do //for jj:=round(Mag.y/60)-mag.radius to round(Mag.y/60)+mag.radius do // begin // if (round(Monsters[Karta.monsters[i,j,2]].x/60)=ii) // and (round(Monsters[Karta.monsters[i,j,2]].y/60)=jj) // and (monsters[Karta.monsters[i,j,2]].visible=true) then Monsters[Karta.monsters[i,j,2]].vzaklinanii:=true; // end;
if Monsters[Karta.monsters[i,j,2]].vzaklinanii=true then begin if (Monsters[Karta.monsters[i,j,2]].health>0) then Monsters[Karta.monsters[i,j,2]].health:=round(Monsters[Karta.monsters[i,j,2]].health/4)-Player.PowerMagic; Monsters[Karta.monsters[i,j,2]].vzaklinanii:=false; end;
if Monsters[Karta.monsters[i,j,2]].health<=0 then //ubivaniye monstra begin Player.opit:=Player.opit+50; Karta.prohodimost[round(Monsters[Karta.monsters[i,j,2]].x/60), round(Monsters[Karta.monsters[i,j,2]].y/60)]:=true; Monsters[Karta.monsters[i,j,2]].Visible:=false; Karta.predmets[round(Monsters[Karta.monsters[i,j,2]].x/60), round(Monsters[Karta.monsters[i,j,2]].y/60)]:=937; end;
end;
//esli popal na vudu 12:begin //for ii:=round(Mag.x/60)-mag.radius to round(Mag.x/60)+mag.radius do // for jj:=round(Mag.y/60)-mag.radius to round(Mag.y/60)+mag.radius do // begin // if (round(Monsters[Karta.monsters[i,j,2]].x/60)=ii) // and (round(Monsters[Karta.monsters[i,j,2]].y/60)=jj) // and (monsters[Karta.monsters[i,j,2]].visible=true) then begin Monsters[Karta.monsters[i,j,2]].vzaklinanii:=true; if Monsters[Karta.monsters[i,j,2]].health>(10+Player.PowerMagic) then Monsters[Karta.monsters[i,j,2]].health:= Monsters[Karta.monsters[i,j,2]].health-(10+Player.PowerMagic) else begin Player.opit:=Player.opit+50; Monsters[Karta.monsters[i,j,2]].health:=0; Monsters[Karta.monsters[i,j,2]].Visible:=false; Karta.predmets[ii,jj]:=937; Karta.prohodimost[ii,jj]:=true; end; mag.ispolzovaniye:=0; end; //end;
//pokaz urona if ( (Player.powerMagic+10)>=10) and ( (Player.powerMagic+2) <100) then begin Pik.buf.Canvas.Draw(Monsters[Karta.monsters[i,j,2]].x-Karta.mx+20, Monsters[Karta.monsters[i,j,2]].y-Karta.my-30,Pik.uron[round( (Player.powerMagic+2) div 10),1]); Pik.buf.Canvas.Draw(Monsters[Karta.monsters[i,j,2]].x-Karta.mx+45, Monsters[Karta.monsters[i,j,2]].y-Karta.my-30,Pik.uron[round( (Player.powerMagic+2) mod 10),1]); end;
if ( (Player.powerMagic+10)>=100) and ( (Player.powerMagic+10)<1000) then begin Pik.buf.Canvas.Draw(Monsters[Karta.monsters[i,j,2]].x-Karta.mx, Monsters[Karta.monsters[i,j,2]].y-Karta.my-30,Pik.uron[round( (Player.powerMagic+2) div 100),1]); Pik.buf.Canvas.Draw(Monsters[Karta.monsters[i,j,2]].x-Karta.mx+25, Monsters[Karta.monsters[i,j,2]].y-Karta.my-30,Pik.uron[round( (Player.powerMagic+2) mod 10),1]); Pik.buf.Canvas.Draw(Monsters[Karta.monsters[i,j,2]].x-Karta.mx+50, Monsters[Karta.monsters[i,j,2]].y-Karta.my-30,Pik.uron[round( (Player.powerMagic+2) mod 100),1]); end;
end;
//esli popal na пчелиный рой 6:begin //for ii:=round(Mag.x/60)-mag.radius to round(Mag.x/60)+mag.radius do // for jj:=round(Mag.y/60)-mag.radius to round(Mag.y/60)+mag.radius do // begin /// if (round(Monsters[Karta.monsters[i,j,2]].x/60)=ii) // and (round(Monsters[Karta.monsters[i,j,2]].y/60)=jj) // and (monsters[Karta.monsters[i,j,2]].visible=true) then Monsters[Karta.monsters[i,j,2]].vzaklinanii:=true;
if Monsters[Karta.monsters[i,j,2]].vzaklinanii=true then begin if Monsters[Karta.monsters[i,j,2]].health>0 then begin Monsters[Karta.monsters[i,j,2]].health:= Monsters[Karta.monsters[i,j,2]].health-(2+Player.PowerMagic);
//pokaz urona if (Player.powerMagic+2)<10 then Pik.buf.Canvas.Draw(Monsters[Karta.monsters[i,j,2]].x-Karta.mx+20, Monsters[Karta.monsters[i,j,2]].y-Karta.my-30,Pik.uron[ (Player.powerMagic+2),1]);
if ( (Player.powerMagic+2)>=10) and ( (Player.powerMagic+2) <100) then begin Pik.buf.Canvas.Draw(Monsters[Karta.monsters[i,j,2]].x-Karta.mx+20, Monsters[Karta.monsters[i,j,2]].y-Karta.my-30,Pik.uron[round( (Player.powerMagic+2) div 10),1]); Pik.buf.Canvas.Draw(Monsters[Karta.monsters[i,j,2]].x-Karta.mx+45, Monsters[Karta.monsters[i,j,2]].y-Karta.my-30,Pik.uron[round( (Player.powerMagic+2) mod 10),1]); end;
if ( (Player.powerMagic+2)>=100) then begin Pik.buf.Canvas.Draw(Monsters[Karta.monsters[i,j,2]].x-Karta.mx, Monsters[Karta.monsters[i,j,2]].y-Karta.my-30,Pik.uron[round( (Player.powerMagic+2) div 100),1]); Pik.buf.Canvas.Draw(Monsters[Karta.monsters[i,j,2]].x-Karta.mx+25, Monsters[Karta.monsters[i,j,2]].y-Karta.my-30,Pik.uron[round( (Player.powerMagic+2) mod 10),1]); Pik.buf.Canvas.Draw(Monsters[Karta.monsters[i,j,2]].x-Karta.mx+50, Monsters[Karta.monsters[i,j,2]].y-Karta.my-30,Pik.uron[round( (Player.powerMagic+2) mod 100),1]); end; end
else //ubivaniye monstra begin Player.opit:=Player.opit+50; Karta.prohodimost[round(Monsters[Karta.monsters[i,j,2]].x/60), round(Monsters[Karta.monsters[i,j,2]].y/60)]:=true; Monsters[Karta.monsters[i,j,2]].Visible:=false; Karta.predmets[round(Monsters[Karta.monsters[i,j,2]].x/60), round(Monsters[Karta.monsters[i,j,2]].y/60)]:=937; end; vzaklinanii:=false; end; // end; end; end; //case end; //eli monstr ne ubegayet end; //proverka na prorisovku ikonki
//proverka zametil li monstr geroya chtobi bezhat za nim for i:=round(Player.x/60)-6 to round(Player.x/60)+6 do for j:=round(Player.y/60)-6 to round(Player.y/60)+6 do begin
if (Player.Tip_oruzhiya='posoh' ) and (Posohi[Player.odezhda[11]].zaklinaniye='Ослепление') and (Posohi[Player.odezhda[11]].DlitMin<=Posohi[Player.odezhda[11]].Dlitelnost) and (Posohi[Player.odezhda[11]].DlitMin>=0) then begin star_x:=star_x; end
else begin //esli geroy popal v zonu vidimosti monstra i monstr eshe s nim ne deretsya if ((Karta.monsters[i,j,1]<>0) and (monsters[Karta.monsters[i,j,2]].fight=false) and (monsters[Karta.monsters[i,j,2]].visible=true) and (monsters[Karta.monsters[i,j,2]].ubezhal=false)) then begin
if monsters[Karta.monsters[i,j,2]].health>50 then begin //vibor pravilnogo povorota esli monstr ne ubegayet //esli geroy snizu if (round(Player.x/60)=i) and (round(Player.y/60)>j) then Monsters[Karta.monsters[i,j,2]].povorot:=1; //esli geroy sverhu if (round(Player.x/60)=i) and (round(Player.y/60)<j) then Monsters[Karta.monsters[i,j,2]].povorot:=2; //esli geroy sleva if (round(Player.x/60)<i) and (round(Player.y/60)=j) then Monsters[Karta.monsters[i,j,2]].povorot:=3; //esli geroy sprava if (round(Player.x/60)>i) and (round(Player.y/60)=j) then Monsters[Karta.monsters[i,j,2]].povorot:=4; //esli geroy snizu sleva if (round(Player.x/60)<i) and (round(Player.y/60)>j) then Monsters[Karta.monsters[i,j,2]].povorot:=5; //esli geroy snizu sprava if (round(Player.x/60)>i) and (round(Player.y/60)>j) then Monsters[Karta.monsters[i,j,2]].povorot:=6; //esli geroy sverhu sleva if (round(Player.x/60)<i) and (round(Player.y/60)<j) then Monsters[Karta.monsters[i,j,2]].povorot:=7; //esli geroy sverhu sprava if (round(Player.x/60)>i) and (round(Player.y/60)<j) then Monsters[Karta.monsters[i,j,2]].povorot:=8; end;
//proverka obichnogo obzora pri popavshey strele if (abs(monsters[Karta.monsters[i,j,2]].x-Player.x)<=180 ) and ( abs(monsters[Karta.monsters[i,j,2]].y-Player.y)<=180) //and ( monsters[Karta.monsters[i,j,2]].Podstrelil=false ) then monsters[Karta.monsters[i,j,2]].Go:=true;
//proverka rashirennogo obzora pri popavshey strele if ( (abs(monsters[Karta.monsters[i,j,2]].x-Player.x)>180 ) and ( monsters[Karta.monsters[i,j,2]].Podstrelil=true ) ) or ( ( abs(monsters[Karta.monsters[i,j,2]].y-Player.y)>180) and ( monsters[Karta.monsters[i,j,2]].Podstrelil=true ) ) then monsters[Karta.monsters[i,j,2]].Go:=true; end;
monsters[Karta.monsters[i,j,2]].Pohodil:=false;
//proverka kuda monstru bezhat za geroyem if (monsters[Karta.monsters[i,j,2]].Go=true) and (monsters[Karta.monsters[i,j,2]].visible=true) and (monsters[Karta.monsters[i,j,2]].ubeganiye=false) then begin
//bezhat li vlevo if (round(Player.x/60)<round(Monsters[Karta.monsters[i,j,2]].x/60)) and (Karta.prohodimost[i-1,j]=true) and (round(Magmonstr.x)<>(i-1)) and (round(Magmonstr.y/60)<>j) and (round(player.x+59)<round(Monsters[Karta.monsters[i,j,2]].x)) //and (Monsters[Karta.monsters[i,j,2]].health>50) then begin //prisvoeniye nomera i tipa rassmatrivaemogo monstra star_nomer:=Karta.monsters[i,j,2]; star_monstr:=Karta.monsters[i,j,1]; star_x:=Monsters[Karta.monsters[i,j,2]].x; star_y:=Monsters[Karta.monsters[i,j,2]].y;
//izmeneniye koordinat monstra if (mag.ispolzovaniye=0) or (mag.ispolzovaniye=9) or (mag.ispolzovaniye=10) or (mag.ispolzovaniye=5) or (mag.ispolzovaniye=2) then Monsters[Karta.monsters[i,j,2]].x:= Monsters[Karta.monsters[i,j,2]].x-Monsters[Karta.monsters[i,j,2]].speed;
if mag.ispolzovaniye=4 then Monsters[Karta.monsters[i,j,2]].x:= Monsters[Karta.monsters[i,j,2]].x-round(Monsters[Karta.monsters[i,j,2]].speed/2);
//obnuleniye starih dannih Karta.prohodimost[round(star_x/60),round(star_y/60)]:=true; Karta.monsters[i,j,2]:=0; Karta.monsters[i,j,1]:=0;
//prisvoyeniye novih dannih Karta.monsters[round(Monsters[star_nomer].x/60),round(Monsters[star_nomer].y/60),1]:=star_monstr; Karta.monsters[round(Monsters[star_nomer].x/60),round(Monsters[star_nomer].y/60),2]:=star_nomer; if Monsters[Karta.monsters[i,j,2]].health>0 then Karta.prohodimost[round(Monsters[Karta.monsters[i,j,2]].x/60),round(Monsters[Karta.monsters[i,j,2]].y/60)]:=false;
//bezhat li vpravo if (round(Player.x/60)>round(Monsters[Karta.monsters[i,j,2]].x/60)) and (Karta.prohodimost[i+1,j]=true) and (round(Magmonstr.x)<>(i+1)) and (round(Magmonstr.y/60)<>j) and (round(player.x)>round(Monsters[Karta.monsters[i,j,2]].x+59)) and (monsters[Karta.monsters[i,j,2]].pohodil=false) //and (Monsters[Karta.monsters[i,j,2]].health>50) then begin //prisvoeniye nomera i tipa rassmatrivaemogo monstra star_nomer:=Karta.monsters[i,j,2]; star_monstr:=Karta.monsters[i,j,1]; star_x:=Monsters[Karta.monsters[i,j,2]].x; star_y:=Monsters[Karta.monsters[i,j,2]].y; Monsters[Karta.monsters[i,j,2]].number:=2; //izmeneniye koordinat monstra
if (mag.ispolzovaniye=0) or (mag.ispolzovaniye=9) or (mag.ispolzovaniye=10) or (mag.ispolzovaniye=5) or (mag.ispolzovaniye=2) then Monsters[Karta.monsters[i,j,2]].x:= Monsters[Karta.monsters[i,j,2]].x+Monsters[Karta.monsters[i,j,2]].speed;
if mag.ispolzovaniye=4 then Monsters[Karta.monsters[i,j,2]].x:= Monsters[Karta.monsters[i,j,2]].x+round(Monsters[Karta.monsters[i,j,2]].speed/2);
//obnuleniye starih dannih Karta.prohodimost[round(star_x/60),round(star_y/60)]:=true; Karta.monsters[i,j,2]:=0; Karta.monsters[i,j,1]:=0;
//prisvoyeniye novih dannih Karta.monsters[round(Monsters[star_nomer].x/60),round(Monsters[star_nomer].y/60),1]:=star_monstr; Karta.monsters[round(Monsters[star_nomer].x/60),round(Monsters[star_nomer].y/60),2]:=star_nomer; if Monsters[Karta.monsters[i,j,2]].health>0 then Karta.prohodimost[round(Monsters[Karta.monsters[i,j,2]].x/60),round(Monsters[Karta.monsters[i,j,2]].y/60)]:=false;
//bezhat li vverh if (round(Player.y/60)<round(Monsters[Karta.monsters[i,j,2]].y/60)) and (Karta.prohodimost[i,j-1]=true) and (round(Magmonstr.x)<>i) and (round(Magmonstr.y/60)<>(j-1)) and (round(player.y+59)<round(Monsters[Karta.monsters[i,j,2]].y))and (monsters[Karta.monsters[i,j,2]].pohodil=false) then begin //prisvoeniye nomera i tipa rassmatrivaemogo monstra star_nomer:=Karta.monsters[i,j,2]; star_monstr:=Karta.monsters[i,j,1]; star_x:=Monsters[Karta.monsters[i,j,2]].x; star_y:=Monsters[Karta.monsters[i,j,2]].y;
//izmeneniye koordinat monstra if (mag.ispolzovaniye=0) or (mag.ispolzovaniye=9) or (mag.ispolzovaniye=10) or (mag.ispolzovaniye=5) or (mag.ispolzovaniye=2) then Monsters[Karta.monsters[i,j,2]].y:= Monsters[Karta.monsters[i,j,2]].y-Monsters[Karta.monsters[i,j,2]].speed;
if (mag.ispolzovaniye=4) then Monsters[Karta.monsters[i,j,2]].y:= Monsters[Karta.monsters[i,j,2]].y-round(Monsters[Karta.monsters[i,j,2]].speed/2);
//obnuleniye starih dannih Karta.prohodimost[round(star_x/60),round(star_y/60)]:=true; Karta.monsters[i,j,2]:=0; Karta.monsters[i,j,1]:=0;
//prisvoyeniye novih dannih Karta.monsters[round(Monsters[star_nomer].x/60),round(Monsters[star_nomer].y/60),1]:=star_monstr; Karta.monsters[round(Monsters[star_nomer].x/60),round(Monsters[star_nomer].y/60),2]:=star_nomer; if Monsters[Karta.monsters[i,j,2]].health>0 then Karta.prohodimost[round(Monsters[Karta.monsters[i,j,2]].x/60),round(Monsters[Karta.monsters[i,j,2]].y/60)]:=false;
//bezhat li vniz if (round(Player.y/60)>round(Monsters[Karta.monsters[i,j,2]].y/60)) and (Karta.prohodimost[i,j+1]=true) and (round(Magmonstr.x)<>i) and (round(Magmonstr.y/60)<>(j+1)) and (round(player.y+59)>round(Monsters[Karta.monsters[i,j,2]].y))and (monsters[Karta.monsters[i,j,2]].pohodil=false) then begin //prisvoeniye nomera i tipa rassmatrivaemogo monstra star_nomer:=Karta.monsters[i,j,2]; star_monstr:=Karta.monsters[i,j,1]; star_x:=Monsters[Karta.monsters[i,j,2]].x; star_y:=Monsters[Karta.monsters[i,j,2]].y;
//izmeneniye koordinat monstra if (mag.ispolzovaniye=0) or (mag.ispolzovaniye=9) or (mag.ispolzovaniye=10) or (mag.ispolzovaniye=5) or (mag.ispolzovaniye=2) then Monsters[Karta.monsters[i,j,2]].y:= Monsters[Karta.monsters[i,j,2]].y+Monsters[Karta.monsters[i,j,2]].speed;
if (mag.ispolzovaniye=4) then Monsters[Karta.monsters[i,j,2]].y:= Monsters[Karta.monsters[i,j,2]].y+round(Monsters[Karta.monsters[i,j,2]].speed/2);
//obnuleniye starih dannih Karta.prohodimost[round(star_x/60),round(star_y/60)]:=true; Karta.monsters[i,j,2]:=0; Karta.monsters[i,j,1]:=0;
//prisvoyeniye novih dannih Karta.monsters[round(Monsters[star_nomer].x/60),round(Monsters[star_nomer].y/60),1]:=star_monstr; Karta.monsters[round(Monsters[star_nomer].x/60),round(Monsters[star_nomer].y/60),2]:=star_nomer; if Monsters[Karta.monsters[i,j,2]].health>0 then Karta.prohodimost[round(Monsters[Karta.monsters[i,j,2]].x/60),round(Monsters[Karta.monsters[i,j,2]].y/60)]:=false;
//obnuleniye vseh monstrov v nachale for zz:=1 to 500 do if (Monsters[zz].health>0) and ( Round(Monsters[zz].x/60)>=Abs(opt.vidX-round(Player.x/60) ) ) and (Round(Monsters[zz].x/60)>=Abs(opt.vidY-round(Player.y/60) ) ) then begin //Monsters[zz].Go:=false; //obnovleniye shkali zhizney monstrov Pik.buf.Canvas.Pen.Color:=clred; Pik.buf.Canvas.Pen.Width:=5; Pik.buf.Canvas.MoveTo(Monsters[zz].x-Karta.mx,Monsters[zz].y-Karta.my); Pik.buf.Canvas.LineTo(Monsters[zz].x-Karta.mx+Monsters[zz].health,Monsters[zz].y-Karta.my); Monsters[zz].ubeganiye:=false; if (abs(Monsters[zz].x-Player.x)>120) or (abs(Monsters[zz].y-Player.y)>120) then begin Monsters[zz].ubezhal:=false; Monsters[zz].BegPrioritet:=0; end; end;