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;
|
|