Hallo liebe Delphi community,
ich habe mich mal daran versucht ein Programm zu schreiben wo ich ein Auto durch ein Labyrinth fahren lassen kann. Doch es funkt nicht so wie ich es mir vorgestellt habe und ich glaube auch ich habe schon mit der falschen Idee begonnen.
Zuerst einmal das Auto fährt, aber leider nicht durch ein Labyrinth.
Ich wäre sehr verbunden wenn mir jemand helfen könnte bei meinem Problem.
Zudem wäre es gut wenn man es noch so programmieren könnte, dass:
-das Auto auf der Strecke bleibt
-das Auto über 90° kommt
-das Auto so programmiert ist, das es von alleine vom Startpunkt zum anderen stoppunkt gelangt
-das Auto sich dreht
-und es zurück fahren kann.
Ich habe so gedacht anhand einer Abtastfunktion kann man dies iwie realisieren doch ich glaube ich stehle mich zu dämlich an .
Delphi-Quellcode:
var
Form1: TForm1;
xp:integer=0;
yp:integer=200;
v:integer=1;
a_voraus:array[-1..1,-1..1] of integer;
autobreite:integer;
autolaenge: integer;
fahrt_aufgenommen:boolean;
zaehler_o:integer;
zaehler_v:integer;
zaehler_u:integer;
zaehler_h:integer;
dif:integer;
zaehler_neu_v:integer=0;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:=true;
timer3.enabled:=false;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
timer1.Enabled:=false;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var i,j:integer;
begin
//ermittlung der Umgebung
for i:=-1 to 1 do
begin
for j:=-1 to 1 do
begin
edit_y_bild.Text:=inttostr(image1.Canvas.Pixels[shape_auto.Left+i-30,shape_auto.Top+j-100]);
// image1.Canvas.Pixels[shape_auto.Left+i,shape_auto.Top+j-100-1+(autobreite div 2)]:=clRED;
if image1.Canvas.Pixels[shape_auto.Left+i,shape_auto.Top+j-100+(autobreite div 2)]<>0 then
begin
a_voraus[i,j]:=0;
sg_anzeige.Cells[i+1,j+1]:='0';
end
else
begin
a_voraus[i,j]:=1;
sg_anzeige.Cells[i+1,j+1]:='1';
end;
end;//end j
end; //end i
//fahren
if a_voraus[1,0]=0 then //gerade aus ist frei
begin
xp:=xp+1;
shape_auto.left:=xp;
shape_auto.top:=yp;
fahrt_aufgenommen:=true;
zaehler_v:=zaehler_v+1;
Edit_V.text:=inttostr(zaehler_v);
end
else //Hauptrichtung nicht frei
begin //Versuch, nach unten auszuweichen
if (a_voraus[0,-1]=0) then //nach unten frei
begin
yp:=yp-1;
shape_auto.left:=xp;
shape_auto.top:=yp;
fahrt_aufgenommen:=true;
zaehler_u:=zaehler_u+1;
//zaehler_o:=zaehler_o-1;
Edit_U.text:=inttostr(zaehler_u);
//Edit_o.text:=inttostr(zaehler_o);
end
else //Versuch, nach oben auszuweichen
begin
if (a_voraus[0,1]=0) then //nach oben frei
begin
yp:=yp+1;
shape_auto.left:=xp;
shape_auto.top:=yp;
fahrt_aufgenommen:=true;
zaehler_o:=zaehler_o+1;
//zaehler_u:=zaehler_u-1;
// Edit_U.text:=inttostr(zaehler_u);
Edit_o.text:=inttostr(zaehler_o);
end;
end;
begin
//dif1:=zaehler_o - zaehler_u;
// if zaehler_o - zaehler_u =
end;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
shape_auto.left:=0;
shape_auto.top:=200;
xp:=0;
yp:=200;
zaehler_o:=0;
Edit_o.text:=inttostr(zaehler_o);
zaehler_v:=0;
Edit_v.text:=inttostr(zaehler_v);
zaehler_u:=0;
Edit_u.text:=inttostr(zaehler_u);
zaehler_h:=0;
Edit_h.text:=inttostr(zaehler_h);
label8.Caption:='';
end;
procedure TForm1.sb_vChange(Sender: TObject);
begin
v:=sb_v.Position;
timer1.Interval:=100-5*v;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
autobreite:=shape_auto.height;
autolaenge:=shape_auto.Width;
fahrt_aufgenommen:=true;
end;
procedure TForm1.Bildladen1Click(Sender: TObject);
begin
if opd.Execute then
image1.Picture.LoadFromFile(opd.FileName);
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if zaehler_neu_v<>zaehler_v then zaehler_neu_v:=zaehler_v
else
begin
label8.Caption:='Problem';
fahrt_aufgenommen:=false;
timer1.Enabled:=false;
end;
if timer1.Enabled=false then
begin
timer3.Enabled:=true;
end;
end;
end.
Das ist mein Programm was ich bisher geschrieben habe.
Ich hoffe ihr könnt mir weiterhelfen, danke im Voraus.
mfg anaX