AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Autos sollen auf der Kreuzung Unfall bauen
Thema durchsuchen
Ansicht
Themen-Optionen

Autos sollen auf der Kreuzung Unfall bauen

Ein Thema von Blackstyle94 · begonnen am 10. Sep 2011 · letzter Beitrag vom 11. Sep 2011
Antwort Antwort
Blackstyle94

Registriert seit: 19. Aug 2011
11 Beiträge
 
Delphi 2006 Professional
 
#1

Autos sollen auf der Kreuzung Unfall bauen

  Alt 10. Sep 2011, 18:05
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.
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) :
Angehängte Dateien
Dateityp: rar 110829-Kreuzung.rar (1,58 MB, 20x aufgerufen)
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#2

AW: Autos sollen auf der Kreuzung Unfall bauen

  Alt 10. Sep 2011, 22:38
Guckmal ob dir das weiterhilft.
http://www.delphipraxis.net/84833-post2.html
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Blackstyle94

Registriert seit: 19. Aug 2011
11 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Autos sollen auf der Kreuzung Unfall bauen

  Alt 10. Sep 2011, 23:05
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)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Autos sollen auf der Kreuzung Unfall bauen

  Alt 10. Sep 2011, 23:21
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Autos sollen auf der Kreuzung Unfall bauen

  Alt 10. Sep 2011, 23:48
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Blackstyle94

Registriert seit: 19. Aug 2011
11 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Autos sollen auf der Kreuzung Unfall bauen

  Alt 11. Sep 2011, 10:28
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.

Gruß
Blackstyle94
  Mit Zitat antworten Zitat
Blackstyle94

Registriert seit: 19. Aug 2011
11 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Autos sollen auf der Kreuzung Unfall bauen

  Alt 11. Sep 2011, 10:43
@Bummi

wo finde ich dieses Tlist of records? Ich habs in der Tool palette gesucht aba nicht gefunden.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Autos sollen auf der Kreuzung Unfall bauen

  Alt 11. Sep 2011, 11:31
@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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Blackstyle94

Registriert seit: 19. Aug 2011
11 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Autos sollen auf der Kreuzung Unfall bauen

  Alt 11. Sep 2011, 12:27
So habs nun hin bekommen.

Danke nochmal an alle Antworten.

Gruß
Blackstyle94
  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 03:54 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