SpaceAllience_Animation

Publicado por Ytrio Salmito Azevedo Silva (última atualização em 18/11/2011)

[ Hits: 3.467 ]

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

pares ou impares

Matrix

Exemplo de for que mostra 6 números em ordem crescente

Jogo Sudoku em Pascal

Tratamentos de Erros


  

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