Ir ao conteúdo
  • Cadastre-se

Jogo da forca pascalzim/devpascal


Posts recomendados

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!

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...