SpaceAllience_Animation
Publicado por Ytrio Salmito Azevedo Silva (última atualização em 18/11/2011)
[ Hits: 3.485 ]
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.
Editor de Texto feito no Lazarus(Delphi 7 para Linux)
Achar o maior e o menor valor inserido pelo usuario
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
É cada coisa que me aparece! - não é só 3% (1)
Alguma pessoa pode me ajudar com drriver Core i3 7020u (Debian 12)? (2)
Mikrotik não mostra bytes nem packtes (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código [RESOLVID... (4)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta