AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Auto durch Labyrinth fahren lassen
Thema durchsuchen
Ansicht
Themen-Optionen

Auto durch Labyrinth fahren lassen

Ein Thema von anaX · begonnen am 22. Feb 2010 · letzter Beitrag vom 23. Feb 2010
Antwort Antwort
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
22. Feb 2010, 09:03
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Multimedia" verschoben.
Herzlich Willkommen! Da es eine Delphi-Frage ist, verschiebe ich dein Thema in die passende Rubrik.
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Auto durch Labyrinth fahren lassen

  Alt 23. Feb 2010, 13:51
Vieleicht solltest du dich erst einmal mit einem Ball statt des Autos begnügen und die Steuerung zum Beispiel über Tasten selbst übernehmen.

Hier soll wohl ermittelt werden, ob in der entsprechenden Richtung ein Hindernis ist.
if image1.Canvas.Pixels[shape_auto.Left+i,shape_auto.Top+j-100+(autobreite div 2)]<>0 then So könnte es vieleicht funktionieren:
Delphi-Quellcode:
for i := -1 to 1 do
begin
  // ??? x := shape_auto.Left + i;
  case i of
    -1: x := shape_auto.Left - 1;
     1: x := shape_auto.Left + shape_auto.Width + 1;
  else x := shape_auto.Left + (shape_auto.Width div 2); // Mittelpunkt;
  end;

  for j := -1 to 1 do
  begin
    // ??? y := shape_auto.Top+j-100+(autobreite div 2);
    case j of
      -1: y := shape_auto.Top - 1;
       1: y := shape_auto.Top + shape_auto.Height + 1;
    else y := shape_auto.Top + (shape_auto.Height div 2); // Mittelpunkt;
    end;

    if image1.Canvas.Pixels[x, y] <> 0 then
Falls das Image nicht das gesamte Formular füllt, muss Point(x,y) noch in Koordinaten des Images umgerechnet werden.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz