anonimo1337 Posted February 17, 2021 at 12:02 PM Report Share #621368 Posted February 17, 2021 at 12:02 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; moveuRaquete : boolean ; resp : char ; procedure DesenhaCampo; procedure moveBola ; procedure moveRaquetes ; procedure VerificaChoqueRaquete ; procedure iniciaJogo ; procedure VerificaFimJogo; 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 //---------------------------------------------------------------- // Desenha o campo do pong //---------------------------------------------------------------- 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; if(pontos <> 0) then writeln('Pontos: ', pontos); end; //---------------------------------------------------------------- // Move a bola pelo campo //---------------------------------------------------------------- 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 //---------------------------------------------------------------- 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 //---------------------------------------------------------------- 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 //---------------------------------------------------------------- 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 //---------------------------------------------------------------- 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; //Tela ao sair do Jogo 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; end. Está me a dar erro no ultimo end. Link to comment Share on other sites More sharing options...
passarito Posted February 17, 2021 at 12:19 PM Report Share #621369 Posted February 17, 2021 at 12:19 PM (edited) No último Else coloca um end; depois da acção (writeln...) editado: se calhar é melhor 2 end; Por outro lado nunca usei begin...end no meio de um programa sem um if, for ou while antes. Apenas no corpo principal do programa ou da unit. Mas isso devo ser eu que estou muito desatualizado 🙂 Edited February 17, 2021 at 12:20 PM by passarito Link to comment Share on other sites More sharing options...
nunopicado Posted February 17, 2021 at 12:42 PM Report Share #621370 Posted February 17, 2021 at 12:42 PM O penúltimo end está a mais. "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 February 18, 2021 at 08:28 AM Author Report Share #621376 Posted February 18, 2021 at 08:28 AM Se puser o if em que sentido vou usar o if? @passarito Continua a dar erro @nunopicado Link to comment Share on other sites More sharing options...
nunopicado Posted February 18, 2021 at 08:54 AM Report Share #621378 Posted February 18, 2021 at 08:54 AM 21 minutos atrás, anonimo1337 disse: Se puser o if em que sentido vou usar o if? @passarito Continua a dar erro @nunopicado Tens de terminar os procedimentos que tens em cima declarados: procedure DesenhaCampo; procedure moveBola ; procedure moveRaquetes ; procedure VerificaChoqueRaquete ; procedure iniciaJogo ; procedure VerificaFimJogo; O que o passarito quer dizer não é para meteres ifs, é que não precisas usar begin/end no meio do código como tens. Mas ainda que seja estranho e desnecessário, não é esse o problema. Mete o código dos procedimentos, remove o End a mais, e o código pelo menos já compila. "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 February 18, 2021 at 02:14 PM Author Report Share #621383 Posted February 18, 2021 at 02:14 PM E como é que termino os procedures? Link to comment Share on other sites More sharing options...
nunopicado Posted February 18, 2021 at 02:50 PM Report Share #621384 Posted February 18, 2021 at 02:50 PM 2 minutos atrás, anonimo1337 disse: E como é que termino os procedures? Tenho de perguntar: O código é teu, ou copiaste de algum lado? Tens um procedimento completo, o MenuIn, pelo que se o código for teu, a pergunta "como termino os procedures" não faz grande sentido. Agora, olhando para o código, os tais begin...end que o @passarito mencionou estão precedidos por comentários que fazem pensar que esses begin...end (e o código dentro de cada um desses conjuntos é na verdade a continuação dos procedimentos que estão em cima, e que estão com falta exactamente de um begin...end e o respectivo código dentro de cada um desses conjuntos; o que faz pensar que esse código está fora do sítio A minha sugestão é que indentes corretamente o código, olhes para ele e verifiques o final dos procedimentos. Procura entender o código que tens, e volta com perguntas concretas, caso as tenhas. No momento, dá ideia que pegaste num código sem olhar para ele, tentaste compilar e não funcionou. "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