sexta-feira, 4 de janeiro de 2013

Uso de Arquivo para os Recordes


Os recordes das fases do Mina 2 são gravados em um arquivo quando o programa é finalizado para que estes recordes possam ser recuperados na próxima execução do Mina 2. Se este arquivo não fosse usado, os valores dos Recordes sempre retornariam ao valor padrão em uma nova execução do jogo.

A variável com o nome "frec" é usada para referenciar o arquivo que guarda os recordes no Mina 2. Ela foi definida da seguinte forma:
type tiporecorde = record
                      nome:string[10];
                      score:integer;
                   end;

var frec: file of tiporecorde;

Como pode ser visto no Laço Principal, no começo da execução do programa, a variável "frec" é associada ao nome de arquivo "recordes.mi2" através da procedure assign():
assign(frec,'recordes.mi2');

Logo após é chamada a procedure verificarecordes que irá procurar pelo arquivo "recordes.mi2" e carregar os valores de recordes caso o arquivo seja encontrado. Se o aquivo não existir, serão utilizados os valores padrões para os recordes.

O código da procedure verificarecordes é o seguinte:
procedure verificarecordes;            
var texto1:PathStr;
    ind:integer;
begin
     texto1:=FSearch('recordes.mi2','.');
     if texto1 = '' then
        for ind:=1 to QF do
          begin
            recordes[ind].nome:='Computador';
            recordes[ind].score:=100;
          end
     else
        begin
          reset(frec);
          for ind:=1 to QF do
              read(frec,recordes[ind]);
        end;
end;

A procedure gravarecordes é chamada quando for escolhida a opção "Finalizar" na procedure menu. Esta procedure é responsável por gravar os recordes atuais das fases no arquivo "recordes.mi2".

Código da procedure gravarecordes:
procedure gravarecordes;            
var ind:integer;
begin
  rewrite(frec);
  for ind:=1 to QF do
      write(frec,recordes[ind]);
  close(frec);
end;

A tela de recordes é acessada a partir do Menu Principal do Mina 2. A procedure procrecorde controla esta tela que é apenas informativa. É feito um conjunto de movimentações com os textos para montar a tela. O trecho de código abaixo é responsável por mover os textos que contém o recorde de cada fase da direita para esquerda até sua posição correta.
 {trecho da procedure procrecorde}

  for rec:= 1 to QF do
      begin
           str(recordes[rec].score:3,s);
           str(rec:2,strfase);
           s:= 'FASE '+ strfase+' : '+ s + ' - '+ recordes[rec].nome;
           for ind:=80 downto 25 do
               begin
                    x:=81-ind;
                    if x>26 then x:=26;
                    gotoxy(ind,(rec*2)+6);
                    write(copy(s,1,x));
                    escondecursor;
                    textcolor(14);
                    delay(20);
                    if ind <> 25 then
                       apagalinha((rec*2)+6);
               end;
      end;