Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Autos sollen auf der Kreuzung Unfall bauen (https://www.delphipraxis.net/162953-autos-sollen-auf-der-kreuzung-unfall-bauen.html)

Blackstyle94 10. Sep 2011 17:05

Autos sollen auf der Kreuzung Unfall bauen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DP,

Ich habe ein kleines einfaches Kreuzungssimulation programmiert, in der so 20 Autos (images) ihre Runden drehen.
Nun würd ich gern, dass diese auf Knopfdruck einen Unfall bauen. Also soll zb ein Auto schneller werden und dadurch ein anderes kreuzen. Eigentlich gar kein Problem.

Zum Problem :
Mein Problem ist das Überprüfen, ob die Autos (Images) sich kreuzen. Ich weiß man könnte es einfach mit:

if image1.left>image2.left and image1<image2.left+20
then ...

Aber das wäre mir bei 20 Autos viel zu umständlich, jedem Auto 19 solcher Befehle zu liefern. :-D
Deshalb meine Frage an euch gibt es eine Möglichkeit das eleganter und besonders kürzer hinzubekommen.

Ich weiß, dass meine Infos immer ein bisschen knapp sind, deshalb bei Fragen einfach nachfragen.:)


Hier nochmal mein Programm, falls den sich jemand ansehen möchte (bitte nicht lachen, habe info erst seit 3 Wochen) :

DelTurbo 10. Sep 2011 21:38

AW: Autos sollen auf der Kreuzung Unfall bauen
 
Guckmal ob dir das weiterhilft.
http://www.delphipraxis.net/84833-post2.html

Blackstyle94 10. Sep 2011 22:05

AW: Autos sollen auf der Kreuzung Unfall bauen
 
Hi,

Also danke erstma für deine Antwort.

Zu deiner Antwort:

Das sieht ganz schön professionell aus. Ich habe leider erst seid 3 Wochen Informatik, deshalb ist das ganz schön schwer zu verstehen. Also, ich bin mir sicher, dass es mir weiter helfen würde, aber leider verstehe ich es nicht, da wir nur sowas wie bilder bewegen, timer einstellen, if- abfragen und sowas gemacht haben. :(

Gibts da vielleicht was einfacheres? Wenn nicht muss ich mich ma ein bisschen damit beschäftigen ( also was du mir gepostet has)

sx2008 10. Sep 2011 22:21

AW: Autos sollen auf der Kreuzung Unfall bauen
 
Zitat:

Zitat von Blackstyle94 (Beitrag 1123170)
Aber das wäre mir bei 20 Autos viel zu umständlich, jedem Auto 19 solcher Befehle zu liefern.

Wieso umständlich?
Du kannst dir doch eine Funktion erstellen, der immer 2 Images übergeben werden und die dann prüft, ob sich die Bilder berühren oder gar überdecken:
Delphi-Quellcode:
// liefert True zurück, wenn sich die Images (auch teilweise) überdecken
function ImageKollision(a, b : TImage):Boolean;
begin
  ...
end;
Diese Logik kann ganz schön knifflig sein, aber wenn du's einmal hast,
dann ist das Erkennen eines "Unfalls" ein Kinderspiel.

Aber du kannst es dir noch einfacher machen:
In Windows gibt es schon eine Funktion IntersectRect(), die überprüft ob sich zwei Rechtecke überdecken.

Bummi 10. Sep 2011 22:48

AW: Autos sollen auf der Kreuzung Unfall bauen
 
Wenn Du bei Deinem Ansatz bleiben willst, kannst Du damit vielleicht was anfangen,
das Memo1 als Liste und die Auflösung über Namen habe ich nur zum Demonstrieren verwendet, nimm lieber eine TList of Record dafür oder ähnliches ....
Delphi-Quellcode:
var
  i,j:Integer;
  r:Trect;
  n1,n2:String;
begin
  r.Left := 0;
  r.Top := 0;
  Memo1.Lines.Clear;
  for I := 0 to Componentcount -1 do
      if (Components[i] is TImage) and TImage(Components[i]).Visible then
        begin
        for j := 0 to Componentcount -1 do
            if (Components[j] is TImage) and TImage(Components[j]).Visible and (Components[j]<>Components[i]) then
              begin
                 INtersectRect(r,TImage(Components[i]).BoundsRect,TImage(Components[j]).BoundsRect);
                 if r.Left>0 then
                   begin
                     n1 := Components[i].Name + '_' + Components[j].Name;
                     n2 := Components[j].Name + '_' + Components[i].Name;
                     if (Memo1.Lines.IndexOf(n1)=-1) and (Memo1.Lines.IndexOf(n2)=-1)then Memo1.Lines.Add(n1);

                   end;
              end;

        end;

end;

Blackstyle94 11. Sep 2011 09:28

AW: Autos sollen auf der Kreuzung Unfall bauen
 
Hi,

Also das sieht schon wesentlich einfacher aus. Auch wenn das das erste ma wird das ich nun funktionen erstelle, aber ich werde es ausprobieren.:)

Ich bedanke mich nochmal für die ganzen Antworten.:thumb:

Gruß
Blackstyle94

Blackstyle94 11. Sep 2011 09:43

AW: Autos sollen auf der Kreuzung Unfall bauen
 
@Bummi

wo finde ich dieses Tlist of records? Ich habs in der Tool palette gesucht aba nicht gefunden.:(

Sir Rufo 11. Sep 2011 10:31

AW: Autos sollen auf der Kreuzung Unfall bauen
 
Zitat:

Zitat von Blackstyle94 (Beitrag 1123262)
@Bummi

wo finde ich dieses Tlist of records? Ich habs in der Tool palette gesucht aba nicht gefunden.:(

Das ist keine Komponente, und schon mal keine die man auf eine Form klatschen kann.

Wenn du wiesen willst, wo man die finden kann dann schau doch in die Online-Hilfe (F1) oder auch hier über die Referenz Delphi-Referenz durchsuchenTList

Blackstyle94 11. Sep 2011 11:27

AW: Autos sollen auf der Kreuzung Unfall bauen
 
So habs nun hin bekommen.

Danke nochmal an alle Antworten.

Gruß
Blackstyle94


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:20 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