-
Posts
4 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por carlos.bozza
-
-
@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?
- 1
-
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); }
- 1
-
Em 20/06/2020 às 00:10, arfneto disse:
Tem um loop dentro da função que fica insistindo até o cara acertar cada senha. O que pode fazer por exemplo é mudar para retornar assim que ele digitar, retornando por exemplo 0 se o cara errou a senha, e no programa principal pegar as senhas na sequência como antes, mas dentro de um loop, algo assim como
int main() { int tentativas = 3; int senhas = 5; int ok = 0; const int senha[5] = { 1, 99, 17, 57, 50 }; // vai ter 'x' tentativas de acertar as 'y' senhas for (int t = 0; t < tentativas; t = t + 1) { ok = 0; printf("\nTentativa %d de %d\n\n", 1 + t, tentativas); for (int f = 0; f < senhas; f = f + 1) { // se o cara errou tenta ate 'tentativas' if (fase(f, senha[f]) == 0) break; ok = ok + 1; // passou mais uma }; if (ok != senhas) continue; // outra tentativa printf("\nPORTA LIBERADA!\n\n"); return 0; }; printf("\nTente outra vez. Encerrando!...\n\n"); return 0; };
Nesse exemplo ele poderia tentar 3 vezes. 'ok' soma um pra cada senha certa. a variável 'senhas' tem o total de senhas então é só comparar. Agora a função fica sem aquele loop, certo?
int fase(int etapa, int alvo) { int numero = -1; printf("[Etapa %d de 5] Digite o numero: ", 1+etapa); scanf("%d", &numero); /*while (numero != alvo) { printf("\nVoce digitou um numero incorreto!\n"); printf("Tente novamente\n\n"); printf("[Etapa %d de 5] Digite o numero: ", etapa); scanf("%d", &numero); };*/ if (numero != alvo) return 0; printf("voce passou pela etapa %d! Continue...\n\n", 1+etapa); return 1; };
deixando como comentário o que tinha antes: retorna 0 se o cara errou ou o alvo se ele acertou.
Rodando seria algo assim
Tentativa 1 de 3 [Etapa 1 de 5] Digite o numero: 1 voce passou pela etapa 1! Continue... [Etapa 2 de 5] Digite o numero: 12112 Tentativa 2 de 3 [Etapa 1 de 5] Digite o numero: 1 voce passou pela etapa 1! Continue... [Etapa 2 de 5] Digite o numero: 99 voce passou pela etapa 2! Continue... [Etapa 3 de 5] Digite o numero: 17 voce passou pela etapa 3! Continue... [Etapa 4 de 5] Digite o numero: 57 voce passou pela etapa 4! Continue... [Etapa 5 de 5] Digite o numero: 50 voce passou pela etapa 5! Continue... PORTA LIBERADA!
Claro que há muitas maneiras de fazer isso, mas assim da pra rodar. Talvez pudesse dar umas chances dentro da fase() pro cara tentar umas vezes cada senha ao invés de uma só, ou não?
Bom dia, sou iniciante e estava tentando utilizar o exemplo que você disponibilizou, porém, estou com o seguinte problema, minha etapa ja esta começando a partir da etapa 2, exemplo: etapa 2 de 5. Sabe se coloquei algo errado? E também esta ocorrendo de quando eu erro acerto, por exemplo, a primeira etapa, a segunda, e em seguida erro a terceira, na tela aparece para começar a etapa 2 novamente, porém se eu digito a senha da 3 etapa, o sistema esta aceitando normalmente. olha o print, por gentileza.
Segue o código que estou usando:
#include <stdio.h>
int fase(int etapa, int alvo);int main()
{
fase(1, 01);
fase(2, 91);
fase(3, 29);
fase(4, 75);
fase(5, 55);
printf("\nTRANCA LIBERADA, ABRA A PORTA!\n\n");
return;
};int fase(int etapa, int alvo)
{
int numero = -1;printf("[Etapa %d de 5] Digite o numero: ", 1+etapa);
scanf("%d", &numero);while (numero != alvo)
{
printf("\nVoce digitou um numero incorreto!\n");
printf("Tente novamente\n\n");
printf("[Etapa %d de 5] Digite o numero: ", etapa);
scanf("%d", &numero);
};
if (numero != alvo) return 0;
printf("voce passou pela etapa %d! Continue...\n\n", 1+etapa);
return 1;
};Desde já, agradeço a atenção.
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
Programando um jogo da forca em C
em C/C#/C++
Postado
@devair1010 ah sim, mas eu digo, do código inicial que eu havia mandado. O que você mandou com algumas melhorias, eu testei.