Jump to content

JOGO PEDRA PAPEL TESOURA [DUVIDA]


Pagota
 Share

Recommended Posts

Este cofigo que criei está-me a dar um erro estranho:

PROGRAM ppt;
var jogadaA,jogadaB:string;
    num_jogos:integer;
    n:integer;
    
PROCEDURE inicio;
Begin
  writeln ('Bem vindos ao jogo Pedra, Papel e Tesoura!');
  writeln ('Para começar indique o numero de jogos que pretende jogar contra o seu adversário');
  read (num_jogos);
  writeln ('Vamos lá jogar!');
End;

PROCEDURE jogo;
Begin
for n:=1 to num_jogos do
  writeln ('Jogador A: PEDRA - PAPEL - TESOURA?');
  read (jogadaA);
  writeln ('Jogador B: PEDRA - PAPEL - TESOURA?');
  read (jogadaB);
  if jogadaA='PEDRA' and jogadaB='PAPEL'
  then jogadorB:=jogadorB+1
   else
  	if jogadaA='PEDRA' and jogadaB='TESOURA'
  	then jogadorA:=jogadorA+1
  	   else
  		if jogadaA='PEDRA' and jogadaB='PEDRA'
  		then if jogadaA='PAPEL' and jogadaB='PEDRA'
  			then jogadorA:=jogadorA+1
  			   else
  				if jogadaA='PAPEL' and jogadaB='TESOURA'
  				then jogadorB:=jogadorB+1
  				   else
  					if jogadaA='PAPEL' and jogadaB='PAPEL'
  					then if jogadaA='TESOURA' and jogadaB='PEDRA'
  						then jogadorB:=jogadorB+1
  						   else
  							if jogadaA='TESOURA' and jogadaB='PAPEL'
  							then jogadorA:=jogadorA+1
  							   else
  							  	if jogadaA='TESOURA' and jogadaB='TESOURA'
  								then writeln ('Fim do jogo!!! Pontuações:')
  								else
  								writeln ('ERRO!!! Fim do programa!');
End;
BEGIN 
jogadorA:=0;
jogadorB:=0;
textcolor (red);
writeln ('O JOGO FUNCIONA APENAS EM MAIUSCULAS!');
writeln ('CASO NAO JOGUE EM MAIUSCULAS O JOGO TERMINA!');
textcolor (white);
inicio;
jogo;
writeln ('Jogador A: ',jogadorA,' Jogador B: ',jogadorB);
END.

No 1º IF, o compilador, diz que os tipos de operandois na expressão devem ser compativeis, e eles são....

alguem me ajuda?

Link to comment
Share on other sites

Quando as jogadas são iguais podes ver se jogadaA = jogadaB, não precisas fazer 3 comparações.

Não conheço pascal, mas se der para usar switch/case e o operador ternário, fica mto mais simples.

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Link to comment
Share on other sites

Como assim?

Na linha de comandos escreves: Pedra

e dentro do teu código traduzes isso para o valor respectivo -> 1.

(Penso q o pascal n tenha enumerados, numa linguagem com enumerados, podias traduzir logo p o enumerado respectivo).

Depois se o valor dos 2 jogadores é o mm, retorna logo empate, caso contrário, switch/case.

Parece-me bem, e com operador ternario (n sei se existe em pascal), ficava mto simples.

Que competencias faltam para agradar á tua professora?

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Link to comment
Share on other sites

E os if's encadeados não é só mau feitio meu, é globalmente considerado uma anti-pattern.

Podem ver aqui um exemplo de um código com e sem ifs encadeados:

http://www.lostechies.com/blogs/chrismissal/archive/2009/05/27/anti-patterns-and-worst-practices-the-arrowhead-anti-pattern.aspx

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Link to comment
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
 Share

×
×
  • 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.