SpaceAllience_Animation
Publicado por Ytrio Salmito Azevedo Silva (última atualização em 18/11/2011)
[ Hits: 3.872 ]
Download SpaceAllienceBeta.pas
Animação de uma nave espacial feita em pascal / Kylix. Se forem estudar o source, não esqueçam de configurar a janela do saída para:
|57 - linhas |
|100 - Colunas |
Por que as dimensões da tela, está configurada para essas dimensões.
Para que a nave possa atirar, basta pressional <TAB> , coloquei no máximo 2 tiros por vez.. Alterem como quiserem e se divirtam.
Espero que sirva de estudo para vocês.
Abs;
Program SpaceAllience2D;
const
// Inicialização das constantes..
right = #77;
DrawBullet = '----';
SpeedNave = 37;
MaxValueY = 45;
MinValueY = -6;
MaxValueX = 87;
MinValueX = -4;
var
//############################
// Declaração das variávels..
//###########################
Gameover:boolean;
Direcion,VK_KEY:char;
Score:real;
life:string;
ShipX,ShipY,level:integer;
event:char;
i,j,z:integer;
isbool,ChkControl:array[1..2] of boolean;
X,Y:array[1..2] of integer;
//######################
//Procedimento de limpeza;
//######################
procedure Clear(X1,X2,Y1,Y2:integer);
begin
for i := x1 to x2 do
for j := y1 to y2 do
begin
gotoxy(j,i);
write(' ');
end;
end;
//########################
// Pontuação do jogador..
//########################
procedure paintPanel;
begin
level := 01;
// Cor do painel..
textcolor(white);
// Desenha a barrinha de life..
for i := 1 to 20 do Life := Life + #177;
gotoxy(85,2);
write('Score: ',score:0:4);
gotoxy(2,2);
write('Life: ',life);
gotoxy(2,3);
write('Level: ',0,level);
end;
//###########################################
// Desenha a nave e controla a posição X,Y...
//###########################################
procedure Nave(ShipX,ShipY:integer);
begin
// Apaga o rastro...
textcolor(black);
gotoxy(5 + ShipX, 9 + ShipY);
write(' ');
gotoxy(11 + ShipX, 10 + ShipY);
write(' ');
gotoxy(11 + ShipX, 12 + ShipY);
write(' ');
gotoxy(5 + ShipX, 13 + ShipY);
write(' ');
//------------------------------------//
// Desenha a Navinha...
textcolor(yellow);
gotoxy(5 + ShipX,10 + ShipY);
write(' ',':> ',' ');
gotoxy(5 + ShipX,11 + ShipY);
write(' ','| > ');
gotoxy(5 + ShipX,12 + ShipY);
write(' ',':> ',' ');
// Envia para 1 - coluna , 1 - linha..
gotoxy(1,1);
end;
// Iniciar o jogo..
procedure Startgame;
begin
textcolor(lightred);
While(Vk_key <> #13) do begin
if(keypressed) then VK_KEY := readkey;
delay(300);
gotoxy(34,28);
write('##Pressione [Enter] para Iniciar##');
delay(300);
clear(28,28,34,68);
end;
end;
//######################################
// Simulação de Carregamento do Jogo...
//######################################
procedure LoadingGame;
Begin
textcolor(Lightgray);
// Carrega a Barrinha;
for i := 1 to 30 do
begin
gotoxy(1,1);
write('Load.Screen: ' ,3 * i + 10);
delay(20);
gotoxy(i,2);
write(#177);
end;
// Apaga a barrinha..
clrscr;
end;
procedure CheckBounds(x,y:integer);
begin
if (ShipX = MinValueX) then inc(ShipX);
if (ShipX = MaxValueX) then dec(ShipX);
if (ShipY = MinValueY) then inc(Shipy);
if (ShipY = MaxValueY) then dec(ShipY);
end;
procedure ActionBullet(z:integer);
begin
// cor da tela..
textcolor(lightgreen);
// Atualizar a posição X & Y da balinha..
if(ChkControl[z]) then
begin
X[z] := ShipX + 5;
Y[z] := ShipY + 11;
end;
// Movimenta a balinha na tela..
x[z] := x[z] + 4;
isbool[z] := true;
ChkControl[z] := false;
// Desenha na posição especifica;
gotoxy(x[z],y[z]);
write(' ',drawbullet);
{
Verifica se abalinha colidio
com a tela...
}
if(X[z] >= 94) then
begin
// Limpa o rastro da balinha..
Clear(Y[z],Y[z],X[z],X[z] + 8);
// Reinicia X & Y como 0..
x[z] := 0;
y[z] := 0;
// Reinicia Isbool & CheckControl como false..
isbool[z] := false;
ChkControl[z] := true;
// reinicia o evento..
event := ' ';
end;
// fim do método...
end;
//Controla o movimento da navinha na tela.
procedure Mover(direcion:char);
begin
//Loop principal do jogo...
while not (Gameover) do
begin
// Captura o Movimento Atual...
VK_KEY := direcion;
// Desenha a Navinha na tela..
Nave(ShipX,shipY);
//Verifica se existe alguma SETA pressionada..
if (keypressed) then direcion := readkey;
Case direcion of
#72: dec(ShipY); // Cima;
#75: dec(ShipX); // Esquerda;
#77: inc(ShipX); // Direita;
#80: inc(ShipY); // Baixo;
else direcion := VK_KEY;
end;
// Velocidade da balinha..
delay(SpeedNave);
//Checa as borda
CheckBounds(ShipX,ShipY);
// teste para verifica se duas balinhas pode ir ao mesmo tempo..
if (isbool[1]) and (z = 2) then
Actionbullet(1);
if (isbool[2]) and (z = 1) then
ActionBullet(2);
// Controla o disparo da balinha na tela..
if(keypressed) then
begin
event := readkey;
if(event = #9) and (z = 1) then
inc(z) else z := 1;
end;
// Controle do disparo...
case event of
#9 : case z of
1,2:ActionBullet(z);
end else begin
for i := 1 to 2 do
if(z = i) and (x[i]>= 4) then Actionbullet(i);
end;
end;
end;
end;
//##########################################
// Inicialização da parte principal do jogo
//##########################################
Procedure ScreenMenu;
var newgame:char;
begin
//#################################
// Desenha o Box de menu do jogo...
//#################################
For i := 1 to 10 do
For j := 1 to 21 do
begin
textcolor(Lightgreen);
gotoxy(j,i);
write('#');
end;
clear(2,9,2,20);
//#################################
// Desenha o menu principal..
//#################################
For i:= 1 to 4 do
begin
textcolor( i * 15);
gotoxy(3,i*2);
case i of
1 : Write('Space Allience 2D');
2 : Write('N: New game');
3 : Write('E: Exit Game');
4 : Write('By Hs Skywalker');
end;
end;
//###################
// Menu de Escolha..
//####################
gotoxy(2,11);
textcolor(white);
write('Escolhar uma Opção: ');
Repeat
Newgame := Upcase(readkey);
Until(Newgame = Upcase('N')) or (newgame = upcase('E') ) ;
// Inicializar o jogo...
case newgame of
'N','n':
begin
clrscr;
LoadingGame;
paintPanel;
Startgame;
mover(right);
end;
'E','e':
begin
clrscr;
gameover := true;
end;
end;
end;
//############################
// O programa inicia aqui!
//############################
Begin
clrscr;
//#########################################
// Inicialização das váriavels principais
//########################################
for z := 1 to 2 do ChkControl[z] := true;
GameOver := false;
//Menu principal;
ScreenMenu;
End.
encontrar o maior e o menor valor em um vetor
Nenhum comentário foi encontrado.
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Como rodar o Folding@home no Linux
Criando um painel de controle (Dashboard) para seu servidor com o Homepage
O Abismo entre o Código e o Chão: Saltos Tecnológicos e a Exclusão Estrutural no Brasil
Instalar e Configurar a santíssima trindade (PAP) no Void Linux
Pisando no acelerador do Linux Mint: Kernel XanMod, zRAM e Ajustes de Swap
Como compilar kernel no Linux Mint
Lançamento do Brutal DOOM test 6
Consertando o erro no Brave de webgl
Solução para ter de volta as bordas e barra de títulos das janelas em zenity no Debian 13.x
Seno, Coseno, Tangente em CLIPPER (0)
Inserir uma URL num arquvo pelo Ubuntu (CLIPPER) (0)
VMWare Player não conecta na rede nem consigo intercambiar arquivos (1)









