AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Auto hält nicht an roter Ampel

Ein Thema von snears · begonnen am 12. Nov 2010 · letzter Beitrag vom 15. Nov 2010
Antwort Antwort
Seite 1 von 2  1 2      
snears

Registriert seit: 25. Jan 2010
51 Beiträge
 
#1

Auto hält nicht an roter Ampel

  Alt 12. Nov 2010, 18:05
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
Wenn man bei einem Projekt nicht weiter kommt, einmal um das Haus rennen und wieder an das Projekt setzen...

Geändert von mkinzler (14. Nov 2010 um 12:53 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: Auto hält nicht an roter Ampel

  Alt 12. Nov 2010, 18:10
Versuch mal
if auto1.left >= 720 then
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Auto hält nicht an roter Ampel

  Alt 12. Nov 2010, 18:11
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
Klaus
  Mit Zitat antworten Zitat
snears

Registriert seit: 25. Jan 2010
51 Beiträge
 
#4

AW: Auto hält nicht an roter Ampel

  Alt 12. Nov 2010, 18:20
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
Wenn man bei einem Projekt nicht weiter kommt, einmal um das Haus rennen und wieder an das Projekt setzen...
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

AW: Auto hält nicht an roter Ampel

  Alt 12. Nov 2010, 18:20
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
  Mit Zitat antworten Zitat
snears

Registriert seit: 25. Jan 2010
51 Beiträge
 
#6

AW: Auto hält nicht an roter Ampel

  Alt 12. Nov 2010, 18:22
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
Wenn man bei einem Projekt nicht weiter kommt, einmal um das Haus rennen und wieder an das Projekt setzen...

Geändert von mkinzler (14. Nov 2010 um 12:53 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

AW: Auto hält nicht an roter Ampel

  Alt 12. Nov 2010, 18:37
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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (12. Nov 2010 um 18:51 Uhr)
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#8

AW: Auto hält nicht an roter Ampel

  Alt 12. Nov 2010, 21:25
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: Auto hält nicht an roter Ampel

  Alt 13. Nov 2010, 11:21
Es kann tatsächlich zu Fehlern führen. Siehe Über den Umgang mit Boolean
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#10

AW: Auto hält nicht an roter Ampel

  Alt 13. Nov 2010, 19:50
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? (vorausgesetzt, es ist nicht schon seine Erfindung )

Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:30 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