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.