Jump to content
TunesPequeno

[Ajuda] Mastermind : Pascal

Recommended Posts

TunesPequeno

Boa tarde, um colega meu está a fazer um projecto para Programação, que é fazer o jogo Mastermind, mas surgiu um pequeno problema .

O código é este :

Program MasterMind;      
Uses crt;
var numeros_gerados,numeros_utilizador: array[1..4] of integer;  	  
    nome, resposta: string;      
    tentativas, certos, errados: integer;       
    
     
Procedure Gerar_numeros;  // Procedimento que vai gerar os 4 numeros entre 1 e 9, aleatoriamente
  var a : integer;
  	begin;
  		
	For a := 1 to 4 do         // FOR que vai gerar os 4 numeros aleatorios
		begin
			numeros_gerados[a]:=random(8)+1;   
		end;	
      end;                          


Procedure Introduzir_numeros;  // Procedimento que vai pedir para o jogador introduzir as suas jogadas
var i : integer;
  begin;                                                         
   writeln;
   
    
   For i := 1 to 4 do
   	  begin
   write(Nome,' introduza a sua ',i,' jogada: ');
   read(numeros_utilizador[i]);
       
    
     
      IF (numeros_utilizador[i] > 9) then
    		begin
    			textcolor (red);
    			writeln(' ** Número Inválido ** ');
    			textcolor (lightgreen);
    		end	
    	
    else
      IF (numeros_utilizador[i] < 1) then
      	begin
      		textcolor (red);
    			writeln(' ** Número Inválido ** ');
    			textcolor (lightgreen);
    		end;
       end;
  end;
  

  
  
Procedure Comparar_numeros; // Procedimento que vai comparar os numeros inseridos pelo jogador com os numeros gerados pelo PC
begin;    

certos := 0;
errados := 0;                                        
   If numeros_gerados[1]=numeros_utilizador[1] then
    begin
     textcolor(blue);
certos := certos + 1;
     textcolor(lightgreen); 
    end   
   else                                                                                           
    If (numeros_gerados[1]=numeros_utilizador[2]) then                                           
    begin
     textcolor(yellow);
     errados := errados + 1;
     textcolor(lightgreen);
    end
    
   else
   
     If (numeros_gerados[1]=numeros_utilizador[3]) then 
    begin
     textcolor(yellow);
     errados := errados + 1;
     textcolor(lightgreen);
    end
    
   else
   
     If (numeros_gerados[1]=numeros_utilizador[4]) then 
    begin
     textcolor(yellow);   
     errados := errados + 1;
     textcolor(lightgreen);
    end ;
      
    
      If numeros_gerados[2]=numeros_utilizador[2] then
    begin
     textcolor(blue);
     certos := certos + 1;
     textcolor(lightgreen);
    end
   else
    If (numeros_gerados[2]=numeros_utilizador[1]) then 
    begin
     textcolor(yellow);
     errados := errados + 1;
     textcolor(lightgreen);
    end
   else
     If (numeros_gerados[2]=numeros_utilizador[3]) then 
    begin
     textcolor(yellow);
     errados := errados + 1;
     textcolor(lightgreen);
    end
   else
     If (numeros_gerados[2]=numeros_utilizador[4]) then 
    begin
     textcolor(yellow); 
     errados := errados + 1;
     textcolor(lightgreen);
    end ;
    

    
   If numeros_gerados[3]=numeros_utilizador[3] then
    begin
     textcolor(blue); 
     certos := certos + 1;
     textcolor(lightgreen);
    end
   else
    If (numeros_gerados[3]=numeros_utilizador[2]) then 
    begin
     textcolor(yellow);    
     errados := errados + 1;
     textcolor(lightgreen);
    end
   else
     If (numeros_gerados[3]=numeros_utilizador[1]) then 
    begin
     textcolor(yellow);    
     errados := errados + 1;
     textcolor(lightgreen);
    end
   else
     If (numeros_gerados[3]=numeros_utilizador[4]) then 
    begin
     textcolor(yellow);    
     errados := errados + 1;
     textcolor(lightgreen);
    end ;
     
    
   If numeros_gerados[4]=numeros_utilizador[4] then
    begin
     textcolor(blue); 
     certos := certos + 1;
     textcolor(lightgreen);
    end
   else
    If (numeros_gerados[4]=numeros_utilizador[2]) then 
    begin
     textcolor(yellow);
     errados := errados + 1;
     textcolor(lightgreen);
    end
   else
     If (numeros_gerados[4]=numeros_utilizador[3]) then 
    begin
     textcolor(yellow);
     errados := errados + 1;
     textcolor(lightgreen);
    end
   else
     If (numeros_gerados[4]=numeros_utilizador[1]) then 
    begin
     textcolor(yellow);
     errados := errados + 1;
     textcolor(lightgreen);
    end ;
    
    
    tentativas :=tentativas+1;
    writeln(' ');
    
    IF (certos = 1 ) then
    	 begin
    		textcolor(red);
    		writeln(certos , ' Pino preto');
    		writeln(errados , ' Pinos brancos');
   	     textcolor(lightgreen);
      end
  
     else
      IF (errados = 1 ) then 
   begin
    		textcolor(red);
    		writeln(certos , ' Pinos pretos');
    		writeln(errados , ' Pino branco');
   	     textcolor(lightgreen);
       end		
       else
    
