Ir ao conteúdo
  • Cadastre-se
carlos.bozza

C Programando um jogo da forca em C

Posts recomendados

Boa noite, alguém pode me ajudar a completar esse código abaixo, sou iniciante e não sei como eu poderia completa-lo. aceito também se identificarem melhorias nele.

 

código abaixo:

#include <stdio.h>
#include <string.h>
#include <locale.h>
                         

int main() {    
    char resposta[20];  
    int erros;          
    int acertos;         
    char letra;          
    int i, j;            
    int max;
           
 
                          
    setlocale(LC_ALL, "Portuguese");
    printf("************ Jogo da Forca ************\n");        
    printf("************** Jogador 1 **************\n\n");
    printf("Utilize apenas letras minúsculas.\n");
    printf("Máximo de 20 letras\n\n");

    letra = ' '; max = 1;             
    for (i = 1; i <= 20; i++) {   
        resposta = ' ';   
    }
    erros = 0; acertos = 0;

    printf("Digite a palavra secreta: ");
    scanf (" %s", resposta);
    max = strlen (resposta);
    system("clear||cls");  
        
    printf("************ Jogo da Forca ************\n");   
    printf("************** Jogador 2 **************\n\n");
    printf("Utilize apenas letras minúsculas.\n");
    printf("Limite de 6 erros. Palavra de até 20 letras\n\n");

    while ( erros < 6 )    
    {
          printf("Digite uma letra: ");
          scanf (" %c", &letra);
          j = 0;
          for (i = 0; i <= max; i++)
          {
               if (resposta == letra)
               {
                   acertos++; j++;
                   printf ("\nAcertos: %d - Erros: %d\n",acertos, erros);
               }
          }
          if (j <= 0)      
                erros++;

\* ------------------- Aqui falta a parte responável pela verificação de vitoria ou derrota ----------------------*/

\* -------------------------------------- Final da Verificação ----------------------------------------------------------------*/

    }
    return (0);
}

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@carlos.bozza      para ver se ganhou verifique a quantidade de acertos , se os acertos forem iguais ao tamanho da palavra então ganhou pois acertou todas as letras , então seu código com algumas modificações poderia ser assim  :

