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;

  



Esconder código-fonte

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.

Scripts recomendados

somatório de uma matriz 7x5

Tratar campos not null

Fibonacci (Pascal)

Editor de Texto feito no Lazarus(Delphi 7 para Linux)

Achar o maior e o menor valor inserido pelo usuario


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts