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