Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Ampelkreuzung (https://www.delphipraxis.net/111667-ampelkreuzung.html)

Danül 7. Apr 2008 16:12


Ampelkreuzung
 
Schönen guten Tag,
ich als Delphi-Neuling hätte eine Frage, die wahrscheinlich zu simpel ist, aber iwie bekomm ich sie nicht hin ;)

Und zwar soll mein Auto bei dem Anhaltestreifen halten, sofern die Ampel rot ist. Allerdings achtet er dort nur auf die Bedinung des
image1.left = X , soll heißen wenn er von der anderen Seite kommt hält er ebenfalls dort bei dem streifen, allerdings hat er dann schon die Ampel überfahren. Hoffe ihr versteht es so ;)

Mein Problem ist If (radioButton1.color = clred) and (Image1.left = 311) <<<dass
Wie man unschwer erkennt hab ich dort 2 Bedinungen rot und 311, allerdings möchte ich Image1.Top ebenfalls als Bedingung hinzufügen
also sollte es eigtl so aussehen: If (radioButton1.color = clred) and (Image1.left = 311) and (Image1.top = 24 )then begin....

Allerdings meckert er damit rum und ich komm zu keiner Aufzählung.
Wie umgeht man das Problem? Ich habe es bereits mit Komma probiert aber auch keinen Erfolg erzielt

Hoffe ihr helft einen Neuling im Forum ;)

Edit: Da fällt mir direkt noch eine Frage ein. Wir arbeiten in Informatik mit dem Tradiobutton, kann man irgendwie einstellen dass z.B. das Rote Leuchten nicht allzulange geht? Soll heißen dass mein Timer zwar von Grün auf Rot schaltet und umgekehrt allerdings bei Rot eher wieder auf grün schaltet (würde auch zum hinzufügen von orange helfen ;) )

vielen Dank

Luckie 7. Apr 2008 16:17

Re: Ampelkreuzung
 
Zitat:

Zitat von Danül
Allerdings meckert er damit rum und ich komm zu keiner Aufzählung.

Also mein Compiler meckert nie, sondern gibt (verständliche) Fehlermeldungen aus.

divBy0 7. Apr 2008 16:30

Re: Ampelkreuzung
 
Was genau meckert er denn?

Die if-Anweisung sollte eigentlich so laufen.

Poste doch mal den Teil von dem Code hier.

Danül 7. Apr 2008 16:31

Re: Ampelkreuzung
 
komisch, ich könnte schwören dass der gestern abend ne fehlermeldung ausspuckte

jetzt gerade geht If (a ) and (b ) and (c ) then begin...

danke euch dennoch
;)

Danül 7. Apr 2008 17:09

Re: Ampelkreuzung
 
dann hätte ich trotzdem noch eine weitere Frage ;)

Ich möchte mein Auto im Viereck fahren lassen. Allerdings bekomm ich nur 2 Richtungen hin.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
If Button1.left > 400
then begin
Button1.Top := Button1.top+1
end
else Button1.Left := Button1.left +1 ;

wie bau ich dies nun noch um damit er ebenso in den Button1.left -1 sowie Button1.Top -1 gelangt sodass er bei dem Startwert wieder von vorne beginnen kann?

Danül 9. Apr 2008 14:05

Re: Ampelkreuzung
 
Sooo, nachdem ich wieder bissl rumgebastelt habe komme ich nurn auf satte 30 Timer...
deswegen wollt ich mal nen bisschen umformen und hätte diesbezüglich einige Fragen.

Zum einen: Meine Fußgänger sollen relativ langsam laufen, meine Autos unterschiedlich schnell....
Wie realisier ich dass in einem Timer?
Ich habe jetzt für jedes Auto nen seperaten Timer, allerdings ist dies stark unübersichtlich und man kommt durcheinander.

Ich hab von dem Timer1.Interval = X gehört, kann man dies einfach so in die Gleichung einbauen?

Dann meine zweite Frage: Ebenfalls vom Timer her, ich habe ne Ampel die zwischen Grün/Orange/Rot schalten soll, allerdings sollen auch dort unterschiedliche Abstände gelten.

Sagen wir Grün soll 30sek dauern, orange dann 5 und rot 15. Wie realisier ich dass dort mit dem Timer?

Bisher habe ich nur 2 Farben: Rot und Grün
Mein Timer sieht momentan so aus:
If RadioButton1.color =clred
then RadioButton1.color :=cllime
else RadioButton1.color :=clred;

