![]() |
Auto durch Labyrinth fahren lassen
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:
Das ist mein Programm was ich bisher geschrieben habe.
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. Ich hoffe ihr könnt mir weiterhelfen, danke im Voraus. mfg anaX |
DP-Maintenance
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. |
Re: Auto durch Labyrinth fahren lassen
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.
Delphi-Quellcode:
So könnte es vieleicht funktionieren:
if image1.Canvas.Pixels[shape_auto.Left+i,shape_auto.Top+j-100+(autobreite div 2)]<>0 then
Delphi-Quellcode:
Falls das Image nicht das gesamte Formular füllt, muss Point(x,y) noch in Koordinaten des Images umgerechnet werden.
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz