Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Auto hält nicht an roter Ampel (https://www.delphipraxis.net/155912-auto-haelt-nicht-roter-ampel.html)

snears 12. Nov 2010 18:05

Auto hält nicht an roter Ampel
 
Guten Abend Delphi-Freunde,

ich soll für die Schule eine Ampelschaltung programmieren, nur leider funktioniert eine Sache noch nicht
und zwar, wie der Titel schon verrät, hält das Auto (shape Komponente) nicht bei rot.

Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject);
begin

if (auto1.left = 120) and (rot.Visible = true) then
   begin
   auto1.left := 160;
   end
else
 begin
 auto1.left := (auto1.left +3);
 if auto1.left = 720 then
  auto1.left := 0;
 end;
end;

das problem ist, das wenn es rot ist hält das shape (auto1) nicht an sonder fährt weiter und dann fährt es nicht bis zum punkt 720 sondern noch viel weiter... habe noch versucht erst abzufragen ob es rot ist und dann ob der wagen bei punkt 140 ist damit er dannach anhält.

Ich hoffe ihr könnt mir helfen

Mit freundlichen Grüßen

snears

DeddyH 12. Nov 2010 18:10

AW: Auto hält nicht an roter Ampel
 
Versuch mal
Delphi-Quellcode:
if auto1.left >= 720 then

Klaus01 12. Nov 2010 18:11

AW: Auto hält nicht an roter Ampel
 
Hallo,

vielleicht solltes du auf <= prüfen.
Es kann ja sein, wenn Du die Position immer um 3 erhöhst,
den Wert (120) nie genau triffst.

Grüße
Klaus

snears 12. Nov 2010 18:20

AW: Auto hält nicht an roter Ampel
 
Also jetzt ist zumindest das Problem weg, dass es bis in die unendlichkeit fährt.
Aber es bleibt nicht stehen sondern fängt nun an von 160 an zu fahren :(
auch wenn ich noch eine abfrage dazwischen schiebe funktioniert es nicht :shock::shock:

jfheins 12. Nov 2010 18:20

AW: Auto hält nicht an roter Ampel
 
Es könnte auch sein, dass die Bedingung im if einmalig zutrifft aber das Auto dann bewegt wird, sodass der nächste Durchlauf wieder in den else-Zweig geht :stupid:

snears 12. Nov 2010 18:22

AW: Auto hält nicht an roter Ampel
 
ah okay ich habe das problem gefunden

Delphi-Quellcode:

if (auto1.left <= 120) and (rot.Visible = true) then
   begin
   auto1.left := 120;

   end
else
 begin
 auto1.left := (auto1.left +3);
 if auto1.left >= 720 then
  auto1.left := 0;
 end;
einfach nur gucken... aber das fällt schon schwer :-D :lol:

himitsu 12. Nov 2010 18:37

AW: Auto hält nicht an roter Ampel
 
Da sich dein Auto nicht in Einerschritten bewegt, mußt du also auf Bereiche und keine genauen Werte prüfen, so daß dein Auto dieses auch trifft.

> oder < bringt nicht viel, wenn sich der Bereich mitten im Raum befindet.

Tipp: Auf "= true" prüft man nicht.

Delphi-Quellcode:
if rot.Visible and (auto1.left >= 120) and (auto1.left < 120 + 3) then
begin
  auto1.left := 120;
end
else
  begin
    auto1.left := auto1.left + 3;
    if auto1.left >= 720 then
      auto1.left := 0;
  end;
Und wenn man das Ganze noch etwas umstellt, dann wird der Code kürzer und man spart sich das unnötige Setzen auf 120, wo dasAuto schon dort ist.
Delphi-Quellcode:
{ wenn nicht (rot und an Ampel), dann fahren }
if not (rot.Visible and (auto1.left >= 120) and (auto1.left < 120 + 3) then
  ...

// bzw.

{ nur wenn nicht Rot oder vor Ampel oder hinter Ampel, dann fahren }
{ aka: nur wenn nicht Rot oder nicht an der Ampel, dann fahren }
if not rot.Visible or (auto1.left < 120) or (auto1.left >= 120 + 3) then
begin
  { ein Stückchen fahren } 
  auto1.left := auto1.left + 3;
  { wenn aus dem Bild raus, dann auf Anfang }
  if auto1.left >= 720 then
    auto1.left := 0;
end;

Delphi-Laie 12. Nov 2010 21:25

AW: Auto hält nicht an roter Ampel
 
Zitat:

Zitat von snears (Beitrag 1061194)
Code:
(rot.Visible = true)

Eine Boolesche Variable über einen Vergleich auf ihren Wahrheitsgehalt zu prüfen, ist zumindest unelegant und überflüssig, vielleicht kann das sogar zu Fehlern im Programmablauf führen. Boolesche Variablen können nämlich stattdessen direkt auf ihren Wahrheitsgehalt geprüft werden.

DeddyH 13. Nov 2010 11:21

AW: Auto hält nicht an roter Ampel
 
Es kann tatsächlich zu Fehlern führen. Siehe Über den Umgang mit Boolean

Caps 13. Nov 2010 19:50

AW: Auto hält nicht an roter Ampel
 
Zitat:

Zitat von DeddyH (Beitrag 1061242)
Es kann tatsächlich zu Fehlern führen. Siehe Über den Umgang mit Boolean

Oh Mann! Dass man Integer auf Boolean casten kann, hätte ich bei der "streng typisierten Sprache" Pascal eigentlich nicht erwartet. Bisher bin ich nämlich davon ausgegangen, dass <Boolean> = <Wahrheitswert> stets dem Ausdruck <Wahrheitswert> = <Wahrheitswert> entspricht und zu keinerlei Problemen führen könnte. Ob Nikolaus Wirth das gewollt hätte? :gruebel: (vorausgesetzt, es ist nicht schon seine Erfindung :stupid:)

Caps


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz