SpaceAllience_Animation
Publicado por Ytrio Salmito Azevedo Silva (última atualização em 18/11/2011)
[ Hits: 3.744 ]
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.
soma da diagonal principal de uma matriz
Editor de texto em Pascal/Lazarus
programa para selecionar os números em posições impares em array de 19 espaços e calcular a media
encontrar o maior e o menor valor em um vetor
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
É normal não gostar de KDE? (7)
O programa assinador digital (0)
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)









