Executando um fonte
Como o programa roda dentro do sistema

Partimos do pressuposto de que o fonte está num componente de texto, chamado Fonte e que tem diversas linhas que deverão ser analisadas e executadas de acordo com a normatização das instruções. Portanto, ao rodar um jogo, devemos inicializar o que for preciso e processar linha a linha.

Iremos dividir essa tarefa em duas etapas: primeiro analisamos a linha e recolhemos instrução e parâmetros e depois executamos a instrução propriamente dita. Uma procedure simples ou uma tecla "run" seria mais ou menos assim:

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
//Ignora se não houver fonte

if Fonte.Lines.Count = 0 then exit;
Stb:= false; Num:= 0; Stp:= true;
while Stp do begin
if
Num > Fonte.Lines.Count then exit;
Lin:= Fonte.Lines[Num];
inc(Num);
OrgParam;
ExecLin;
end;
end;

As duas procedures OrgParam e ExecLin são definidas à parte:

procedure TForm1.OrgParam;
var
Tc: integer;
begin
//ignora linha em branco
if Lin <> '' then begin
//decodifica instrução e parâmetros
Tc:= 1; Cmd:= '';
//ignora espaços iniciais
while (Lin[Tc] = ' ') and (Tc <= length(Lin)) do inc(Tc);
//pega a instrução
while (Lin[Tc] <> ' ') and (Tc <= length(Lin)) do begin
Cmd:= Cmd + Lin[Tc]; inc(Tc); end;
inc(Tc); Vs1:= '';
//pega parâmetro 1, se houver
while (Lin[Tc] <> ',') and (Tc <= length(Lin)) do begin
Vs1:= Vs1 + Lin[Tc]; inc(Tc);
end;
inc(Tc); Vs2:= '';
//pega parâmetro 2, se houver
while (Lin[Tc] <> ',') and (Tc <= length(Lin)) do begin
Vs2:= Vs2 + Lin[Tc]; inc(Tc);
end;
inc(Tc); Vs3:= '';
//pega parâmetro 3, se houver
while (Lin[Tc] <> ',') and (Tc <= length(Lin)) do begin
Vs3:= Vs3 + Lin[Tc]; inc(Tc);
end;
inc(Tc); Vs4:= '';
//pega parâmetro 4, se houver
while (Lin[Tc] <> ',') and (Tc <= length(Lin)) do begin
Vs4:= Vs4 + Lin[Tc]; inc(Tc);
end;
inc(Tc); Vs5:= '';
//pega parâmetro 5, se houver
while (Lin[Tc] <> ',') and (Tc <= length(Lin)) do begin
Vs5:= Vs5 + Lin[Tc]; inc(Tc);
end;
end;
end; procedure
TForm1.ExecLin;
var
Px,Py,Pz: integer;
Fig: TBitmap;

begin
//aqui entra a programação de cada instrução //... end;
 
online