AGB  ·  Datenschutz  ·  Impressum  







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

Fußgängerampel

Ein Thema von Beowulf · begonnen am 9. Apr 2008 · letzter Beitrag vom 12. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
Beowulf

Registriert seit: 9. Apr 2008
4 Beiträge
 
Delphi 7 Enterprise
 
#1

Fußgängerampel

  Alt 9. Apr 2008, 13:46
hey leute,
für den info- unterricht sollen wir eine kreuzung progr., mit fußgängern, zwei, f ampeln, und zwei normalen ampeln.
jetzt bin ich an der stelle das die fußgänger hinzukommen, die zwei einfache shapes sind. bei betätigen des jeweils richtigen buttons soll der fußgänger auch auf dieser seite rübergehen und dann wieder am ausgangspunkt auftauchen. mein bisweiliger quelltext sieht so aus:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Shape12: TShape;
  1.Brush.Color:=clmaroon;
  A2.Brush.Color:=clyellow;
  A3.Brush.Color:=clGreen;
  B1.Brush.Color:=clmaroon;
  B2.Brush.Color:=clyellow;
  B3.Brush.Color:=clGreen;
  zustand:='ampelgelb';
  timer1.enabled:=true;
end;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
 begin
  if zustand='ampelgruenthen begin
  ampel1.brush.color:=clred;
  ampel2.brush.color:=clgreen;
  ampel3.brush.color:=clred;
  ampel4.brush.color:=clgreen;
  A1.Brush.Color:=clmaroon;
  A2.Brush.Color:=clolive;
  A3.Brush.Color:=cllime;
  B1.Brush.Color:=clmaroon;
  B2.Brush.Color:=clolive;
  B3.Brush.Color:=cllime;
  zustand:='ampelrot';

timer1.enabled:=false;
end;

if zustand='aampelrotthen begin
  A1.Brush.Color:=clred;
  A2.Brush.Color:=clolive;
  B1.Brush.Color:=clred;
  B2.Brush.Color:=clolive;
  ampel1.brush.color:=clmaroon;
  ampel2.brush.color:=cllime;
  ampel3.brush.color:=clmaroon;
  ampel4.brush.color:=cllime;
  zustand:='ampelrotgelb';
end;

if zustand='ampelgelbthen begin
  A1.Brush.Color:=clred;
  A2.Brush.Color:=clolive;
  A3.Brush.Color:=clgreen;
  B1.Brush.Color:=clred;
  B2.Brush.Color:=clolive;
  B3.Brush.Color:=clgreen;
  ampel1.brush.color:=clmaroon;
  ampel2.brush.color:=cllime;
  ampel3.brush.color:=clmaroon;
  ampel4.brush.color:=cllime;
  zustand:='aampelrot';
end;

if zustand='ampelrotgelbthen begin
  ampel1.brush.color:=clred;
  ampel2.brush.color:=clgreen;
  ampel3.brush.color:=clred;
  ampel4.brush.color:=clgreen;
  A1.Brush.Color:=clred;
  A2.Brush.Color:=clyellow;
  A3.Brush.Color:=clgreen;
  B1.Brush.Color:=clred;
  B2.Brush.Color:=clyellow;
  B3.Brush.Color:=clgreen;
  zustand:='ampelgruen';
end;
end;

procedure TForm1.IIClick(Sender: TObject);
 begin
  if zustand='ampelrotthen begin
  A1.Brush.Color:=clmaroon;
  A2.Brush.Color:=clyellow;
  A3.Brush.Color:=clGreen;
  B1.Brush.Color:=clmaroon;
  B2.Brush.Color:=clyellow;
  B3.Brush.Color:=clGreen;
  zustand:='ampelgelb';
  timer1.enabled:=true;

end;
end;
end.
hoffe es kennt jemand die antwort
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Fußgängerampel

  Alt 9. Apr 2008, 13:49
Zitat von Beowulf:
hoffe es kennt jemand die antwort
Man kennt ja noch nicht einmal die Frage

[edit] 42, what was the question? SCNR^^ [/edit]
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
Benutzerbild von everdream
everdream

