Ir ao conteúdo
  • Cadastre-se
iSoft.

Jogo de adivinha em Pascal

Recommended Posts

Alguém me ajuda nessa parte que esta logo abaixo, não estou conseguindo fazer, tentei mais da erro.

 

Sempre que o jogador repetir um chute que ele já tenha dado anteriormente, o programa deverá recusá-lo e emitir uma mensagem informando ao jogador sobre essa situação e pedindo para ele tentar outro chute. Obviamente, esse chute duplicata não deverá ser contabilizado com uma das 10 tentativas que o jogador tem direito. (SUGESTÃO: Utilizar um array de 10 elementos para armazenar os chutes do jogador.)


program guessgame;



function Status(n: integer; chute: integer) : string;
begin
  if chute < (n-18) then
     status := 'CG'
  else
  if chute < (n-15) then
     status := 'MF'
  else
   if chute < (n-12) then
      status := 'FR'
   else
    if chute < (n-9) then
     status := 'MO'
  else
    if chute < (n-6) then
       status := 'QT'
    else
     if chute < (n-3) then
        status := 'MQ'
     else
      if chute <= (n+3) then
         status := 'FV'
    else
     if chute <= (n+6) then
        status := 'MQ'
     else
     if chute <= (n+9) then
        status := 'QT'
        else
     if chute <= (n+12) then
         status := 'MO'
    else
    if chute <= (n+15) then
         status := 'FR'
    else
    if chute <= (n+18) then
         status := 'MF'
    else
        status := 'CG';
end;


procedure emiteMensagem(var e1, e2: string);
begin
  case e1 of
   'FV': case e2 of
          'FV': writeln('Ainda continua fervendo');
          'MQ': writeln('Oops, deu uma pequena esfriada, agora está muito quente.');
          'QT': writeln('Oops, deu uma esfriada, agora esta quente.');
          'MO': writeln('Oops, agora você esta morno.');
          'FR': writeln('Oops, esfriou mais ainda ,agora ficou frio.');
          'MF': writeln('Oops, esfriou muito, agora ficou muito frio.');
          'CG': writeln('Oops, Agora esfriou de vez, esta congelando.');
          else writeln('esta Fervendo.');
         end;


  'MQ': case e2 of
          'FV': writeln('Oops, esta pegando fogo, agora estar fervendo.');
          'MQ': writeln('Ainda continua muito quente.');
          'QT': writeln('Oops, deu uma esfriada, mas ainda esta quente.');
          'MO': writeln('Oops, Agora esfrio, mas ainda esta morno.');
          'FR': writeln('Oops, agora ficou frio.');
          'MF': writeln('Oops, agora ficou muito frio.');
          'CG': writeln('Oops, Agora esfriou de vez, esta congelando.');
          else writeln('esta muito quente.');
         end;
   'QT': case e2 of
          'FV': writeln('Oops, esta pegando fogo, agora estar fervendo.');
          'MQ': writeln('Oops, deu uma esquentada e agora ficou muito quente.');
          'QT': writeln('Ainda continua quente.');
          'MO': writeln('Oops, Agora esfrio mais ainda, esta morno.');
          'FR': writeln('Oops, deu uma esfriada e agora ficou frio.');
          'MF': writeln('Oops, deu uma baita esfriada e agora ficou muito frio.');
          'CG': writeln('Oops, Agora esfriou de vez, esta congelando.');
          else writeln('esta quente.');
         end;
   'MO': case e2 of
          'FV': writeln('Oops, esta pegando fogo, agora esta fervendo.');
          'MQ': writeln('Oops, deu uma baita esquentada e agora ficou muito quente.');
          'QT': writeln('Oops, deu uma esquentada e agora ficou quente.');
          'MO': writeln('Ainda continua morno');
          'FR': writeln('Oops, esfriou um pouco, agora esta frio.');
          'MF': writeln('Oops, deu uma esfriada e agora ficou muito frio.');
          'CG': writeln('Oops, agora esfriou muito e esta congelando.');
          else writeln('esta morno.');
           end;


   'FR': case e2 of
          'FV': writeln('Oops, esta pegando fogo, agora esta fervendo.');
          'MQ': writeln('Oops, deu uma baita esquentada e agora ficou muito quente.');
          'QT': writeln('Oops, deu uma esquentada e agora ficou quente.');
          'MO': writeln('Oops, deu uma pequena esquentada, agora ficou morno.');
          'FR': writeln('Ainda continua frio.');
          'MF': writeln('Oops, deu uma esfriada e agora ficou muito frio.');
          'CG': writeln('Oops, deu uma baita esfriada, agora esta congelando.');
          else writeln('esta frio.');
           end;
   'MF': case e2 of
          'FV': writeln('Oops, esta pegando fogo, agora esta fervendo.');
          'MQ': writeln('Oops, deu uma baita esquentada e agora ficou muito quente.');
          'QT': writeln('Oops, de uma esquentada e agora ficou quente.');
          'MO': writeln('Oops, esquentou mais um pouco, mas agora esta mortno.');
          'FR': writeln('Oops, esquentou um pouco, mas ainda esta frio.');
          'MF': writeln('Ainda continua muito frio.');
          'CG': writeln('Oops, deu uma baita esfriada, agora esta congelando.');
           else writeln('esta muito frio.');
           end;
   'CG': case e2 of
          'FV': writeln('Oops, esta pegando fogo, agora esta fervendo.');
          'MQ': writeln('Oops, deu uma baita esquentada e agora ficou muito quente.');
          'QT': writeln('Oops, deu uma esquentada e agora ficou quente.');
          'MO': writeln('Oops, ficou um pouco quente, agora esta morno.');
          'FR': writeln('Oops, esquentou um pouco , mas ainda esta frio.');
          'MF': writeln('Oops, esquentou bem pouco, mas ainda esta muito frio.');
          'CG': writeln('Ainda continua congelando')
          else writeln('esta Congelando.');
           end;
         end;
  end;
