1
resposta

Meu código até aki, (sem as asc arts de vitória e enforcou).

include <stdio.h>

include <string.h>

include "forca.h"

include <stdlib.h>

include <time.h>

// variaveis globais

char palavrasecreta [TAMANHO_PALAVRA]; int chutesdados = 0; char chutes [26];

//-------------------------------------------------------------------

void abertura(){ printf("/***/\n"); printf(" /JOGO DE FORCA/\n"); printf("/***/\n"); }

//-------------------------------------------------------------------

int jachutou(char letra){ int achou = 0; for (int j = 0; j< chutesdados; j++){ if ( chutes[j] == letra){ achou = 1; break;

}else { achou = 0; }

} return achou; }

//------------------------------------------------------------------

void desenhaforca(){ int erros = chuteserrados();

printf(" ___ \n"); printf(" |/ | \n"); printf(" | %c%c%c \n", (erros>=1?'(':' '), (erros>=1?'':' '), (erros>=1?')':' ')); printf(" | %c%c%c \n", (erros>=3?'\':' '), (erros>=2?'|':' '), (erros>=3?'/': ' ')); printf(" | %c \n", (erros>=2?'|':' ')); printf(" | %c %c \n", (erros>=4?'/':' '), (erros>=4?'\':' ')); printf(" | \n"); printf("|___ \n"); printf("\n\n");

for (int i = 0; i < strlen(palavrasecreta); i++){ int achou = 0;

achou = jachutou(palavrasecreta[i]);

if (achou){ printf("%c ",palavrasecreta[i]); }else{ printf("_ "); } }

printf("\n"); }

//--------------------------------------------------------------------

void chuta (){ scanf(" %c", &chutes[chutesdados]); chutesdados++; }

//------------------------------------------------------------------

void escolhepalavrasecreta(){

FILE* bancodedados;

bancodedados = fopen("bancodepalavras.txt","r");

if (!bancodedados){ printf("Desculpe! banco de dados não disponivel\n\n"); exit(1); }

int qtdpalavras; fscanf(bancodedados,"%d", &qtdpalavras);

srand(time(0)); int randomico = rand() % qtdpalavras;

for (int i = 0; i<= randomico; i++){ fscanf(bancodedados,"%s", palavrasecreta);

}

fclose(bancodedados);

}

//------------------------------------------------------------------

int enforcou(){

return chuteserrados()>=5;

}

//-------------------------------------------------------------------

int acertou(){

for( int i = 0; i < strlen(palavrasecreta); i++){

if(!jachutou(palavrasecreta[i])){
return 0;
}
}

return 1;

}

//------------------------------------------------------------------------ void adicionapalavra(){ char escolha;

printf("Voce deseja adicionar uma palavra nova?(S/N)\n"); scanf(" %c", &escolha);

if (escolha == 'S') { char novapalavra[TAMANHO_PALAVRA]; printf("Qual a sua nova palavara?"); scanf("%s", novapalavra);

FILE* bancodedados;
bancodedados = fopen("bancodepalavras.txt","r+");

if (!bancodedados){
printf("Desculpe! banco de dados não disponivel\n\n");
exit(1);

}

int qtdpalavras;

fscanf(bancodedados,"%d",&qtdpalavras);
qtdpalavras++;
 fseek(bancodedados, 0, SEEK_SET);
 fprintf(bancodedados,"%d",qtdpalavras);
 fseek(bancodedados, 0, SEEK_END);

fprintf(bancodedados, "\n %s",novapalavra);



fclose(bancodedados);

} }

//------------------------------------------------------------------------- int chuteserrados(){ int errou = 0; for (int i=0; i < chutesdados; i++){ int existe = 0; for (int j = 0; j < strlen(palavrasecreta); j++){ if (chutes[i]==palavrasecreta[j]){ existe = 1; break; } } if (!existe){ errou++; } }

return errou;

}

//-------------------------------------------------------------------------

int main(){

abertura(); escolhepalavrasecreta(); do { desenhaforca(); chuta(); }while (!acertou() && !enforcou()); adicionapalavra();

}

1 resposta

Olá!

Pelo que entendi, você está com dúvidas na finalização do jogo da forca em C. Vou tentar te ajudar!

Pelo código que você compartilhou, parece que você já implementou a lógica principal do jogo, como a abertura, a verificação se a letra já foi chutada, o desenho da forca, o chute da letra, a escolha da palavra secreta, a verificação se o jogador enforcou ou acertou, e até mesmo a adição de uma nova palavra ao banco de dados.

Agora, para finalizar o jogo, você pode adicionar uma mensagem de vitória ou derrota ao final do loop do-while. Por exemplo, você pode verificar se o jogador acertou ou enforcou após o loop e exibir uma mensagem correspondente. Algo assim:

if (acertou()) {
    printf("Parabéns, você acertou a palavra secreta!\n");
} else {
    printf("Que pena, você foi enforcado!\n");
}

Você pode personalizar essas mensagens de acordo com o que desejar. Além disso, você pode adicionar uma opção para o jogador jogar novamente, se desejar.

Espero ter ajudado! Se tiver mais alguma dúvida, é só me dizer. Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software