A tela de Instruções do Mina 2 é a mais simples de todas. Ela apenas exibe um texto para o usuário e aguarda que seja pressionada a tecla ENTER.
Evitei usar acentuação no texto de Instruções porque haviam muitos PCs da época que não estavam configurados corretamente e acabavam mostrando caracteres estranhos.
O código completo da procedure instrucoes é o seguinte:
Evitei usar acentuação no texto de Instruções porque haviam muitos PCs da época que não estavam configurados corretamente e acabavam mostrando caracteres estranhos.
O código completo da procedure instrucoes é o seguinte:
procedure instrucoes;
var tecla_res:integer;
begin
apagatela;
textcolor(14);
textbackground(0);
gotoxy(1,2);
writeln(' INSTRUCOES ');
writeln(' MINA 2 eh um jogo para um ou dois jogadores. O seu objetivo eh pegar ');
writeln(' o maximo de objetos que aparecem na tela em um tempo limitado. Voce pode');
writeln(' alterar a velocidade, o n§ de bolas e a fase onde quer jogar. No campo');
writeln(' do jogo existem 5 minas escondidas. Se encontrar uma mina, bater na');
writeln(' parede ou ser atingido por uma bola, voce morre e perde 5 pontos. ');
writeln(' A cada 5 unidades de tempo as minas mudam de posicao.');
writeln(' Cada vez que pegar um objeto ganhara pontos de acordo com a seguinte');
writeln(' formula : pontos = (n§ da velocidade) + (n§ de bolas).');
writeln(' Por isso quanto maior for a velocidade e o n§ de bolas , mais pontos');
writeln(' voce podera ganhar. Se estiver no modo de 2 jogadores, o jogador da');
writeln(' direita pega o objeto ',chr(4),' e o da esquerda pega o ',chr(6),' .');
writeln(' Controles do jogo: P - pausa/despausa ESC - encerra uma partida');
writeln(' 1§ jogador: usa as setas p/ se movimentar.');
writeln(' 2§ jogador: W');
writeln(' A S D');
writeln(' OBS: Voce nao precisa segurar a tecla para mover o personagem. Basta');
writeln(' da um toque na direcao desejada que ele ira.');
writeln(' Ass: Marcos Romero G. de Almeida. E-mail: maromero@zaz.com.br');
writeln(' PRESSIONE ENTER P/ CONTINUAR');
repeat
enfeite;
tecla_res:=ord(readkey);
if tecla_res=0 then tecla_res:=ord(readkey)+255;
until tecla_res=ENT;
end;
A procedure auxiliar apagatela foi feita para limpar a tela devagar e é utilizada em várias partes do Mina 2 para fazer a transição entre telas.
O texto é escrito a partir da 2ª linha da tela usando a cor amarela (valor 14) e o fundo preto (valor 0).
A procedure writeln(texto) escreve um texto e depois coloca o cursor no início da próxima linha.
Para escrever os símbolos ♦ (ASCII = 4) e ♠ (ASCII = 6), utilizei a função chr() na seguinte linha:
O texto é escrito a partir da 2ª linha da tela usando a cor amarela (valor 14) e o fundo preto (valor 0).
A procedure writeln(texto) escreve um texto e depois coloca o cursor no início da próxima linha.
No código fonte, onde aparece o símbolo § deveria aparecer º. Na execução do programa o símbolo º aparece corretamente.
writeln(' direita pega o objeto ',chr(4),' e o da esquerda pega o ',chr(6),' .');
Para fazer a leitura das teclas pressionadas no Mina 2, utilizo as seguintes funções do Pascal:
- keypressed: Esta função retorna True caso alguma tecla tenha sido pressionada.
- readkey: Esta função retorna o caractere associado a tecla que foi pressionada.
- ord(char): Esta função retorna o código ASCII de um caractere.
Uma observação sobre a função readkey. Algumas teclas especiais como as de funções (F1, F2...) e as Setas do teclado possuem dois Bytes. Por isso a primeira leitura do readkey retornará 0 (zero), sendo necessário chamar o readkey de novo para pegar o valor desta tecla especial. Para diferenciar as teclas especiais das teclas normais, eu adiciono o valor 255 quando identifico que é uma tecla especial.
Esta lógica está no código abaixo:
tecla_res := ord(readkey);
if tecla_res = 0 then tecla_res := ord(readkey) + 255;
A procedure enfeite, que se encontra dentro do bloco repeat / until, é usada para fazer a animação da borda da tela até que uma tecla seja pressionada. Dentro dela está a chamada para a função keypressed. A procedure enfeite será analisada no próximo artigo.
Se a tecla pressionada for o ENTER, cujo código ASCII está armazenado na constante ENT, então a procedure instrucoes encerrará e o programa voltará para o menu.
Se a tecla pressionada for o ENTER, cujo código ASCII está armazenado na constante ENT, então a procedure instrucoes encerrará e o programa voltará para o menu.