A Procedure tela é responsável por desenhar a tela relacionada a fase que o jogador escolheu e inicializar todos os itens desta fase. Esta procedure é executada apenas uma vez antes de começar uma partida.
O código desta procedure é extenso mas é simples. As ações que são executadas dentro desta procedure são as seguintes:
O código desta procedure é extenso mas é simples. As ações que são executadas dentro desta procedure são as seguintes:
procedure tela;
var i:integer;
s,strfase:string;
begin
{ Inicia dados dos jogadores... }
{ Inicia dados das bolas... }
{ Limpa a matriz mapa que representa a fase atual... }
{ Preenche as bordas da fase na matriz mapa... }
{ Preenche a matriz mapa de acordo com a fase escolhida... }
{ Desenha a fase de acordo com os valores da matriz mapa... }
{ Inicia as minas da fase... }
{ Inicia os objetos que os jogadores tem de pegar... }
{ Monta a string de Recorde e exibe no topo da tela... }
end;
O código abaixo inicia os dados do jogador. Lembre-se que as variáveis "jog" e "obj" são arrays de duas posições do tipo "geral". O tipo "geral" é definido no início do programa e possui as variáveis col, lin, cara, cor e direcao.
for i:= 1 to qjog do
begin
jog[i].cara:=2;
jog[i].direcao:=0;
extrainfo[i].score:=0;
if i = 1 then
begin
jog[i].col:=28;
jog[i].lin:=11;
jog[i].cor:=10;
obj[i].cara:=4;
obj[i].cor:=10;
end
else
begin
jog[i].col:=23;
jog[i].lin:=7;
jog[i].cor:=14;
obj[i].cara:=6;
obj[i].cor:=14;
end;
end;
As variáveis lin e col definem a posição na área do jogo. A variável direcao pode conter os valores de 0 a 4, sendo que 0 (zero) significa que o jogador está parado e os outros valores indicam a direção atual que o jogador está se movendo.
A variável cara contém o valor ASCII do símbolo que deve ser desenhado na tela. Os valores utilizados no Mina 2 são:
☻ (ASCII = 2), ♦ (ASCII = 4) e ♠ (ASCII = 6)
O 1º jogador utiliza a cor verde claro (valor = 10) e o 2º jogador utiliza a cor amarelo (valor = 14). A cor também é usada nos objetos que os jogadores devem pegar.
Em relação as bolas do jogo, elas iniciam em posições predeterminadas na área de jogo mas com um pequeno ajuste aleatório que é obtido usando a função "random()".
A função "random()" recebe como parâmetro um valor inteiro X e retorna um valor aleatório que vai de 0 até X-1. Por exemplo, random(3) pode retornar os valores 0, 1 ou 2.
O trecho de código abaixo mostra como é definida a posição da 1ª bola na área de jogo. As outras bolas são feitas de forma semelhante.
A variável cara contém o valor ASCII do símbolo que deve ser desenhado na tela. Os valores utilizados no Mina 2 são:
☻ (ASCII = 2), ♦ (ASCII = 4) e ♠ (ASCII = 6)
O 1º jogador utiliza a cor verde claro (valor = 10) e o 2º jogador utiliza a cor amarelo (valor = 14). A cor também é usada nos objetos que os jogadores devem pegar.
Em relação as bolas do jogo, elas iniciam em posições predeterminadas na área de jogo mas com um pequeno ajuste aleatório que é obtido usando a função "random()".
A função "random()" recebe como parâmetro um valor inteiro X e retorna um valor aleatório que vai de 0 até X-1. Por exemplo, random(3) pode retornar os valores 0, 1 ou 2.
O trecho de código abaixo mostra como é definida a posição da 1ª bola na área de jogo. As outras bolas são feitas de forma semelhante.
if qbola > 0 then
for i:= 1 to qbola do
begin
case i of
1: begin
bola[i].col:=3+random(3);
bola[i].lin:=2+random(3);
bola[i].direcao:=2;
end;
...
Esta imagem mostra como ficaram as posições iniciais das 8 bolas na fase 2.
A matriz mapa[lin,col] guarda o valor "1" para as posições da fase que contém um bloco. Todas as fases possuem o mesmo tipo de borda feito com os blocos. A parte interior da área do jogo é preenchida de acordo com a fase escolhida.
O código abaixo mostra o algoritmo de preenchimento das fases de 2 a 5. A fase 1 não está presente porque não existe nenhum bloco na área central da fase 1.
Por exemplo, a fase 2 que está na imagem acima consiste apenas das bordas e de uma linha central que inicia na posição (lin=9, col=12) e vai até a posição (lin=9, col=39) da matriz mapa.
O código abaixo mostra o algoritmo de preenchimento das fases de 2 a 5. A fase 1 não está presente porque não existe nenhum bloco na área central da fase 1.
Por exemplo, a fase 2 que está na imagem acima consiste apenas das bordas e de uma linha central que inicia na posição (lin=9, col=12) e vai até a posição (lin=9, col=39) da matriz mapa.
case fase of
2: for i:= 12 to 39 do
mapa[9,i]:=1;
3: for i:= 5 to 13 do
begin
mapa[i,15]:=1;
mapa[i,36]:=1;
end;
4: for i:= 12 to 39 do
begin
mapa[5,i]:=1;
mapa[13,i]:=1;
if (i=25) or (i=26) then
begin
mapa[8,i]:=1;
mapa[9,i]:=1;
mapa[10,i]:=1;
end;
end;
5: begin
i:=12;
repeat
if(odd(i)) then
for j:=4 to 12 do
mapa[j,i]:=1
else
for j:=6 to 14 do
mapa[j,i]:=1;
i:=i+9;
until i>39;
end;
end;
O código que desenha os blocos na tela baseado nos valores da matriz mapa é o seguinte:
textcolor(12); {cor vermelha}
for i:= 1 to altura do
for j:= 1 to largura do
if mapa[i,j]=1 then
begin
gotoxy(j+difcol,i+diflin);
write('█');
end;
As diferenças entre as coordenadas da área do jogo e as coordenadas da tela estão definidas nas constantes "diflin = 6" e "difcol = 15", sendo assim a posição (1,1) da matriz mapa será desenhada na coordenada de tela (7,16).
Todas as variáveis que definem as posições do jogador, objetos e bolas, são referentes a posição dentro da área de jogo. Para encontrar a posição real de tela onde serão desenhados esses itens é preciso adicionar os valores das constantes diflin e difcol.
Todas as variáveis que definem as posições do jogador, objetos e bolas, são referentes a posição dentro da área de jogo. Para encontrar a posição real de tela onde serão desenhados esses itens é preciso adicionar os valores das constantes diflin e difcol.