Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Finalizando o jogo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "forca.h"

// global variables
char palavra[TAMANHO];
char chutes[26];
int chutesdados = 0;

void abertura() {
    printf("****************\n");
        printf(" Jogo de Forca *\n");
        printf("****************\n\n");
}

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

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(palavra); i++){
        if(jachutou(palavra[i])){
            printf("%c ", palavra[i]);
        } else {
            printf("_ ");
        }
    }
    printf("\n");
}

void escolhepalavras(){
    FILE* f;
    int qtdpalavras;

    f = fopen("palavras.txt", "r");
    if(f == 0){
        printf("Desculpe, banco de dados indisponível\n\n");
        exit(1);
    }

    fscanf(f, "%d", &qtdpalavras);
    
    srand(time(0));
    int randomico = rand() % qtdpalavras;

    for(int i = 0; i <= randomico; i++){
        fscanf(f, "%s", palavra);
    }

    fclose(f);
}

void adicionapalavra() {
        char quer;

        printf("Voce deseja adicionar uma nova palavra no jogo (S/N)? ");
        scanf(" %c", &quer);

        if(quer == 'S') {
            char novapalavra[TAMANHO];

            printf("Digite a nova palavra, em letras maiusculas: ");
            scanf("%s", novapalavra);
        printf("\n");

            FILE* f;

            f = fopen("palavras.txt", "r+");
            if(f == 0) {
                printf("Banco de dados de palavras não disponível\n\n");
               	exit(1);
            }

            int qtd;
            fscanf(f, "%d", &qtd);
               qtd++;
            fseek(f, 0, SEEK_SET);
            fprintf(f, "%d", qtd);

            fseek(f, 0, SEEK_END);
            fprintf(f, "\n%s", novapalavra);

            fclose(f);
        }
    printf("\n");
    escolhepalavras();
}

int enforcou(){
    int erros = 0;
    for(int i = 0; i < chutesdados; i++){
        int existe = 0;
        for(int j = 0; j < strlen(palavra); j++){
            if(chutes[i] == palavra[j]){
                existe = 1;
                break;
            }
        }
        if(!existe) erros++;
    }
    return erros>=5;
}

int acertou(){
    for(int i = 0; i < strlen(palavra); i++){
        if(!jachutou(palavra[i])){
            return 0;
        }
    }
    return 1;
}

int chuteserrados() {
    int erros = 0;

    for(int i = 0; i < chutesdados; i++) {

        if(!letraexiste(chutes[i])) {
            erros++;
        }
    }

    return erros;
}

int letraexiste(char letra) {

    for(int j = 0; j < strlen(palavra); j++) {
        if(letra == palavra[j]) {
            return 1;
        }
    }

    return 0;
}

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


int main() {	
    abertura();
    adicionapalavra();
    
    do {
        desenhaforca();
        chuta(chutes);
    } while (!acertou() && !enforcou());

    if(acertou()) {
            printf("\nParabens, voce ganhou!\n\n");

            printf("       ___________      \n");
            printf("      '._==_==_=_.'     \n");
           printf("      .-\\:      /-.    \n");
           printf("     | (|:.     |) |    \n");
            printf("      '-|:.     |-'     \n");
            printf("        \\::.    /      \n");
            printf("         '::. .'        \n");
            printf("           ) (          \n");
            printf("         _.' '._        \n");
            printf("        '-------'       \n\n");

    } else {
            printf("\nPuxa, voce foi enforcado!\n");
            printf("A palavra era **%s**\n\n", palavra);

            printf("    _______________         \n");
            printf("   /               \\       \n"); 
            printf("  /                 \\      \n");
            printf("//                   \\/\\  \n");
            printf("\\|   XXXX     XXXX   | /   \n");
            printf(" |   XXXX     XXXX   |/     \n");
            printf(" |   XXX       XXX   |      \n");
            printf(" |                   |      \n");
            printf(" \\__      XXX      __/     \n");
            printf("   |\\     XXX     /|       \n");
            printf("   | |           | |        \n");
            printf("   | I I I I I I I |        \n");
            printf("   |  I I I I I I  |        \n");
            printf("   \\_             _/       \n");
            printf("     \\_         _/         \n");
            printf("       \\_______/           \n");
    }
}
1 resposta
solução!

Oi Henrique, tudo bem?

Parabéns por compartilhar seu código em C! É realmente empolgante ver você aplicando suas habilidades e desenvolvendo um jogo de forca completo. Continuar praticando e explorando os detalhes da linguagem é uma excelente maneira de aprimorar suas habilidades.

Um abraço e bons estudos.