Registriert seit: 22. Feb 2007
Ort: Hiddenhausen
192 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Fußgängerampel

  Alt 9. Apr 2008, 13:52
An deiner Stelle würde ich den Code erstmal in den "Delphi-Code"-Tag schreiben und den Shapes vernünftige Namen geben, damit jeder mehr oder weniger weiß, was damit anzufangen ist.
Max
"Das Ziel ist im Weg!"
  Mit Zitat antworten Zitat
oldmax

Registriert seit: 27. Apr 2006
Ort: Gieboldehausen
167 Beiträge
 
#4

Re: Fußgängerampel

  Alt 9. Apr 2008, 13:53
Hi
Ich kenn die Antwort:
Code in DelphiTags und einrücken !
Ich weiß nicht, wie oft hier schon der Hinweis auf das Einrücken von Codezeilen gegeben worden ist, vermutlich noch häufiger, wie das Thema Ampelschaltungen....
Geh doch mal in die Suche und gib Ampel ein... und...
Da ist dann auch eventuell Code, ordentlich eingerückt und dokumentiert. Nur lesen mußt du selber, weil du das Ergebnis der Suche auf deine Vorgabe anpassen mußt.
Gruß oldmax
Noch ist mein Rechner mir zu Diensten.... ansonsten habe ich die Macht ihn zu vernichten !
  Mit Zitat antworten Zitat
Beowulf

Registriert seit: 9. Apr 2008
4 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Fußgängerampel

  Alt 9. Apr 2008, 14:20
achso ja, die frage, war ich zu fix mit dem schreiben...
die fußgänger solln sich wie oben beschrieben bewegen, aber irgendwie krieg ich das net hin
und die meisten shapes sind einfache streifen, die die benötigt werden sind beschriftet...
f1 u f2 sind die fußgänger...
ampel 1-4 sin fußgängerampellicheter (oder so)
a 1-3 sind die lichter einer ampel
b 1-3 die der anderen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Fußgängerampel

  Alt 9. Apr 2008, 14:23
Hier mal meine Lösung für eine Ampel:

Delphi-Quellcode:
type
  TAmpelPhase = (
    apRot = 0,
    apRotGelb = 1,
    apGelb = 2,
    apGruen = 3);

 
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }  
    AktuelleAP: TAmpelPhase;
  public
    { Public declarations }  
  end;

 
var
  Form1: TForm1;

 
implementation

 
{$R *.dfm}  

 
procedure TForm1.FormCreate(Sender: TObject);
begin
  AktuelleAP := apRot;
end;

 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  case AktuelleAP of
    apRot:
    begin
      Caption := 'Rot';
      AktuelleAP := apRotGelb;
    end;
    apRotGelb:
    begin
      Caption := 'RotGelb';
      AktuelleAP := apGruen;
    end;
    apGelb:
    begin
      Caption := 'Gelb';
      AktuelleAP := apRot;
    end;
    apGruen:
    begin
      Caption := 'Grün';
      AktuelleAP := apGelb;
    end;
  end;
end;
Eine Ampel ist ein Zustandsautomat. Also habe ich die möglichen Zustände mit einem Enumerationstypen definiert. Dann brauche ich nur noch entscheiden welcher Zustand als nächstes kommt, wenn sich die Ampel in einem bestimmten Zustand befindet. Da Enumerationstypen auch Ordinaltypen sind lässt sich dies am effektivsten mit einer case-Verzweigung lösen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Fußgängerampel

  Alt 9. Apr 2008, 14:24
Und editiere Deinen ersten Beitrag bitte noch einmal und schließe den Quellcode in Delphi-Tags ein:
Code , dann ist er besser zu lesen.

Achja, sry: Willkommen in der DP
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
Beowulf

Registriert seit: 9. Apr 2008
4 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Fußgängerampel

  Alt 9. Apr 2008, 14:27
öhm, ja, danke für die hilfe luckie, aber ich glaub nich das mein lehrer mir glaubt das ich den geschrieben hab
, der hatte gesagt das das mit schleifen gemacht werden soll, werd ich nächstes mal dazuschreiben^_^
  Mit Zitat antworten Zitat
oldmax

Registriert seit: 27. Apr 2006
Ort: Gieboldehausen
167 Beiträge
 
