|
|
Abastecendo
as bases |
Cada
base recebe um tipo especial de míssil |
|
Nesta página
iremos montar nossa "loja" de mísseis, ou seja, os controles
que permitem equipar as bases aliadas com um dos três diferentes
tipos de mísseis. Mas lembre-se que, para trocar de tipo
de míssil usado numa base, ela não deverá possuir
nenhuma peça. Gaste todo o arsenal dela e só então
mude de tipo, adquirindo o novo modelo.
Cada missíl
tem um preço específico e os melhores, os Cruise,
são os mais caros (mas também são os mais precisos).
Eles são usados para atacar as bases secretas de lançamento
dos Scuds. Os Patriots são os mais baratos,
mas a pontaria deles as vezes falha.
Não
tem nada de misterioso no sistema de aquisição dos
mísseis e basta uma leitura atenta da listagem para entender
como tudo foi feito. Tomamos o cuidado de não permitir a
compra de mísseis quando não existem recursos financeiros
disponíveis. Assim não existe o perigo de endividamento,
déficit orçamentário, etc. Isso fica para um
outro jogo.
O segundo
ponto que implementaremos nesta edição trata da localização
das bases secretas dos Scuds e dos seus respectivos bombardeios.
Digamos que esta é a parte que controla a estratégia
de guerra do inimigo. Compreendendo bem como ela funciona, você
poderá promover variações para tornar o jogo
mais fácil ou mais difícil. Ou mesmo incorporar alguma
inteligência artificial, na decisão de ataque. Como
está, a decisão é aleatória, obedecendo
apenas o horário que elas aconteciam (depois das 9 horas
da noite).
Relembrando
duas das matrizes dos mísseis (de 0 a 9 são os Scuds):
Mis[Qms,0]:= X Coordenadas X,Y do ponto
Mis[Qms,1]:= Y
Mis[Qms,2]:= X2 Coordenadas
X2,Y2 do alvo
Mis[Qms,3]:= Y2
Mis[Qms,4]:= C Contador
Mis[Qms,5]:= L Largura
Mis[Qms,6]:= S Altura
Mis[Qms,7]:= Mx Flags (+1)
ou (-1)
Mis[Qms,8]:= My
Tip[Qms,0]:= 0 Tipo - 1= patriot
2= cruise
3= tomahawk
4= scud All Hussein explosivo
5= scud All Hussein gás
6= scud All Abbas explosivo
7= scud All Abbas gás
Tip[Qms,1]:= 0 Se patriot,
alcance do míssil em pontos
Tip[Qms,2]:= 0 Se 255, patriot
sem rumo/0 a 9 scud alvo
Se scud (0 a 4) base alvo
O controle
de lançamento dos Scuds fica no TTimer do relógio.
Chegado o momento, e por alguns minutos de cada hora, as decisões
de lançamento são tomadas.
Carregue
o pacote no telefone mais próximo e experimente como está
o jogo até este ponto. Ainda não temos o controle
de danos, nem o ataque às bases inimigas secretas. Clique
aqui e baixe o pacote zip com os fontes do jogo até
esta etapa. |
{----------
Início do programa / comentário --------------}
QUINTA PARTE
Crie 3 TSpeedButton, com as seguintes características:
Caption = Patriot
Glyph = (carregue o arquivo PAT.BMP)
Height = 16
Left = 495
Name = Patriot
Top = 175
Width = 126
Caption = Tomahawk
Glyph = (carregue o arquivo TOM.BMP)
Height = 16
Left = 495
Name = Tomahawk
Top = 190
Width = 126
Caption = Cruise
Glyph = (carregue o arquivo CRU.BMP)
Height = 16
Left = 495
Name = Cruise
Top = 205
Width = 126
Os eventos OnClick correspondentes são:
procedure TForm1.PatriotClick(Sender: TObject);
begin
if ((ParBase[(Base-1)*2] = 0) or
(ParBase[(Base-1)*2] = 1))
and
(TotDin > 0) then begin
ParBase[(Base-1)*2]:= 1;
if ParBase[Base*2-1] <
253 then
ParBase[Base*2-1]:=
ParBase[Base*2-1]+3;
dec(TotDin); MostraDin; AtivarBase(Base);
end;
end;
procedure TForm1.TomahawkClick(Sender: TObject);
begin
if ((ParBase[(Base-1)*2] = 0) or
(ParBase[(Base-1)*2] = 3))
and
(TotDin > 0) then begin
ParBase[(Base-1)*2]:= 3;
if ParBase[Base*2-1] <
254 then
ParBase[Base*2-1]:=
ParBase[Base*2-1]+2;
dec(TotDin); MostraDin; AtivarBase(Base);
end;
end;
procedure TForm1.CruiseClick(Sender: TObject);
begin
if ((ParBase[(Base-1)*2] = 0) or
(ParBase[(Base-1)*2] = 2))
and
(TotDin > 0) then begin
ParBase[(Base-1)*2]:= 2;
if ParBase[Base*2-1] <
255 then
ParBase[Base*2-1]:=
ParBase[Base*2-1]+1;
dec(TotDin); MostraDin; AtivarBase(Base);
end;
end;
Não esqueça de colocar os eventos OnMouseDown
apontando para o evento FimMouseDown, para
produzir o "click" ao ser pressionado o botão
correspondente.
Vamos criar um registro para os Scuds. Duas variáveis
globais que serão inicializadas na ativação
do FORM1:
Lancados: integer;
{Scuds que foram lançados}
Abatidos: integer;
{Scuds abatidos}
procedure TForm1.FormActivate(Sender: TObject);
begin
Lancados:= 0; Abatidos:= 0;
MostraDin;
end;
No controle de voo dos mísseis fazemos a atualização:
procedure Teleguiado;
...
...
{Acertou....
VIVA!!!!!}
inc(Abatidos);
TelRad:=
Form1.Radar.Canvas.Handle;
...
A seguir temos que definir as novas constantes: duas
matrizes: uma para as coordenadas da base inimiga e
outra de status da base, ou seja, quantos mísseis
tem
e se está operante.
const
BasInim: array[0..23] of word =
(326,22,448,131,163,57,172,61,225,82,276,90,322,
122,354,126,351,87,296,63,400,68,402,115);
BasOk: array[0..11] of byte =
(200,200,55,55,55,55,55,55,55,55,55,55);
Troque toca a procedure que controla o relógio e
consequentemente os lançamentos dos Scuds. Por
enquanto só será possível testar os
patriots para
defender as bases.
{--- Controle do relógio do jogo ---}
procedure TForm1.Timer1Timer(Sender: TObject);
label
Fim;
var
Tmp: word;
begin
if Base <> 0 then begin
{Se as bases estiverem ativas...}
inc(Minuto);
if (Minuto = 15) or (Minuto
= 45) then MaisDinheiro;
{Libera 2 sacolas de dinheiro
a cada hora do jogo}
if Minuto = 60 then begin
{Passou
uma hora?}
Minuto:=
0; inc(Hora); if Hora < 10 then
Relog.Caption:= '0'+IntToStr(Hora) else
Relog.Caption:= IntToStr(Hora);
if Hora
= 24 then begin
{Passou
um dia?}
Hora:= 0; inc(Dia); Calend.Caption:= IntToStr(Dia);
if ((Dia = 30) and ((Mes mod 2) = 0)) or
((Dia = 31) and ((Mes mod 2) = 1)) then begin
Dia:= 1; inc(Mes); NomMes.Caption:= Meses[Mes];
{Passou um mes?}
end;
end;
end;
{Disparo
dos scuds / só depois das 9h da noite}
if (Hora
> 20) and
((Minuto > 20) and (Minuto < 30)) and
(Random(10) < 2) then begin
{Ok, lançar um scud}
Tip[Qms,0]:= Random(4)+4; {Tipo de Scud}
Tmp:= Random(13);
{De qual base?}
if BasOk[Tmp] = 0 then goto Fim; {Tem míssil?}
BasOk[Tmp]:= BasOk[Tmp] - 1;
Tmp:= Tmp * 2;
for Qms:= 0 to 9 do begin {Procura míssil vago}
if Mis[Qms,0] = 0 then begin
Cms:= clRed; {Cor do míssil}
X1:= BasInim[Tmp];
Y1:= BasInim[Tmp+1];
Tmp:= Random(5);
Tip[Qms,2]:= Tmp; {Base alvo}
Tmp:= Tmp * 2;
X2:= BasCord[Tmp];
Y2:= BasCord[Tmp+1];
PreparaMissil;
inc(Lancados);
goto Fim;
end;
end;
Fim:
end;
end;
end;
{------------ Fim do programa / comentário ---------------}
|
|
|