Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.530 Beiträge
Delphi 12 Athens
|
Re: "Lego Logo für Arme" - Brauche Hilfe
20. Okt 2008, 18:49
Der Einfachheit halber lasse ich mal nur ganze Zahlen als Weg bzw. Winkel zu. Das läßt sich aber leicht erweitern.
Delphi-Quellcode:
procedure TForm1.Execute( var S: string);
function GetZahl( var S: string): Integer;
var
neg: Boolean;
begin
Result := 0;
neg := false;
if S[1] in [' -', ' +'] then begin
neg := S[1] = ' -';
Delete(S, 1, 1);
end;
while (Length(S) > 0) and (S[1] in [' 0'..' 9']) do begin
result := 10*result + Ord(S[1]) - Ord(' 0');
Delete(S, 1, 1);
end;
if neg then
result := -result;
end;
var
I: Integer;
N: Integer;
save: string;
begin
while Length(S) > 0 do begin
case UpCase(S[1]) of
' W': begin
Delete(S, 1, 1);
N := GetZahl(S);
Assert(S[1] = ' (', ' '' ('' expected');
Delete(S, 1, 1);
save := S;
for I := 1 to N - 1 do begin
S := save;
Execute(S);
end;
end;
' V': begin
Delete(S, 1, 1);
Gehe(GetZahl(S));
end;
' R': begin
Delete(S, 1, 1);
Drehe(GetZahl(S));
end;
' )': begin
Delete(S, 1, 1);
Break;
end;
else
raise Exception.Create(' ungültiges Zeichen');
end;
end;
end;
// Aufruf
var
S: String;
begin
S := Trim(Edit1.Text);
Execute(S);
Assert(S = ' ', ' Befehle nicht vollständig abgearbeitet');
end;
Uwe Raabe
|
|
Zitat
|