|
|
Recebendo
um fax do comando |
Como
processar as mensagens que o programa gera |
|
Uma
das características do nosso jogo é que todos os comunicados
entre o sistema e o jogador são feitos pelo Fax. E é
este recurso que iremos implementar agora, assim você poderá
criar mensagens para todas as operações que desejar
informar ao jogador.
O
funcionamento do fax se baseia em duas TImages que representam a
área impressa do papel. Uma delas é visível,
mas a outra fica invisível. Na TImage invisível escrevemos
o texto desejado, usando para isso uma função (function
SendFax).
Em
primeiro lugar, a função limpa a área do papel
e depois imprime a mensagem. A transferência de conteúdo
é feita da TImage invisível para a visível
linha a linha, provocando antes um scroll vertical, para baixo,
do conteúdo da TImage destino. Assim, conseguimos o efeito
de animação do fax sendo recebido. Providenciamos
até uma luz que fica piscando enquanto o sistema está
recebendo a mensagem.
As
mensagens que serão recebidas precisam obedecer aos seguintes
critérios: ter poucas palavras por linha e no máximo
sete linhas de texto. Veja o exemplo de uma mensagem normal:
SendFax('ATENÇÃO: sistema de',
'vigia detectou o',
'lançamento de mísseis',
'Scud.',
'','','');
Esta
mensagem foi colocada no evento OnTimer1, quando ocorre a decisão
de lançamento de um Scud (no telefone tem a versão
compilada do jogo, até aqui). Note que as sete linhas precisam
estar definidas, senão algum lixo acabará sendo impresso.
Outro
exemplo foi colocado no momento em que um Scud é abatido
por um míssil Patriot, na procedure Teleguiado:
SendFax('Scud foi abatido.',
'',
'Total abatido: '+IntToStr(Abatidos),
'','','','');
As
mensagens serão de grande utilidade quando tivermos que reportar
o resultado dos ataques dos Scuds às nossas bases e os nossos
ataques às bases de lançamento dos Scuds. Mas,
independente disto, em outros momentos também podemos fazer
uso do sistema, como por exemplo para informar sobre os aviões
AWACs (pouso e decolagem), para reportar de tempos em tempos
a situação da guerra, das bases, etc. Clique
aqui e baixe o pacote zip com os fontes do jogo até
esta etapa. |
{----------
Início do programa / comentário --------------}
SEXTA PARTE
Crie duas TImages:
AutoSize = False
Height = 93
Left = 502
Name = Fax
Picture (None)
Top = 339
Visible = True
Width = 115
AutoSize = False
Height = 93
Left = 507
Name = FaxBak
Picture (None)
Top = 344
Visible = False
Width = 115
Para avisar que está chegando um
fax, crie um TPanel:
BevelInner = bvNone
BevelOuter = bvNone
BorderStyle = bsSingle
Caption = ''
Color = clGray
Height = 6
Left = 510
Name = LuzFax
Top = 315
Width = 12
Crie mais um TTimer:
Interval = 20
Name = CtrFax
O evento OnTimer está logo abaixo.
Defina agora, na área de constantes
globais, a seguinte variável:
StFax: integer = 0;
Só falta transferir o código a seguir:
{--- Envia um fax, desde que seja possível ---}
function SendFax(L1,L2,L3,L4,L5,L6,L7: string): bool;
begin
if StFax = 0 then begin
Form1.FaxBak.Canvas.Pen.Color:= clWhite;
Form1.FaxBak.Canvas.Brush.Color:= clWhite;
Form1.FaxBak.Canvas.Rectangle(0,0,114,92);
Form1.FaxBak.Canvas.Font.Name:= 'arial';
Form1.FaxBak.Canvas.Font.Size:= 8;
Form1.FaxBak.Canvas.Pen.Color:= clBlack;
Form1.FaxBak.Canvas.TextOut
(0,-8,'----------------------------');
Form1.FaxBak.Canvas.TextOut(0,2,L1);
Form1.FaxBak.Canvas.TextOut(0,15,L2);
Form1.FaxBak.Canvas.TextOut(0,28,L3);
Form1.FaxBak.Canvas.TextOut(0,41,L4);
Form1.FaxBak.Canvas.TextOut(0,54,L5);
Form1.FaxBak.Canvas.TextOut(0,67,L6);
Form1.FaxBak.Canvas.TextOut(0,80,L7);
StFax:= 93;
end;
end;
procedure TForm1.CtrFaxTimer(Sender: TObject);
var
Fax1,Fax2: HBitmap;
begin
if StFax <> 0 then begin
dec(StFax);
if (StFax mod 2) = 0 then
LuzFax.Color:= clGray else
LuzFax.Color:=
clRed;
Fax1:= Fax.Canvas.Handle;
Fax2:= FaxBak.Canvas.Handle;
BitBlt(Fax1,0,1,115,92,Fax1,0,0,SRCCOPY);
BitBlt(Fax1,0,0,115,1,Fax2,0,StFax,SRCCOPY);
Fax.Repaint;
end;
end;
{------------ Fim do programa / comentário ---------------}
|
|
|