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
Postar um comentário