#9

Re: Fußgängerampel

  Alt 10. Apr 2008, 07:01
Hi
Velleicht läßt sich so helfen..
Stell dir die ußgängerampel einmal vor, was passiert da ? Die Autofahrer haben grün bis ein Fußgänger kommt und auf eine Taste drückt. Das ist ein Ereignis !
Nun setzt du das in einer Schleife um
Also suchen wir eine geeignete Schleife
Es gibt die For anfang to ende diese ist starr und arbeitet immer von Anfang bis Ende.
Es gibt die Repeat until Abbruchbedingung. Das hört sich doch schon gut an
und eine While do ( Wenn wahr dann tu immer das selbe) Auch das ist brauchbar
Nun zur Ampel. Die Ampelsequenzen sollten dir bekannt sein. Ergo mußt du mit deinem Ereignis eben genau diese Sequenz nachbilden
Ereignis kommt Fahrzeugampel auf gelb ->Pause
-> Rot ->Pause
-> Fußgänger Grün
-> Pause ->Fußgänger Rot
-> Pause -> Gelb und Rot für Fahrzeug
-> Pause -> Grün führ Fahrzeug
bis zum nächsten Ereignis.
Das sind immer die gleichen 6 Schritte, also bietet sich hierfür eine For-Schleife an
Die Zeit, die dein Ampelzyklus laufen soll, ist unbekannt, also nimmst du hierfür eine Repeat

Delphi-Quellcode:
Repeat
  ..... // Hier kommt deine Ampelsteuerung hinein
until MyButtonStop.Click; // dies ist die Abbruchbedingung, sonst hast du eine Endlosschleife
Damit legst du den äußeren Rahmen fest.
Um die Ampel auszulösen benötigst du ein Button und einen globalen Merker, um den Ampelzyklus zu starten
Also wird die Variable
Ampelzyklus : Boolean; global deklarieert.
In der Ereignisprocedure der Ampalanforerung (MyAmpelButton) setzt du diese Variable auf true;
Nun gehst du in die Repeat Schleife und fügst den Ampelzyklus mit der Bedingung Ampelzyklus eine For Schleife ein.
Delphi-Quellcode:
If Ampelzyklus then
Begin
  For i:=1 to 6 do
  Begin
   .... // hier legst du deine 6 Schritte fest
   .... // benutze [b]Case[/b] oder wenn du noch nicht soweit bist dann halt [b]if[/b]
  end;
  Ampelzyklus:=False; // Ampelzyklus zurücksetzen
end;
Mußt du nun Bewegungen einsetzen, schreibst du das in die entsprechenden Schritte, bzw. in die Schleife an die richtige Stelle.
Mach dir Gedanken, wie du die Bewegung eines Objektes durchführen kannst. Dafür gibt es die Eigenschaften Top und Left. Wenn du die Werte dieser Eigenschaften veränderst, wandert das Objekt an die Stelle. Es gibt die Eigenschaft Color, die du beeinflussen kannst. Delphi ist da sehr hilfsbereit und erklärt dir viel in der Hilfe. Die mußt du nutzen, um eigene Gedanken in ein Programm zu fassen. Dir alles vorzuschreiben, das ist, wie du schon richtig geäußert hast, auffällig ud hilft dir auch nicht, zu verstehen, was eigentlich Programme sind.
Nix anderes, wie Abarbeiten von Schleifen und ein unermüdliches Zusammentragen von Daten, Berechnungen, Vergleichen usw. sowie ein Reagieren auf Ereignisse, sei es Tastatur, Maus oder Sonstwas für Signale....
Wenn dir klar wird, wie du eine Aufgabe in Schitte zerlegst, hast du eigentlich schon das Ergebnis.
Und beachte: Auch bewegungen sind Schritte....
Gruß oldmax
Noch ist mein Rechner mir zu Diensten.... ansonsten habe ich die Macht ihn zu vernichten !
  Mit Zitat antworten Zitat
Beowulf

Registriert seit: 9. Apr 2008
4 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Fußgängerampel

  Alt 10. Apr 2008, 08:44
danke oldmax, auf schleife hab ich gewartet^^
  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 13:39 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