Einzelnen Beitrag anzeigen

anaX

Registriert seit: 22. Feb 2010
1 Beiträge
 
#1

Auto durch Labyrinth fahren lassen

  Alt 22. Feb 2010, 09:02
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
  Mit Zitat antworten Zitat