var
k: array [1..10] of integer;
acertos, n, j, chute, erro, p: integer;
e1, e2, resp: string;


begin


// gerar número aleatório entre 1 e 100
randomize;
n := random(100);
// zerar contador de acertos
acertos := 0;
// apresentar jogo ao usuãrio
writeln('voce tem 10 chances de acertar o numero que eu estou pensando.');
writeln('Trata-se de um valor entre 1 e 100. então vamos la.');
writeln;
// executar laço de 10 tentativas:
for j := 1 to 10 do
begin
  // < ler (chute) >
  write ('Tentativa ', j, ': ');
  repeat
    readln(resp);
    val(resp, chute[k], erro);
    if erro <> 0 or <> k then
    begin
       writeln('Valor invalido, ou você já chutou esse numero!');
       write ('Tente de novo: ');
    end;
  until (erro = 0) or (chute[k] = k) ;
  // < se acertou: >
  if chute[k] = n then
  begin
  // < parabenizar o usuário >
  writeln;
  writeln('Parabens !');
  // < incrementar contador de acertos >
  inc(acertos);
  // < quebrar laço >
  break;
  end
  // < senão: >
  else
  begin
    // < determinar status >
    if j = 1 then              // determinar estado1
    begin
       e1 := status(n, chute);
       e2 := '';
    end
    else                       // determinar estado2
      e2 := status(n, chute);
    // < gerar mensagem correspondente >
   emiteMensagem(e1, e2);
    // < alterar status >
    if e2 <> '' then
        e1 := e2;
    writeln;
  end;
end;
// < comunicar resultado ao usuário >
writeln;
if acertos = 0 then
   writeln('Infelizmente, apos 10 tentativas, voce nao conseguiu acertar o numero ', n, '.')
else
   writeln('voce acertou o numero ', n, ' apos ', j, ' tentativas.');
readln;
end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×