A programação
Como é o jogo por dentro e seu funcionamento

Toda a programação do jogo está baseada numa matriz de bytes que contém o modelo do ambiente e os códigos dos fungos, jogador e bomba. A matriz possui 22 linhas por 32 colunas, onde cada byte representa uma célula gráfica de 8 x 8 pixels para a tela. Assim, a imagem final do ambiente possui 256 x 176 pixels.

 Mapa: array [0..21,0..31] of byte = (
(9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9),
(9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,9),
(9,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,9),
(9,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,9),
(9,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,9),
(9,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,9),
(9,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,9),
(9,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9),
(9,1,1,1,1,1,1,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9),
(9,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,9),
(9,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,9),
(9,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,9),
(9,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9),
(9,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,9),
(9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,9),
(9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,9),
(9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,9),
(9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,9),
(9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,9),
(9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,9),
(9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,9),
(9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9));

Note que usamos os valores 1 e 9 para indicar um módulo do ambiente (parede). Isso para que ao explodir a bomba, apenas os módulos 1 sejam apagados e os 9 não (que são justamente as laterais do mapa (senão os fungos escapam do laboratório esabe-se lá onde vão parar).

Para desenhar a tela, usamos uma TImage (Imgs) que servirá de matriz para cada célula e uma procedure de transderência (claro, montando tudo num buffer de imagem - Bfm, antes de efetivamente mostrarmos ao jogador):

procedure TForm1.MontarMapa;
var
Tl,Tc: integer;
begin
for Tl:= 0 to 21 do begin
for
Tc:= 0 to 31 do begin
BitBlt(Bfm.Canvas.Handle,Tc*8,Tl*8,8,8,
Imgs.Canvas.Handle,Mapa[Tl,Tc]*8,0,srccopy);
end;
end;
end;

A geração dos fungos é totalmente aleatória e eles devem ter basicamente as mesmas quantidades. O sistema sorteia um de cada tipo por vez:

procedure TForm1.SorteiaBots;
label
Vt1;
var
Tm,Tn: integer;
Tp,Tz: byte;
begin
for
Tm:= 0 to 21 do for Tn:= 0 to 31 do
if (Mapa[Tm,Tn] = 3) or (Mapa[Tm,Tn] = 4) then Mapa[Tm,Tn]:= 0;
Mapa[Py,Px]:= 2;
Tp:= 0; Tz:= 3; Tvrm:= 0; Tvrd:= 0;
for Tm:= 0 to 50 do begin
Jx[Tm]:= 0; Jy[Tm]:= 0;
//Sortei se é para criar um fungo
if random(10) > 6 then begin
Vt1:
Jx[Tp]:= random(30)+1;
Jy[Tp]:= random(20)+1;
if Mapa[Jy[Tp],Jx[Tp]] <> 0 then goto Vt1;
Mapa[Jy[Tp],Jx[Tp]]:= Tz;
if Tz = 3 then inc(Tvrm);
if Tz = 4 then inc(Tvrd);
inc(Tz); if Tz = 5 then Tz:= 3;
Jd[Tp]:= random(3)+1;
inc(Tp);
end;
end;

Gvrm.MaxValue:= Tvrm + Tvrd;
Gvrm.Progress:= Tvrm;
Gvrd.MaxValue:= Tvrm + Tvrd;
Gvrd.Progress:= Tvrd;
end;

Os movimentos dos fungos estão dentro de um TTimer que verifica, um a um os fungos existentes, se podem ir numa direção pré determinada. Se puderem (ou seja, se a posição futura for zero) eles são movidos. Se não puderem, o sistema sorteia uma nova direção e tenta na próxima rodada.

É só isso. Todo o resto é processamento de apoio, como funcionalizar os cliques, criar a janela transparente, mover o formulário pela tela etc. Tudo já foi visto e revisto em diversas outras páginas da TILT online.

Em caso de dúvidas, não deixe de mandar um e-mail para a gente. Se preferir, exponha sua dúvida na lista da TILT, para que todos os assinantes participem do debate e da troca de idéias.

 
online