Ovaj kod sam probao sa lavirintom nacrtanim u Paintu. Ucitan je u Image1. Image1 left i top treba da su 0, a ako ne, potrebno je preracunati.
Code:
function TForm1.proveri(smer:integer):integer;
var i,j:integer;
Moze:Boolean;
begin
Result:=0;
Moze:=False;
case smer of
1:begin //Levo
for i:=1 to 5 do
begin
for j:=Image2.Top to Image2.Top+Image2.Height do
begin
if Image1.Canvas.Pixels[Image2.left-i,j]<>clWhite then
Moze:=True
else
begin
Moze:=False;
break
end
end;
if Moze then
Result:=i
else
break
end
end;
2:begin //Gore
for i:=1 to 5 do
begin
for j:=Image2.Left to Image2.Left+Image2.Width do
begin
if Image1.Canvas.Pixels[j,Image2.Top-i]<>clWhite then
Moze:=True
else
begin
Moze:=False;
break
end
end;
if Moze then
Result:=i
else
break
end
end;
3:begin //Desno
for i:=1 to 5 do
begin
for j:=Image2.Top to Image2.Top+Image2.Height do
begin
if Image1.Canvas.Pixels[Image2.left+Image2.Width+i,j]<>clWhite then
Moze:=True
else
begin
Moze:=False;
break
end
end;
if Moze then
Result:=i
else
break
end
end;
4:begin //Dole
for i:=1 to 5 do
begin
for j:=Image2.Left to Image2.Left+Image2.Width do
begin
if Image1.Canvas.Pixels[j,Image2.Top+Image2.Height+i]<>clWhite then
Moze:=True
else
begin
Moze:=False;
break
end
end;
if Moze then
Result:=i
else
break
end
end
end
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
DoubleBuffered:=True;
case Key of
37: Image2.Left:=Image2.Left-proveri(1);
38: Image2.Top:=Image2.Top-proveri(2);
39: Image2.Left:=Image2.Left+proveri(3);
40: Image2.Top:=Image2.Top+proveri(4);
end;
if Image2.Top>395 then
image2.Top:=-5;
if image2.Left>395 then
Image2.Left:=-5;
if Image2.Top<-5 then
image2.Top:=395;
if image2.Left<-5 then
Image2.Left:=395
end;