Allerdings greift er deswegen nur auf den Intervall des Timers logischerweise zu.

HOffe ihr könnt mir einige Tipps bezüglich der Probleme geben ;)

rollstuhlfahrer 9. Apr 2008 19:02

Re: Ampelkreuzung
 
HI,

1. würd ich meinen, dass man dazu einen neuen Thread aufmachen sollte,
2. 30 Timer sind vllt. ein bissel viel, währnd 30 TThread auch nicht grade weniger sind. Versuch doch mal ein Verhältniss zwischen den Geschwindigkeiten deiner Figuren zu machen. z.B. wäre es vorteilhaft, wenn die 1ne doppelt so schnell läuft, wie die andere. Dann kann man die Bewegung von 2 Figuren in eine Prozedur stecken.
3. Anderer Vorschlag: Du willst doch jede Figur anders schnell laufen lassen. Schreib alle Bewegungen in eine Prozedur, wobei jede Bewegung nicht in einer Ganzzahl, sondern in einer Fließkommazahl ausgedrückt wird. Dann noch ein bissel mit Sleep arbeiten und alles müsste in einen Timer passen. (Vllt. ein bissel rumrechnen)

rollstuhlfahrer


###
Edit: Die Ampel würd ich in einen Thread stecken und dort mit Syncronisize arbeiten. So kannst du mit Sleep(20000), Sleep(15000) und Sleep(5000) die Ampel schalten lassen.

mkinzler 9. Apr 2008 19:18

Re: Ampelkreuzung
 
Zitat:

2. 30 Timer sind vllt. ein bissel viel, währnd 30 TThread auch nicht grade weniger sind.
Wobei 30 Timer auch 30 Threads sind.

Danül 9. Apr 2008 19:31

Re: Ampelkreuzung
 
hm joa, ich wollte jetzt als Neuling nicht wegen jeder neuen Frage einen neuen Thread aufstellen daich täglich neu dazulerne und somit mehrere Fragen habe ;)

Was meinst du mit Fließkommazahl anstatt Ganze Zahl?
Ich arbeite momentan immer mit Image.left := Image.left +1 , sicher meinst du damit die ganzen Zahlen, aber wie soll man dass dann in Fließkommazahlen umschreiben?;) Bzw was sind Fließkommazahlen?

DeddyH 9. Apr 2008 19:39

Re: Ampelkreuzung
 
Fließkommazahlen sind Bruchzahlen ;)

Dani 9. Apr 2008 19:43

Re: Ampelkreuzung
 
Zitat:

Zitat von mkinzler
Zitat:

2. 30 Timer sind vllt. ein bissel viel, währnd 30 TThread auch nicht grade weniger sind.
Wobei 30 Timer auch 30 Threads sind.

Also mein Task-Manager sagt, dass das nicht stimmt :duck:

mkinzler 9. Apr 2008 19:50

Re: Ampelkreuzung
 
Seit wann sieht man Threads im Taskmanager :gruebel:

Apollonius 9. Apr 2008 19:53

Re: Ampelkreuzung
 
Das kann man einstellen. Und der TTimer der VCL arbeitet mit SetTimer, also ohne Thread.

Fussball-Robby 9. Apr 2008 19:54

Re: Ampelkreuzung
 
Zitat:

Zitat von mkinzler
Seit wann sieht man Threads im Taskmanager :gruebel:

Seitdem man im Taskmanager auf Ansicht -> Spalten auswählen.. geklickt hat und Threadanzahl aktiviert hat :wink:

oldmax 10. Apr 2008 08:36

Re: Ampelkreuzung
 
