Einzelnen Beitrag anzeigen

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