LÓGICA - Forca com números

Lógica de Programação


Linguagem C






Vamos implementar um jogo de forca. Ao iniciar o algoritmo é sorteado um número inteiro qualquer de 0 a 99999. Após, o algoritmo deverá permitir que o jogador informe vários dígitos. A cada dígito informado o algoritmo responde se o dígito existe no número original. Cada vez que erra, perde-se uma chance.

Exemplo:
Número: 50142

Caso o jogador informe o digito 3, ele perde uma chance, caso informe o digito 2 informa-se que existe o digito. Quando o usuário identificar todos os dígitos o número é apresentado a ele. Caso não identifique todos os dígitos e acabem as chances, informa-se que ele perdeu e apresenta o número.

Lembro que para solucionar este problema não utilizaremos variáveis compostas, apenas variáveis simples, estruturas de repetição e estruturas condicionais.

Vamos ao algoritmo.

#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#define TRUE 1
#define FALSE 0


int main(){
   
   
    int sorteado;
    int dig1, dig2, dig3, dig4, dig5;
    int chance, palpite, palpiteValido;
    int acertou, acDig1, acDig2, acDig3, acDig4, acDig5;
   
    /*Inicialmente vamos definir um número qualquer com 5 digitos. Esse número será obtido
     * aleatóriamente. */
   
    srand( (unsigned)time(NULL) );
    sorteado = rand() % 99999;
    printf("Sorteado: %d\n", sorteado);
   
    /*Como o número possui 5 digitos, vamos isolá-los em digitos*/
   
    dig1 = sorteado / 10000;
    sorteado -= dig1*10000;
    dig2 = sorteado / 1000;
    sorteado -= dig2*1000;
    dig3 = sorteado / 100;
    sorteado -= dig3*100;
    dig4 = sorteado / 10;
    dig5 = sorteado % 10;
   
    printf("Digitos %d, %d, %d, %d, %d\n", dig1, dig2, dig3, dig4, dig5);
   
    /*Permitir que o usuário dê seus palpites */
    chance = 5;
    acertou = 0;
    acDig1 = acDig2 = acDig3 = acDig4 = acDig5 = FALSE;
   
    do{
            //Apresenta os dígitos que acertou.
            printf("Número: ");
            if( acDig1 )
                printf("%d", dig1);
            else
                printf("-");
            if( acDig2 )
                printf("%d", dig2);
            else
                printf("-");
            if( acDig3 )
                printf("%d", dig3);
            else
                printf("-");
            if( acDig4 )
                printf("%d", dig4);
            else
                printf("-");
            if( acDig5 )
                printf("%d", dig5);
            else
                printf("-");
       
            printf("\n\n");
            printf("Palpite: ");
            scanf("%d", &palpite);
           
            //Caso o usuário informe um número negativo convertemos para positivo.
            palpite = abs(palpite);
            //Verifica se o palpite está correto.
            palpiteValido = FALSE;
            if(palpite == dig1 && !acDig1){
                acDig1 = TRUE;
                acertou += 1;
                palpiteValido = TRUE;
            }
            if(palpite == dig2 && !acDig2){
                acDig2 = TRUE;
                acertou += 1;
                palpiteValido = TRUE;
            }
            if(palpite == dig3 && !acDig3){
                acDig3 = TRUE;
                acertou += 1;
                palpiteValido = TRUE;
            }
            if(palpite == dig4 && !acDig4){
                acDig4 = TRUE;
                acertou += 1;
                palpiteValido = TRUE;
            }
            if(palpite == dig5 && !acDig5){
                acDig5 = TRUE;
                acertou += 1;
                palpiteValido = TRUE;
            }
            //Se o palpite for inválido, o jogador perde uma chance.
            if(!palpiteValido){
                chance--;
                printf("Palpite incorreto. Perdeu uma chance. (%d de 5)\n\n", chance);
            }
           
    }while(chance != 0 && acertou != 5);
   
    //Verifica se o usuário acertou os números.
    if(acertou == 5){
        printf("Parabéns, você conseguiu!!!");
    }else{
        printf("Mais sorte na próxima vez!");
    }
   
    return 0;
}



Como atividade, altere o algoritmo e exiba a imagem da forma, onde o jogador é inforcado.

Comentários

Postagens mais visitadas