quinta-feira, 3 de janeiro de 2013

Procedure fimdejogo


A procedure fimdejogo é chamada a partir da procedure jogo quando o Tempo da fase chega a zero. Esta procedure mostra o Placar da partida com os pontos dos jogadores e indica se o recorde atual da fase foi superado.

O código da procedure fimdejogo foi dividido em três partes nesta postagem para facilitar a explicação.

A 1ª parte realiza uma pequena animação que mostra os textos "PLACAR" e "MINA 2" descendo lentamente a partir do topo da tela.
procedure fimdejogo;
var ind,col,tecla_res:integer;
    s,strfase:string;
begin
  apagatela;
  textcolor(15);

  for ind:=1 to 5 do
      begin
           gotoxy(36,ind);
           write('PLACAR');
           escondecursor;
           textcolor(15);
           delay(100);
           if ind <> 5 then
                  apagalinha(ind);
      end;

  for ind:=1 to 3 do
      begin
           gotoxy(36,ind);
           write('MINA 2');
           escondecursor;
           textcolor(15);
           delay(100);
           if ind <> 3 then
                  apagalinha(ind);
      end;

A 2ª parte escreve os nomes e os pontos dos jogadores na tela. Caso esteja no modo de 2 jogadores é verificado a pontuação de cada jogador para determinar o vencedor ou se a partida acabou em Empate.
  for ind:=1 to qjog do   
   begin
    textcolor(jog[ind].cor);
    if ind=1 then
       col:=47
    else
       col:=23;
    gotoxy(col,8);
    write(extrainfo[ind].nome);
    gotoxy(col+2,10);
    write(extrainfo[ind].score:3);
   end;
   textcolor(15);
   ind:=1;
   if qjog=2 then
    if extrainfo[1].score = extrainfo[2].score then
     begin
       gotoxy(36,12);
       write('EMPATE');
     end
    else
     begin
       if extrainfo[1].score > extrainfo[2].score then
          ind:=1
       else
          ind:=2;
       gotoxy(30,12);
       write('VENCEDOR : '+ extrainfo[ind].nome);
     end;

A 3ª parte verifica se os pontos do vencedor foram maior do que o recorde atual da fase. Se isto acontecer será exibido na tela o texto "NOVO RECORDE!" junto com as informações relacionadas ao recorde. O nome e os pontos do jogador serão armazenados no vetor "recordes[]" que guarda os recordes de todas as fases. No final do código a procedure enfeite é chamada para fazer a animação da borda até que a tecla ENTER seja pressionada.
   if extrainfo[ind].score > recordes[fase].score then
    begin
     textcolor(15+blink);
     gotoxy(32,14);
     write('NOVO RECORDE!');
     textcolor(15);
     recordes[fase].score := extrainfo[ind].score;
     recordes[fase].nome := extrainfo[ind].nome;
     str(recordes[fase].score:3,s);
     str(fase:2,strfase);
     s:= 'FASE '+ strfase+' : '+ s + ' - '+ recordes[fase].nome;
     gotoxy(28,16);
     write(s);
    end;
  gotoxy(25,20);
  write('Pressione ENTER para continuar.');
  repeat
   enfeite;
   tecla_res:=ord(upcase(readkey));
   if tecla_res=0 then tecla_res:=ord(readkey)+255;
  until tecla_res=ENT;
end;