Jump to content

Ping pong, está me a dar erro este programa


Recommended Posts

anonimo1337
Program ping_pong ;

const cantoCima = 2 ;
cantoBaixo = 10 ;
cantoEsquerda = 2 ;
cantoDireita = 38 ;

var bolaX, bolaY: integer; // posicao x, y da bola
raquete1X, raquete1Y: integer; // posicao x, y da raquete 1
raquete2X, raquete2Y: integer; // posicao x, y da raquete 2
moveBolaDireita, moveBolaBaixo: boolean ; // controla direcao da bola
pontos: integer;
acabouJogo: boolean ;
menu1:real;
nome1, nome2:string;


Procedure menuin;                                                //Interface do Menu
Begin
  clrscr;
  Writeln;
  Writeln;
  writeln('     ----------- ');
  Writeln('       1-Jogar   ');
  writeln('     ----------- ');
  writeln;
  Writeln;
  writeln('    ---------------- ');
  Writeln('     2-como jogar    ');
  writeln('    ---------------- ');
  Writeln;
  Writeln;
  writeln;
  writeln('    ---------- ');
  Writeln('     3-Sair    ');
  writeln('    ---------- ');
  Writeln;
  menu1:=4
End;

//Ecrã Inicial
Begin
  textcolor (Red);
  Writeln ('            - - - --- -´~~~~           ');
  Writeln ('          ,´                `,         ');
  Writeln ('         (                     ,        ');
  Writeln ('        (                       )       ');
  Writeln ('       {            ---          )      ');
  Writeln ('      {            /  /           )                 _ _ _ _ _ _ _ _ _ _ _ _  ');
  Writeln ('      |            ---            |                |                       | ');
  Writeln ('      |                           |                |       Ping Pong       | ');
  Writeln ('      |                           |                |_ _ _ _ _ _ _ _ _ _ _ _| ');
  Writeln ('      \                           /     ');
  Writeln ('       \                         /      ');
  Writeln ('        - - -´~~~~     - - -´~~~~       ');
  Writeln ('                 |     |                ');
  Writeln ('                 |     |                ');
  Writeln ('                 |     |                ');
  Writeln ('                 |     |                ');
  Writeln ('                 |     |                ');
  Writeln ('                 |     |                ');
  Writeln ('                 |     |                ');
  Writeln ('                 |     |                ');
  Writeln ('                 |_____|                ');
  Textcolor (Black);
  Textbackground (White);
  Writeln('   ----------------------------------------------   ');
  Writeln('   |  Insira o nome dos 2 jogadores para jogar  |   ');
  Writeln('   ----------------------------------------------   ');
  Textcolor (red );
  Textbackground (Black);
  Readln(nome1);
  Readln(nome2);
  menuin;
  Repeat
    Readln(menu1);
    If menu1=1 then
    
      // Começa o jogo
      begin
            //----------------------------------------------------------------
 // Desenha o campo do pong
 //----------------------------------------------------------------
 procedure DesenhaCampo;
 begin   
      textcolor(white);
     gotoxy(1,1);    
    writeln(#201,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#203,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#187);
     writeln(#186,'                  ',#176,'                  ',#186);
     writeln(#186,'                  ',#176,'                  ',#186);
     writeln(#186,'                  ',#176,'                  ',#186);
     writeln(#186,'                  ',#176,'                  ',#186);
     writeln(#186,'                  ',#176,'                  ',#186);
     writeln(#186,'                  ',#176,'                  ',#186);
     writeln(#186,'                  ',#176,'                  ',#186);
     writeln(#186,'                  ',#176,'                  ',#186);
     writeln(#186,'                  ',#176,'                  ',#186);
     writeln(#200,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#202,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#205,#188);
    writeln('');
    writeln('------------------------');    
     writeln('Pascalzim PONG');
    writeln('------------------------');         
     writeln('- Mateus Riva');
     writeln('- Caio Augusto Faria');
     writeln('- Denis Miura');
     writeln('- Tobias Furtado');
     writeln('');
    writeln('Controles Jogador 1 => seta para cima, seta para baixo.');    
     writeln('Controles Jogador 2 => 8 para cima, 2 para baixo');   
     writeln('');   
     if(pontos <> 0) then writeln('Pontos: ', pontos);                
 end;
   
   
     
 //----------------------------------------------------------------
 // Move a bola pelo campo
 //----------------------------------------------------------------    
 procedure moveBola ;
 Begin
    // Move a bola na horizontal
    if (moveBolaDireita) then
      bolaX:= bolaX + 1
    else
      bolaX:= bolaX - 1;
                                
    // Move a bola na vertical
    if (moveBolaBaixo) then
      bolaY:= bolaY + 1
    else
      bolaY:= bolaY - 1;   
        
    // Se a bola bateu em cima ou embaixo do campo inverte sua direcao
    if (bolaY = cantoBaixo) or (bolaY = cantoCima) then
       moveBolaBaixo := not moveBolaBaixo ;
   
    // Desenha a bola na sua nova posicao
    gotoxy(bolaX,bolaY);
    write(#219); 
 End ;
 
 
 
 //----------------------------------------------------------------
 // Move as raquetes
 //----------------------------------------------------------------      
 procedure moveRaquetes ;
 var moveuRaquete : boolean ;
 Begin
     // Verifica se alguma raquete se moveu
        while keypressed do
    begin
       case readkey of
        // Seta para cima: move a raquete 1 para cima                                 
         #72: if (raquete1Y > cantoCima+1) then
              raquete1Y:= raquete1Y - 1;               
             
        // Seta para baixo: move a raquete 1 para baixo
        #80:    if (raquete1Y < cantoBaixo) then
              raquete1Y:= raquete1Y + 1;
             
        // Numero 8: move a raquete 2 para cima
        '8': if (raquete2Y > cantoCima+1) then
           raquete2Y:= raquete2Y - 1;
           
        // Numero 2: move a raquete 2 para baixo           
        '2':    if (raquete2Y < cantoBaixo) then
           raquete2Y:= raquete2Y + 1;      
       end;
    end ;
   
      // Desenha a raquete 1
     textcolor (lightred);
     gotoxy(raquete1X,raquete1Y);
     write(#219);
     gotoxy(raquete1X,raquete1Y -1);
     write(#219);    
   
      // Desenha a raquete 2
     textcolor(lightblue);
     gotoxy(raquete2X,raquete2Y);
     write(#219);
     gotoxy(raquete2X,raquete2Y -1);
     write(#219) ;          
 End; 
   
 
 //----------------------------------------------------------------
 // Verifica se a bola bateu em alguma raquete
 //----------------------------------------------------------------  
 procedure VerificaChoqueRaquete ;
 Begin
   // Se a bola bateu na raquete 1 joga ela para direita
   if (bolaX = raquete1X+1) then
    if (bolaY = raquete1Y) or (bolaY = raquete1Y-1) then  
    begin
      moveBolaDireita := true ;
      pontos:= pontos + 1;
    end;

   // Se a bola bateu na raquete 2 joga ela para esquerda
   if (bolaX = raquete2X-1) then
    if (bolaY = raquete2Y) or (bolaY = raquete2Y-1) then  
    begin
      moveBolaDireita := false ;
      pontos := pontos + 1;
    end;      
 End;


 //----------------------------------------------------------------
 // Inicia o jogo
 //----------------------------------------------------------------  
 procedure iniciaJogo ;
 Begin
   randomize;
  
   // Determina posicao inicial da bola  
   bolaX:= 20;
   bolaY:= random(cantoBaixo-2) + 2;  
            
   // Determina para que lado a começa a se mover
   moveBolaBaixo := true ;
   if(random(2) = 1) then
     moveBolaDireita := true
   else
     moveBolaDireita := false ; 
  
   // Determina posicao inicial da raquete 1
   raquete1X:= cantoEsquerda;
   raquete1Y:= (cantoCima+cantoBaixo) div 2 ;
  
   // Determina posicao inicial da raquete 2  
   raquete2X:= cantoDireita;
   raquete2Y:= (cantoCima+cantoBaixo) div 2 ;
   pontos := 0;

   // inicializacao do jogo
   acabouJogo := false ;
   clrscr;
 End;


 
 //----------------------------------------------------------------
 // Fim do jogo: a bola passou por uma das raquetes
 //----------------------------------------------------------------  
 procedure VerificaFimJogo ;
 var resp : char ;
 Begin
   // Se a bola nao bateu no canto do tabuleiro sai do procedure
   if(bolaX <> cantoEsquerda-1) and (bolaX <> cantoDireita+1) then
      exit ;
   
   // Mostra qual jogador venceu o jogo
   textcolor(white);
   gotoxy(41,3);
   if (bolaX < cantoEsquerda) then
     writeln('Vencedor: Jogador 2')
   else
      writeln('Vencedor: Jogador 1');                  

   // Pergunta se quer continuar jogando
   gotoxy(41,5);
   write('Digite <ENTER> para parar...');  
   gotoxy(41,7);
   write('Pressione outra tecla para jogar...');  
   resp := upcase(readkey);
        
   // Se a resposta é não, termina o programa       
   if (resp= #13) then
   Begin
     acabouJogo := true ;
     exit ;
   End ;
  
   // Se a resposta é sim, reinicia o jogo  
   iniciaJogo ;   
 End ; 
                 
 
 //----------------------------------------------------------------
 // Inicio do programa
 //----------------------------------------------------------------
 Begin 
     // Desenha o campo de jogo, de fundo verde
     textbackground(green);     
     clrscr;
     DesenhaCampo;
     writeln('=> Pressione uma tecla para iniciar o jogo');    
      readkey ;

    // Roda o jogo
     iniciaJogo ;
     while not acabouJogo do
     begin
          delay(150);    
         DesenhaCampo;
          moveBola ;
          moveRaquetes ;
        VerificaChoqueRaquete ;   
          VerificaFimJogo ;     
     end;
 End. 
        
        
        
        
      End
      
      
      //Tela ao sair do Jogo
      
            Else if menu1=3 then
    
      Begin
        clrscr;
        Writeln;
        Textcolor (red);
        Writeln('   ----------------------------------------------   ');
        Writeln('                Obrigado por jogar!                 ');
        Writeln('   ----------------------------------------------   ');
        Writeln;
        Writeln;
        Writeln;
        Writeln;
        Textcolor (red);
        Writeln ('             - - - --- -´~~~~           ');
        Writeln ('          , ´                `,         ');
        Writeln ('         (                     ,        ');
        Writeln ('        (                       )       ');
        Writeln ('       {            ---          )      ');
        Writeln ('      {            /  /           )     ');
        Writeln ('      |            ---            |     ');
        Writeln ('      |                           |     ');
        Writeln ('      \                           /     ');
        Writeln ('       \                         /      ');
        Writeln ('        - - -´~~~~     - - -´~~~~       ');
        Writeln ('                 |     |                ');
        Writeln ('                 |     |                ');
        Writeln ('                 |     |                ');
        Writeln ('                 |     |                ');
        Writeln ('                 |     |                ');
        Writeln ('                 |     |                ');
        Writeln ('                 |     |                ');
        Writeln ('                 |     |                ');
        Writeln ('                 |_____|                ');
        Writeln;
        Writeln;
        Writeln;
        Writeln;
        Writeln;
        
      End
      
      //Instruções
      Else if menu1=2 then
      Begin
        clrscr;
        Textcolor (11);
        Writeln;
        Writeln(' Se é o jogador 1, mova a raquete com as setas do lado esquerdo e direito (<--- --->)  ');
        
        Writeln(' Se é o jogador 2, mova a raquete com o "A" e o "D" ');
        
        Writeln(' O jogo vai até aos 10 pontos ');
        Writeln;
        Writeln(' Quem fizer mais pontos ganha!  ');
        Writeln;
        Writeln;
        writeln;
        writeln('  -----------------------------   ');
        writeln(' | Boa Sorte e boas raquetadas!| ');
        writeln('  -----------------------------   ');
        
        Textcolor (red);
        Writeln('Pressione esc para voltar ao Menu');
        Readkey;
        menuin;
      End
      Else
      Writeln('Opção inválida');
    Until ((menu1=1) or (menu1=2) or (menu1=3));
    //Fim do Programa
  End.

Alguem que me ajude, pff!

Link to post
Share on other sites
nunopicado

A minha bola de cristal está na oficina.
Talvez se explicares qual é a tua dúvida...

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to post
Share on other sites
anonimo1337

Está me a dar erro no "procedure moveBola ;"

Em todos os procedure, eu fiz primeiro o menu e nao me dá erro nenhum, agora com o jogo está me a dar erro nos procedure

Link to post
Share on other sites
nunopicado
2 horas atrás, anonimo1337 disse:

Está me a dar erro no "procedure moveBola ;"

Qual o erro que dá?

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to post
Share on other sites
nunopicado
2 minutos atrás, anonimo1337 disse:

procedure nao esperado

Tens aí dois problemas:

1. Tens procedimentos dentro do corpo do programa. 
Isso não pode acontecer. 
Todos os procedimentos têm de estar fora do corpo, como tens o MenuIn (este é o único que está bem).
Copia-os de onde estão para cima, entre as variáveis e o MenuIn, por exemplo, ou logo a seguir ao MenuIn.

 

2. Tens o inicio e o fim do programa duas vezes.
Uma começa na linha 42 e vai até ao fim do programa, mas lá dentro, na linha 285, tens o inicio do programa outra vez, terminando na linha 304.
O END. (END seguido de ponto) só pode existir uma vez, e é a última linha do programa.
 

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.