Ir ao conteúdo
  • Cadastre-se
UniversoTempo

Jogo da forca pascalzim/devpascal

Recommended Posts

Ola,sou novo no fórum e também na área de programação e estou com uma dúvida e precisando de ajuda em um código que acredito eu ser simples, estou tentando executar um jogo da forca utilizando arquivo binário e parece que a variável palavraCerta não está recebendo nenhuma das palavras cadastradas, alguém poderia dar uma olhada no código e me apontar o erro(s) do código? segue o código abaixo:

 

Program pzim ;
type biblioteca = record
         palavra : string;
         dica : string;
end;
type declareg = file of biblioteca;
{------------------------------------------------------------------------------------------------}
procedure criarArquivo (var arquivoPalavras : declareg);
begin
        {$I-}
            reset(arquivoPalavras);
        if IOResult <> 0 then
        rewrite(arquivoPalavras);
    {$I+}
end;
{-----------------------------------------------------------------------------------------------}
procedure inserirPalavras (var arquivoPalavras : declareg);
var PeD : biblioteca;
        cont : integer;
begin
        for cont:= 1 to 2 do
    begin
                clrscr;
                write('Digite uma palavra: ');
                read(PeD.palavra);
                seek (arquivoPalavras, filesize(arquivoPalavras));
                write(arquivoPalavras,PeD);
                write('Digite uma dica: ');
                read(PeD.dica);
                seek (arquivoPalavras, filesize(arquivoPalavras));
                write(arquivoPalavras,PeD);
        end;
end;
{-----------------------------------------------------------------------------------------------}
procedure adivinhar(var arquivoPalavras : declareg);
var vetorpalav: array [1..2] of string;
    palavraCerta, palavraParcial:string;
    tentativa :Char;
    qtdTentativas, X, opc :Integer;
    acertouPalavra: Boolean;
begin  
qtdTentativas := 8;
   repeat
      writeln;
      writeln ('   Jogo da Forca');
      writeln;
      write (' Digite de 1 a 2 para escolher uma palavra: ');
      readln (opc);
   until (opc >= 1) and (opc <= 2);
   
   palavraCerta := vetorpalav[opc];

   for X := 0 to Length(palavraCerta) do
   begin
      if (palavraCerta[X] = ' ') then
         palavraParcial[X] := ' '
      else if (palavraCerta[X] = '-') then
         palavraParcial[X] := '-'
      else
         palavraParcial[X] := '*';
   end;

   repeat
      ClrScr;

      writeln;
      writeln (' ',palavraParcial);
      writeln;

      acertouPalavra := true;

      for X := 1 to Length (palavraCerta) do
         if palavraParcial[X] = '*' then
            acertouPalavra := false;

      if acertouPalavra = true then
      begin
         writeln (' Parabens, voce acertou a palavra.');
         readln;
         break;
      end
      else if qtdTentativas > 0 then
      begin
         writeln (' voce tem ', qtdTentativas, ' tentativas restantes.');

         write (' Digite uma letra (letra minuscula): ');
         tentativa := readkey;
         if Pos(tentativa, palavraParcial) = 0 then
            for X := 1 to Length(palavraCerta) do
            begin
               if (palavraCerta[X] = tentativa) then
               begin
                  palavraParcial[X] := tentativa;
               end
               else if Pos(tentativa, palavraCerta) = 0 then
               begin
                  qtdTentativas := qtdTentativas - 1;
                  break;
               end;
            end
         else
            qtdTentativas := qtdTentativas - 1;
      end
      else
      begin
         writeln (' voce perdeu, tente novamente.');
         readln;
         break;
      end;
      until tentativa = Chr(27);
end;
{----------------------------------------------------------------------}
procedure Menu;
var opcao : integer;
        arquivoPalavras : declareg;
begin
        assign(arquivoPalavras,'C:\Forca.bin');
        criarArquivo(arquivoPalavras);
        repeat
            clrscr;
        writeln(' Forca ');
        writeln('1 - Inserir Palavras');
        writeln('2 - Jogar');
        writeln('3 - Sair');
        writeln('Opcao: ');
        readln(opcao);
        case opcao of
                1: inserirPalavras(arquivoPalavras);
                2: adivinhar(arquivoPalavras);
        end;
     until opcao = 3;
     close(arquivoPalavras);
end;                        
            
            
Begin
        Menu;
End.

Obrigado!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

1) para leitura de string não utilize read, use apenas readln().
Ex.:

read(PeD.palavra);

Para

readln(PeD.palavra);

Mais sobre aqui:

 

2) você está lendo a "Palavra", escrevendo no arquivo, e depois lendo a "Dica" e escrevendo em outra posição... O mais correto seria ler a "Palavra" e "Dica", e escrever no arquivo... (cada PeD tem sua palavra e dica, por isso estão em record).

 

3) um conceito fundamental da "Estrutura de Dados" é que "se algo está sendo armazenado, de alguma forma ela pode ser recuperada" (estou descrevendo com minhas palavras). No caso, você está armazenando as palavras e não está utilizando depois! (logo não faz sentido armazenar)... No caso, ou você carrega os registros do arquivo para o vetor, ou ler apenas o registro que precisa direto do arquivo (seek). Acredito que ler diretamente seja melhor para esse caso.

 

4) Lembre-se sempre de apagar o arquivo antes de abrir o programa novamente (lá do c:\)... outra forma seria insirir um comando para ZERAR o arquivo no programa, pois cada vez que você utiliza o menu 1, ele continuará utilizando o mesmo arquivo, mesmo se fechar e abrir o programa.


***

Por ai vai..

 

No aguardo.

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

×