#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
#include <ctype.h>
#define cls system("clear||cls");
void gotoYX(int x,int y){
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),(COORD){x,y});
}
void cores(int l ,int f){
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),l+(f<<4 ));
}
void visualizacao(char viz[] ){
    int i;
    cores(15,0);
    for (i=0; i<strlen(viz); i++ ){
        printf("%c ",viz[i]);
    }
    printf("\n\n");
}
int main() {
    do{
        char secreta[ 20]={""},
             resposta[20]={""},
             pista[20], letra ;
        int  erros=0,acertos=0,
             i,j,flag,max=1   ;
        setlocale(LC_ALL, "Portuguese");
        cores(14,0);
        printf("************ Jogo da Forca ************\n");
        printf("************** Jogador 1 **************\n\n");
        printf("Máximo de 20 letras\n\n");
        printf("Digite a palavra secreta: ");
        scanf (" %s", secreta);
        printf("Uma Pista ");
        scanf("%s",pista);
        max = strlen (secreta);
        for(i=0;i<max; i++)
            resposta[i] = '_';
        cls
        printf("************ Jogo da Forca ************\n");
        printf("************** Jogador 2 **************\n\n");
        printf("Limite de 6 erros. Palavra de até 20 letras\n\n");
        cls
        cores(12,14);
        printf("\n\t  Pista -> ( %s )   \n",pista);
        Sleep(3000);
        while ( erros < 6 ){
            cores(11,0);
            cls
            gotoYX(60,6);
            printf("Acertos = %3d\n",acertos);
            gotoYX(60,5);
            printf("Erros   = %3d\n",erros);
            visualizacao(resposta);
            printf("Digite uma letra: ");
            scanf (" %c", &letra);
            flag = 0;
            for( i=0; i<max; i++ ){
                if( toupper(secreta[i]) == toupper( letra )){
                    flag = 1;
                    secreta[i] = '_';
                    resposta[i] = letra;
                    acertos++;
                }
            }
            if( ! flag ){
                erros++;
            }
            if(acertos == max){
                cls
                printf("\n\n\n");
                visualizacao(resposta);
                cores(12,15);// cor das letras e cor de fundo da tela
                Beep(1500,250);// faz um sonzinho
                printf("\n\n  Acertou Todas As Letras em %d Tentativas . . . !  \n\n",erros + acertos);
                break;  // sai do opp
            }
            else{
                if(erros == 6){
                    cores(15,12);
                    printf ("\n\nAcertos: %d - Erros: %d\n\n\n",acertos, erros);
                    Sleep(3000);
                    break;  // sai do opp
                }
            }
        }
        gotoYX(60,6);
        cores(7,0);
        printf("Acertos = %3d\n",acertos);
        gotoYX(60,5);
        printf("Erros   = %3d\n",erros);
        gotoYX(20,15);
        printf("Jogar Novamente S/N \n");
    }while( toupper((char)getch()) != 'N' );
    printf("\n\n\n");
    return 32768;
}

 

  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010 Opa muito obrigado pela, entendi uma outra maneira de se fazer. E para somente terminar esse código, sem fazer nenhuma alteração na estrutura dele?

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@carlos.bozza     está funcionando , mas se você quiser pode fazer as modificações que achar necessário .

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010 ah sim, mas eu digo, do código inicial que eu havia mandado. O que você mandou com algumas melhorias, eu testei.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@carlos.bozza      para terminar seu código , precisa algumas modificações , pois para verificar se ganhou , você precisa colocar um Loop que percorra todas as letras da palavra a cada letra digitada ,  então para ficar quase igual seu código ,pode ser assim  :

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
#include <ctype.h>
int main() {
    do{
        char secreta[ 20]={""},// precisa mais essa variável
             resposta[20]={""},
             letra ;
        int  erros=0,acertos=0,
             i,j,max   ;
        setlocale(LC_ALL, "Portuguese");
        printf("************ Jogo da Forca ************\n");
        printf("************** Jogador 1 **************\n\n");
        printf("Máximo de 20 letras\n\n");
        printf("Digite a palavra secreta: ");
        scanf (" %s", secreta);
        max = strlen (secreta);
        for(i=0;i<max; i++)
            resposta[i] = '_';
        system("cls");
        printf("************ Jogo da Forca ************\n");
        printf("************** Jogador 2 **************\n\n");
        printf("Limite de 6 erros. Palavra de até 20 letras\n\n");
        while ( erros < 6 ){
            printf("Acertos = %3d\n",acertos);
            printf("Erros   = %3d\n\n",erros);
            for (i=0; i<strlen(resposta); i++ ){
                printf("%c ",resposta[i]);
            }
            printf("\n\n");
            printf("Digite uma letra: ");
            scanf (" %c", &letra);
            j = 0;
            for( i=0; i<max; i++ ){// precisa desse Loop para testar a letra digitada com topdas as outras letras da palavra secreta
                if( toupper(secreta[i]) == toupper( letra )){
                    j = 1;
                    secreta[i] = '_';
                    resposta[i] = letra;
                    acertos++;
                }
            }
            if( ! j ){
                erros++;
            }
            if(acertos == max){
                system("cls");
                printf("\n\n\n");
                for (i=0; i<strlen(resposta); i++ ){// mostra as letras que acertou da palavra
                    printf("%c ",resposta[i]);
                }
                printf("\n\n");
                printf("\n\n  Acertou Todas As Letras em %d Tentativas . . . !  \n\n",erros + acertos);
                break;  // sai do Loop
            }
            else{
                if(erros == 6){
                    printf ("\n\nAcertos: %d - Erros: %d\n\n\n",acertos, erros);
                    break;  // sai do Loop
                }
            }
        }
        printf("Acertos = %3d\n",acertos);
        printf("Erros   = %3d\n",erros);
        printf("Jogar Novamente S/N \n");
    }while( toupper((char)getch()) != 'N' );
    printf("\n\n\n");
    return 32768;
}

 

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 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...

Aprenda_a_Ler_Resistores_e_Capacitores-capa-3d-newsletter.jpg

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!