end;




Procedure ganhou;  // Procedimento para se o jogador acertar
  begin
    
    if (numeros_gerados[1]=numeros_utilizador[1]) and (numeros_gerados[2]=numeros_utilizador[2]) and (numeros_gerados[3]=numeros_utilizador[3]) and (numeros_gerados[4]=numeros_utilizador[4])  then
     begin
      textcolor(blue);
      writeln(' ');
      writeln('                        !!!Parabens, ', nome ,' acertou na combinação!                         ');
      textcolor(lightgreen);
      Writeln ('Acertou em ', tentativas,' tentativas'); 
 writeln(' ');
end
   else
   	begin
   	  
end;        
     
  end;


     
Begin         // Programa
  
    
    
     writeln(' ');
     writeln('                                   MasterMind                        ');
     writeln(' ');
     writeln(' ');
     writeln(' '); 
     writeln('1-> O objectivo deste jogo é descobrir os 4 números gerados aleatoriamente pelo computador');
     writeln(' ');
writeln('2-> Os numeros gerados são entre 1 e 9');
     writeln(' ');
     writeln('3-> Tem apenas 10 tentativas para tentar descobrir. BOA SORTE');
     writeln(' ');
     
   Repeat 
       
     tentativas:= 0;
     Writeln('                                  INICIO DO JOGO                                   ');
     write('Introduza o seu nome: ');    // Pede o nome do jogador
     readln(nome);
     
    
     writeln(' ');
    
     writeln(' '); 
     
     Gerar_numeros; // Procedimento para gerar os numeros
     
writeln ('Os números gerados são: ', numeros_gerados[1], numeros_gerados [2],  numeros_gerados [3],numeros_gerados [4]);   // apagar
  
    Repeat
     
    
      Introduzir_numeros; // Procedimento para o utilizador introduzir os numeros
      comparar_numeros; // Procedimento para comparar os numeros  
      IF  (tentativas=2) then
      	begin
      		writeln;
    	 		writeln ('Esgotou as suas tentativas');
    	 		writeln ('Os números gerados eram os: ', numeros_gerados[1], numeros_gerados [2],  numeros_gerados [3],numeros_gerados [4]);
		writeln;
	end	 		
    	 Else
    	 
      ganhou;    //Procedimento se ganhar
      
      
    
    until (numeros_gerados[1]=numeros_utilizador[1]) and (numeros_gerados[2]=numeros_utilizador[2]) and (numeros_gerados[3]=numeros_utilizador[3]) and (numeros_gerados[4]=numeros_utilizador[4]) or (tentativas=2);   // até que os numeros sejam iguais ou as tentativas seja 10 vai repetir os procedimentos.
    
    
 writeln('Quer voltar a jogar?(s/n)');
 readln(Resposta);

  until(resposta='n'); 
  readkey;	 
END.

O que eu preciso de saber é como fazer com que no final do jogo, quer o utilizador ganhe quer perca apareça uma mensagem com o valor das tentativas mais baixo (recorde) e o nome do jogador. Ex : João - 2 tentativas !

Obrigado pela ajuda :thumbsup:

Share this post


Link to post
Share on other sites
apocsantos

    Boa tarde,

    Para fazer o que pretendes terias de armazenar em ficheiro o nome do jogador e o numero de tentativas. Criar um procedimento que carrega-se os valores das variáveis (Nome e Tentativas). Quando o jogador terminasse a "jogada" ele compararia o valor das tentativas dadas pelo jogador com valor da variável "tentativas" carregada no inicio. Caso fosse superior não alterava o ficheiro exibia o nome nome do "recordista e o numero de tentativas" lido do ficheiro, e exibia o nome do jogador actual e numero de tentativas), caso contrario gravava o nome do novo recordista no ficheiro.

      Dá ma vista de olhos na Wiki http://wiki.portugal-a-programar.org/pascal:tutorial_2010:parte_4.

      Tens lá o que precisas para resolver o problema pela abordagem que te sugeri.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Share this post


Link to post
Share on other sites
thoga31

      Dá ma vista de olhos na Wiki http://wiki.portugal-a-programar.org/pascal:tutorial_2010:parte_4.

      Tens lá o que precisas para resolver o problema pela abordagem que te sugeri.

Sugiro o mesmo que o camarada apocsantos. :confused:

Para complementar essa abordagem teórica, está na Parte VI a abordagem prática dos ficheiros de texto simples: http://wiki.portugal-a-programar.org/pascal:tutorial_2010:parte_6 :thumbsup:

Cumpz.


Knowledge is free!

Share this post


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.