Hi
Für die Ampelsteuerung brauchst du exakt 1 Timer. Ja nach Ampel ( Kreuzung mit/Ohne Abbieger, Fußgänger) hast du feste Schritte
Z. einfache Kreuzung
1.Ausgang Quer Grün, Kreuz Rot
2. Quer Gelb, Kreuz Rot
3. Quer Rot, Kreuz Rot
4. Quer Rot, Kreuz Rot-Gelb
5. Quer Rot, Kreuz Grün
6. Quer Rot, Kreuz Gelb
7. Quer Rot, Kreuz Rot
8. Quer Rot-Gelb, Kreuz Rot
9.=1.
Im Ampel-Timer incrementierst du einen Schrittzähler. Wenn du nun hinter die Schritte deine Schrittzeit einträgst, kannst du in deiner Auswertung dem Timerintervall diese Zeit zuweisen und er wird diese Zeit bis zum nächsten Schritt ruhe geben
Am einfachsten baust du für jede Ampelphase eine eigene Procedure. Im Timerevent rufst du diese dann aus einer Case - Anweisung heraus auf
im Timer
Delphi-Quellcode:
Case Schritt of 1: Gruen_Rot;
dann die Procedure
Delphi-Quellcode:
Procedure TMyForm.GruenRot;
Begin
  Timer.Intervall:=2000; // 2 Sek z.B. ist nächste Pause
  Ampel_1_QuerRot.Brush.Color:=ClBlack;   // bedenke, Die Lampen in der Ampel
  Ampel_1_QuerGelb.Brush.Color:=ClBlack; // gehen aus, sie ändern nicht die Farbe
  Ampel_1_QuerGruen.Brush.Color:=ClLime;
  Ampel_2_QuerRot.Brush.Color:=ClBlack;  // 2. Ampel , gleiche Richtung
  Ampel_2_QuerGelb.Brush.Color:=ClBlack;
  Ampel_2_QuerGruen.Brush.Color:=ClLime;
  Ampel_1_KreuzRot.Brush.Color:=ClRed;   // 1. Ampel Kreuzverkehr
  Ampel_1_KreuzGelb.Brush.Color:=ClBlack;
  Ampel_1_KreuzGruen.Brush.Color:=ClBlack;
  Ampel_2_KreuzRot.Brush.Color:=ClRed;   // 2. Ampel Kreuzverkehr
  Ampel_2_KreuzGelb.Brush.Color:=ClBlack;
  Ampel_2_KreuzGruen.Brush.Color:=ClBlack;
end;
So kanst du die einzelnen Schritte besser übesehen.
Mit Timern für Fußgaänger und 2 für Fahrzeuge ( langsam und schnell sowie ein bischen Mathematik ) bist du schon auf 5 Timer geschrumpft und dürftest eine relativ dynamische Ansicht erreichen.
Gruß oldmax

Danül 10. Apr 2008 19:27

Re: Ampelkreuzung
 
uiiiii

vielen Dank für deine Mühe, ich werds direkt ausprobieren. Hab auch nun einige Timer schon streichen können ;)

grüße Danül

bordon5 26. Nov 2008 13:35

Re: Ampelkreuzung
 
hey leute...

also ich brauche die zeiten einer ampelkreuzung,da ich keine lust habe sie zu stoppen ;D
deswegen wollte ich euch mal fragen ob sie jemand für mich perrat hat...?

ToFaceTeKilla 26. Nov 2008 14:06

Re: Ampelkreuzung
 
Siehe eine Seite weiter vorn:
Zitat:

Zitat von Danül
Sagen wir Grün soll 30sek dauern, orange dann 5 und rot 15.


himitsu 26. Nov 2008 14:33

Re: Ampelkreuzung
 
Zitat:

Zitat von Danül
Sagen wir Grün soll 30sek dauern, orange dann 5 und rot 15. Wie realisier ich dass dort mit dem Timer?

Dafür gibt es 2 "einfache" Lösungen:

- den "Timer" nicht mit einem gleichmäßigem Intervall laufen lassen, sondern jeweils mit nötigem TimeOut (aktuelle Zeit bis zur nächsten Umschaltung) starten.

- einen Timer mit maximal dem größten gemeinsamen Teiler laufen lassen und und die einzelnen Zeitabschnitte in entsprechende Intervalle umsetzen
Zitat:

Timer-Intetvall = 5s

6x Grün (30s)
1x Gelb (5s)
3x Rot (15s)
ja und wo kommt bitte das Orange, bei 'ner Ampel, her? :gruebel:

Frankfurtoder 26. Nov 2008 14:36

Re: Ampelkreuzung
 
Wenn die Ampel von rot auf grün wechselt, wird auch erst rot einzeln, dann rot zusammen mit gelb und anschließend nur grün angezeigt. Von grün auf rot werden die Farben nur einzeln angezeigt.

ToFaceTeKilla 26. Nov 2008 14:37

Re: Ampelkreuzung
 
@himitsu
Ups, da hab ich zuviel gequotet...
Wollte eigentlich nur auf bordon5´s Frage nach den Zeiten antworten. *Beitrag editier und hoff, dass es keiner merkt*
Und das Orange - der OT wird wohl Gelb meinen (oder dort wo er herkommt gibts andere Ampeln :wink: )

bordon5 26. Nov 2008 20:22

Re: Ampelkreuzung
 
okee danke dann erstmal dafür ;)


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