anonimo1337 Posted January 17, 2021 at 09:09 PM Report Share #620997 Posted January 17, 2021 at 09:09 PM 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 comment Share on other sites More sharing options...
nunopicado Posted January 17, 2021 at 09:31 PM Report Share #620998 Posted January 17, 2021 at 09:31 PM 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 comment Share on other sites More sharing options...
thoga31 Posted January 18, 2021 at 02:25 AM Report Share #621001 Posted January 18, 2021 at 02:25 AM Quais os problemas que estás a ter? Knowledge is free! Link to comment Share on other sites More sharing options...
anonimo1337 Posted January 18, 2021 at 12:27 PM Author Report Share #621004 Posted January 18, 2021 at 12:27 PM 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 comment Share on other sites More sharing options...
nunopicado Posted January 18, 2021 at 02:59 PM Report Share #621005 Posted January 18, 2021 at 02:59 PM 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 comment Share on other sites More sharing options...
anonimo1337 Posted January 18, 2021 at 03:12 PM Author Report Share #621006 Posted January 18, 2021 at 03:12 PM procedure nao esperado Link to comment Share on other sites More sharing options...
nunopicado Posted January 18, 2021 at 03:20 PM Report Share #621007 Posted January 18, 2021 at 03:20 PM 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 comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now