Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Universo

Jogo da Forca Pascalzim/DevPascal erro!

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

  • Conteúdo Similar

    • Por Marcosdev
      Estou começando na programação e tenho algumas dúvidas sobre esse código do jogo da forca:
       
      #include <iostream>
      #include <stdlib.h>
      using namespace std;
       
      int main() {
          char entrada[21]; //Palavra secreta
          char letra[1]; //Letra que a pessoa digitou
          char letras[30]; //Letras
          char secreta[21]; //A letra certa e sua posição
          int tam; //O tamanho da palavra vai ser igual a ENTRADA
          int i; //(indice) Necessario pq vai usar array
          int chances; // Quando acabar elas acaba o jogo
          int acertos; // O numero de acertos equivale ao TAM
          bool verificacao; // Verifica se a pessoa digitou uma letra certa ou errada
          string dica;
          chances=6;
          tam=0;
          i=0;
          verificacao=false;
          acertos=0;

          cout << "O que seu adversario vai adivinhar? " << "\n";
          cin >> entrada;
      //comando limpar tela
          system("cls");

          cout << "Dica: ";
          cout << dica;
          cin >> dica;
      // O indice vai percorrer ENTRADA até o /0 (enter) pra verificar se tá certo e a posição
      //Char de arrays devem sempre terminar em /0
          while(entrada != '\0') {
              i++; // O i vai percorrer a "entrada" de um por um,e que ainda não é o /0
              tam++; // Cada palavra certa vai adicionar +1 em TAM, desde que i não seja o enter
          }
      //Vou preencher a "entrada" com asteristicos e cada palavra certa vai ser -1 asteristico
          for(i=0 ; i<21 ; i++) {
               //Enquanto i for menor que 21, i de secreta vai aparecer com *
          }
      //Enquanto o jogador tiver chances e acertos diferente de tam, irá aparecer as chances e palavras acertadas na tela
      inicio:
          while((chances > 0)&&(acertos < tam)){
              cout << "Chances Restantes: " << chances << "\n";
              cout << "Palavra Secreta: ";
              for(i=0 ; i<tam ; i++) {
                  cout << secreta;
              }
      //O jogador vai digitar
              cout << "\n\n" << "Digite uma letra: ";
              cin >> letra[0]; //Armazenar na posição 0
              // Se já tiver usado a letra, goto volta pro o inico
              for(i=0 ; i<tam ; i++){
                  if(letras == letra[0]) {
                      system("cls");
                      cout << "\nLetra ja usada! \n";
                      goto inicio;
                  } else {
                      letras=letra[0];
                  }
              }
              for(i=0 ; i<tam ; i++) {
                  if(entrada==letra[0]) {
                      verificacao=true;
                      // A letra dá posição vai ser copiada para secreta se for certa
                      secreta=entrada;
                      acertos++; // incrementa o total de acertos
                  }
              }
      //Se acerto for igual a falso "not acerto = !acerto" diminui o numero de chances
              if(!verificacao) {
                  chances--;
              }
              verificacao=false;
              system("cls");
              if(verificacao=false) {
                  system("cls");
                  cout << letra[0];
              }
          }
          
          if(acertos==tam) {
              cout << "O jogador ganhou! ";
          } else {
              cout << "O jogador perdeu! ";
          }
          system("pause");
          return 0;
      }
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.