O que há de Novo?
Fórum Outer Space - O maior fórum de games do Brasil

Registre uma conta gratuita hoje para se tornar um membro! Uma vez conectado, você poderá participar neste site adicionando seus próprios tópicos e postagens, além de se conectar com outros membros por meio de sua própria caixa de entrada privada!

  • Anunciando os planos GOLD no Fórum Outer Space
    Visitante, agora você pode ajudar o Fórum Outer Space e receber alguns recursos exclusivos, incluindo navegação sem anúncios e dois temas exclusivos. Veja os detalhes aqui.


Forca em c

Axel Ramone

Larva
Mensagens
2
Reações
0
Pontos
1
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>





int main ()
{
int i, cont, numero;
int numero_caracter,certo; //variáveis inteiras
int letra_errada1, letra_errada2,letra_errada3,letra_errada4,letra_errada5;
char palavra[20], resp[20];
char chance, validar, prosseguir; // variáveis de tipo char


do{ // inicio do laço de repetição

system("color 3");

system("cls"); // limpar a tela após rodar o programa
puts("\t\t\t === JOGO DA FORCA ===\n\n\n\n");
// ^ tela inicial
printf("---------------------------------------------------------------\n\n");
puts("(1) - O usuario digitara uma palavra.\n(Sem letra maiuscula)\n");
puts("(2) - O proximo usuario ira descobrir a palavra.\n");
printf("---------------------------------------------------------------");
// ^ instrução do jogo
validar = 'n';// utilizado para colocar um caractere na saida de dados
while(validar != 'S') // caso o usuario digitar 's' vai executar o laço
{
certo = 0; // contador de letras certas irá zerar
numero_caracter=0; // contador de letras digitas irá zerar
numero = 0;
i=0;
cont = 0;


letra_errada1 = ' '; // ira limpar a 1 letra armazenada
letra_errada2 = ' ';// ira limpar a 2 letra armazenada
letra_errada3 = ' ';// ira limpar a 3 letra armazenada
letra_errada4 = ' ';// ira limpar a 4 letra armazenada
letra_errada5 = ' ';// ira limpar a 5 letra armazenada
printf("\n\nDigite uma palavra (nao permita que o outro usuario veja): "); //informação
fflush(stdin); // limpar cache
gets (palavra); // ira armazenar a palavra escolhida

printf("\nA palavra digitada foi ( %s ), confirmar? (digite 's' para confirmar e 'n' para digitar novamente): ", palavra);
//condição para iniciar o jogo, confirma com o usuario se realmente de
fflush(stdin); // limpar cache
scanf("%c", &validar); // armazenar a letra, caso seja 'n' ele repete o codigo para digitar outra frase
// caso seja 's' dará continuidade ao programa

switch(validar) // switch de confirmação, caso o usuario digitar s
{
case 's': // dará inicio ao jogo
printf("O jogo sera iniciado...\n");
system("PAUSE"); // para as execuções
system("CLS"); // limpa a tela

for(i = 0; i < 20; i++) //laçõ de repetição para saber a resposta
{
resp='_'; // aparece na tela os tracinhos para saber quantas letras tem, etc
}
while(cont < 6) // laço de repetiçao para a quantidade de chances
{
numero=0;
certo=0;
switch(cont)// verificar as chances, bonequinho da forca
{
case 0: printf("___________ \n| | \n| _|_\n| \n| \ \n| \n| \n| \n| \n\n");
break;
// caso a chance for 0 irá aparecer esse desenho na tela
case 1: printf("___________ \n| | \n| _|_\n| O \n| \n| \n| \n| \n| \n\n");
break;
// caso a chance for 1 irá aparecer esse desenho na tela
case 2: printf("___________ \n| | \n| _|_\n| O \n| | \n| \n| \n| \n| \n\n");
break;
// caso a chance for 2 irá aparecer esse desenho na tela
case 3: printf("___________ \n| | \n| _|_\n| O \n| /| \n| \n| \n| \n| \n\n");
break;
// caso a chance for 3 irá aparecer esse desenho na tela
case 4: printf("___________ \n| | \n| _|_\n| O \n| /|\\ \n| \n| \n| \n| \n\n");
break;
// caso a chance for 4 irá aparecer esse desenho na tela
case 5: printf("___________ \n| | \n| _|_\n| O \n| /|\\ \n| / \n| \n| \n| \n\n");
break;
// caso a chance for 5 irá aparecer esse desenho na tela
}
for(i=0; i < 20; i++)
{
if(palavra=='\0') // ira separar a frase por letras
{
numero_caracter = i;// ira armazenar a letra
break;
}
else
{
if(palavra==' ')// caso frase contenha espaço
{
resp=' '; // vai receber espaço
printf("%c", resp);
}

else
{
if(palavra==chance) // se a frase digitada for igual a tentativa digitada
{
resp=palavra; // resposta vai armazenar a frase
}
}
}
printf("%c ", resp); // ira mostrar a resposta
}
printf("\n\n%c %c %c %c %c\n", letra_errada1, letra_errada2, letra_errada3, letra_errada4, letra_errada5); // armazenar as letras erradas, pra não digitar dnv

switch(cont) // serve para quantidade de vezes que o usuario errar
// cada vez que errar aparecerá uma msg para informar quantas chances restam
{
case 0: puts("\n\nVoce pode errar 5 vezes");
break;
case 1: puts("\n\nVoce pode errar 4 vezes");
break;
case 2: puts("\n\nVoce pode errar 3 vezes");
break;
case 3: puts("\n\nVoce pode errar 2 vezes");
break;
case 4: puts("\n\nVoce pode errar apenas mais uma vez");
break;
case 5: puts("\n\nUltima chance !!!");
}
for(i = 0; i <= numero_caracter; i++)
{
if(chance!=' ')
{
if(resp!='_')
{
certo++;
if(certo==numero_caracter)
{
cont=7;
break;
}
}
}
}
if(certo!=numero_caracter)
{
printf("\n\nDigite uma letra: ");// usuario irá digitar uma letra
fflush(stdin);
scanf("%c", &chance);
chance = tolower(chance); //Converte o caracter em minúsculo
}
for(i = 0; i < numero_caracter; i++) // laço que ira verificar na string as letras
{
if(chance!=palavra) // se tentativa for diferente de frase
{
numero++; // incrementa mais 1 no contador n
if(numero==numero_caracter) // se n for igual nchar
{
cont++; // incrementa mais 1
if(cont==1) //contador for igual a 1
{
letra_errada1 = chance; // vai armazenar a letra na variavel letra_errada1
}
if(cont==2)
{
letra_errada2 = chance;// vai armazenar a letra na variavel letra_errada2
}
if(cont==3)
{
letra_errada3 = chance;// vai armazenar a letra na variavel letra_errada3
}
if(cont==4)
{
letra_errada4 = chance;// vai armazenar a letra na variavel letra_errada4
}
if(cont==5)
{
letra_errada5 = chance;// vai armazenar a letra na variavel letra_errada5
}
}
}
}
system("cls"); // ira limpar a tela
}
default: validar = 'n';
}
if(cont==6) // se o contador for igual a 6, o usuario perde
{
printf("___________ \n| | \n| _|_\n| O \n| /|\\ \n| / \\ \n| \n| \n| \n\n");
for(i = 0; i < numero_caracter; i++) // numero de caracteres digitados for menor que o contador
{
if(resp==palavra) // caso a palavra digitada for igual
{
printf("%c ", resp); //ira apresentar a resposta correta no campo do jogo
}
else
{
printf("(%c) ", palavra); // irá mostrar as letras que estão faltando no campo do jogo
}
}
system("color 4");
printf("\n\n%c %c %c %c %c %c\n", letra_errada1, letra_errada2,letra_errada3, letra_errada4, letra_errada5, chance); // irá mostrar as letras que foram digitadas
printf("\n\n\n ----- Voce Perdeu !!! -----\n\n");
system("PAUSE");//encerrando a execução
}
if(cont==7)
{
system("color 5");
printf("------------------------------------------------------\n\t\t ===== YOU WIN =====\t\t\n------------------------------------------------------\n\n\n\n");

}
validar = 'S';
printf("\n==\t\tInsert coins to play again !\t\t== \n\n \n\t\tPressione 'S' para inserir !\n\n\t\t\t\t");
printf("> ");
fflush(stdin); // limpar cache
prosseguir = toupper(getchar()); //Converte caracter minúsculo em maiúsculo
// verifica se usuario digitar 's' ira repetir o programa
//caso digite qualquer outro valor ira sair


}
}while(prosseguir=='S'); // final do primeiro laço, caso usuario digite s o jogo irá iniciar novamente
system("PAUSE");
return 0;
}
 

Gkaarl

Bam-bam-bam
Mensagens
6.225
Reações
5.522
Pontos
353
Amigo, você tem alguma dúvida nesse código? Ou qual foi o propósito do post?

Se tiver alguma dúvida posso tentar te ajudar, apesar de programar apenas em Python e php.
 

Hans Castorp

Mil pontos, LOL!
Mensagens
20.203
Reações
20.421
Pontos
1.129
Deve está aprendendo a programar e quer exibir seu primeiro código complexo. :kpensa
 

Preg

Prodígio da preguiça
VIP
Mensagens
3.667
Reações
9.500
Pontos
653
Queridão, quero ver forca em Assembly.

Abçs.
 


Axel Ramone

Larva
Mensagens
2
Reações
0
Pontos
1
Perdão, tava com tanto sono que esqueci de falar o objetivo uashduiashdiuashd
enfim, gostaria de entender pq o jogo toda vez que coloco a mesma palavra após ele reiniciar, ex:
digitar palavra: forca
ai usuario acerta
volta pra tela inicial
digitar palavra: forca
ai nas opções la aparece a letra o, no caso a uiltima letra digitada antes de encerrar o codigo
não estou conseguindo corrigir esse bug
 

SagaOPC

Mil pontos, LOL!
Mensagens
29.475
Reações
42.333
Pontos
1.074
Alguém pediu forca em C?
Toma:
c_forca1.gif
 

Amigo Bolha

Mil pontos, LOL!
Mensagens
21.341
Reações
29.515
Pontos
1.424
Amigo, identa seu código e explica melhor como você tá compilando ele, isso é C mesmo? GCC não compila o seu código não.
Código:
gcc forca.c
forca.c:64:5: error: array type 'char [20]' is not assignable
resp='_'; // aparece na tela os tracinhos para saber quantas letras tem, etc
~~~~^
forca.c:72:50: warning: unknown escape sequence '\ ' [-Wunknown-escape-sequence]
case 0: printf("___________ \n| | \n| _|_\n| \n| \ \n| \n| \n| \n| \n\n");
                                                 ^~
forca.c:93:4: warning: comparison of array 'palavra' equal to a null pointer is
      always false [-Wtautological-pointer-compare]
if(palavra=='\0') // ira separar a frase por letras
   ^~~~~~~  ~~~~
forca.c:100:11: warning: comparison between pointer and integer
      ('char *' and 'int')
if(palavra==' ')// caso frase contenha espaço
   ~~~~~~~^ ~~~
forca.c:102:5: error: array type 'char [20]' is not assignable
resp=' '; // vai receber espaço
~~~~^
forca.c:103:14: warning: format specifies type 'int' but the argument has type
      'char *' [-Wformat]
printf("%c", resp);
        ~~   ^~~~
        %s
forca.c:108:11: warning: comparison between pointer and integer
      ('char *' and 'int')
if(palavra==chance) // se a frase digitada for igual a tentativa digitada
   ~~~~~~~^ ~~~~~~
forca.c:110:5: error: array type 'char [20]' is not assignable
resp=palavra; // resposta vai armazenar a frase
~~~~^
forca.c:114:15: warning: format specifies type 'int' but the argument has type
      'char *' [-Wformat]
printf("%c ", resp); // ira mostrar a resposta
        ~~    ^~~~
        %s
forca.c:137:8: warning: comparison between pointer and integer
      ('char *' and 'int')
if(resp!='_')
   ~~~~^ ~~~
forca.c:157:10: warning: comparison between pointer and integer
      ('int' and 'char *')
if(chance!=palavra) // se tentativa for diferente de frase
   ~~~~~~^ ~~~~~~~
forca.c:195:8: warning: array comparison always evaluates to false
      [-Wtautological-compare]
if(resp==palavra) // caso a palavra digitada for igual
       ^
forca.c:197:15: warning: format specifies type 'int' but the argument has type
      'char *' [-Wformat]
printf("%c ", resp); //ira apresentar a resposta correta no campo do jogo
        ~~    ^~~~
        %s
forca.c:201:17: warning: format specifies type 'int' but the argument has type
      'char *' [-Wformat]
printf("(%c) ", palavra); // irá mostrar as letras que estão faltando n...
         ~~     ^~~~~~~
         %s
11 warnings and 3 errors generated.

Código:
#
include < stdio.h > #include < stdlib.h > #include < ctype.h >

  int main() {
    int i, cont, numero;
    int numero_caracter, certo; //variáveis inteiras
    int letra_errada1, letra_errada2, letra_errada3, letra_errada4, letra_errada5;
    char palavra[20], resp[20];
    char chance, validar, prosseguir; // variáveis de tipo char

    do { // inicio do laço de repetição

      system("color 3");

      system("cls"); // limpar a tela após rodar o programa
      puts("\t\t\t === JOGO DA FORCA ===\n\n\n\n");
      // ^ tela inicial
      printf("---------------------------------------------------------------\n\n");
      puts("(1) - O usuario digitara uma palavra.\n(Sem letra maiuscula)\n");
      puts("(2) - O proximo usuario ira descobrir a palavra.\n");
      printf("---------------------------------------------------------------");
      // ^ instrução do jogo
      validar = 'n'; // utilizado para colocar um caractere na saida de dados
      while (validar != 'S') // caso o usuario digitar 's' vai executar o laço
      {
        certo = 0; // contador de letras certas irá zerar
        numero_caracter = 0; // contador de letras digitas irá zerar
        numero = 0;
        i = 0;
        cont = 0;

        letra_errada1 = ' '; // ira limpar a 1 letra armazenada
        letra_errada2 = ' '; // ira limpar a 2 letra armazenada
        letra_errada3 = ' '; // ira limpar a 3 letra armazenada
        letra_errada4 = ' '; // ira limpar a 4 letra armazenada
        letra_errada5 = ' '; // ira limpar a 5 letra armazenada
        printf("\n\nDigite uma palavra (nao permita que o outro usuario veja): "); //informação
        fflush(stdin); // limpar cache
        gets(palavra); // ira armazenar a palavra escolhida

        printf("\nA palavra digitada foi ( %s ), confirmar? (digite 's' para confirmar e 'n' para digitar novamente): ", palavra);
        //condição para iniciar o jogo, confirma com o usuario se realmente de
        fflush(stdin); // limpar cache
        scanf("%c", & validar); // armazenar a letra, caso seja 'n' ele repete o codigo para digitar outra frase
        // caso seja 's' dará continuidade ao programa

        switch (validar) // switch de confirmação, caso o usuario digitar s
        {
        case 's': // dará inicio ao jogo
          printf("O jogo sera iniciado...\n");
          system("PAUSE"); // para as execuções
          system("CLS"); // limpa a tela

          for (i = 0; i < 20; i++) //laçõ de repetição para saber a resposta
          {
            resp = '_'; // aparece na tela os tracinhos para saber quantas letras tem, etc
          }
          while (cont < 6) // laço de repetiçao para a quantidade de chances
          {
            numero = 0;
            certo = 0;
            switch (cont) // verificar as chances, bonequinho da forca
            {
            case 0:
              printf("___________ \n| | \n| _|_\n| \n| \ \n| \n| \n| \n| \n\n");
              break;
              // caso a chance for 0 irá aparecer esse desenho na tela
            case 1:
              printf("___________ \n| | \n| _|_\n| O \n| \n| \n| \n| \n| \n\n");
              break;
              // caso a chance for 1 irá aparecer esse desenho na tela
            case 2:
              printf("___________ \n| | \n| _|_\n| O \n| | \n| \n| \n| \n| \n\n");
              break;
              // caso a chance for 2 irá aparecer esse desenho na tela
            case 3:
              printf("___________ \n| | \n| _|_\n| O \n| /| \n| \n| \n| \n| \n\n");
              break;
              // caso a chance for 3 irá aparecer esse desenho na tela
            case 4:
              printf("___________ \n| | \n| _|_\n| O \n| /|\\ \n| \n| \n| \n| \n\n");
              break;
              // caso a chance for 4 irá aparecer esse desenho na tela
            case 5:
              printf("___________ \n| | \n| _|_\n| O \n| /|\\ \n| / \n| \n| \n| \n\n");
              break;
              // caso a chance for 5 irá aparecer esse desenho na tela
            }
            for (i = 0; i < 20; i++) {
              if (palavra == '\0') // ira separar a frase por letras
              {
                numero_caracter = i; // ira armazenar a letra
                break;
              } else {
                if (palavra == ' ') // caso frase contenha espaço
                {
                  resp = ' '; // vai receber espaço
                  printf("%c", resp);
                } else {
                  if (palavra == chance) // se a frase digitada for igual a tentativa digitada
                  {
                    resp = palavra; // resposta vai armazenar a frase
                  }
                }
              }
              printf("%c ", resp); // ira mostrar a resposta
            }
            printf("\n\n%c %c %c %c %c\n", letra_errada1, letra_errada2, letra_errada3, letra_errada4, letra_errada5); // armazenar as letras erradas, pra não digitar dnv

            switch (cont) // serve para quantidade de vezes que o usuario errar
            // cada vez que errar aparecerá uma msg para informar quantas chances restam
            {
            case 0:
              puts("\n\nVoce pode errar 5 vezes");
              break;
            case 1:
              puts("\n\nVoce pode errar 4 vezes");
              break;
            case 2:
              puts("\n\nVoce pode errar 3 vezes");
              break;
            case 3:
              puts("\n\nVoce pode errar 2 vezes");
              break;
            case 4:
              puts("\n\nVoce pode errar apenas mais uma vez");
              break;
            case 5:
              puts("\n\nUltima chance !!!");
            }
            for (i = 0; i <= numero_caracter; i++) {
              if (chance != ' ') {
                if (resp != '_') {
                  certo++;
                  if (certo == numero_caracter) {
                    cont = 7;
                    break;
                  }
                }
              }
            }
            if (certo != numero_caracter) {
              printf("\n\nDigite uma letra: "); // usuario irá digitar uma letra
              fflush(stdin);
              scanf("%c", & chance);
              chance = tolower(chance); //Converte o caracter em minúsculo
            }
            for (i = 0; i < numero_caracter; i++) // laço que ira verificar na string as letras
            {
              if (chance != palavra) // se tentativa for diferente de frase
              {
                numero++; // incrementa mais 1 no contador n
                if (numero == numero_caracter) // se n for igual nchar
                {
                  cont++; // incrementa mais 1
                  if (cont == 1) //contador for igual a 1
                  {
                    letra_errada1 = chance; // vai armazenar a letra na variavel letra_errada1
                  }
                  if (cont == 2) {
                    letra_errada2 = chance; // vai armazenar a letra na variavel letra_errada2
                  }
                  if (cont == 3) {
                    letra_errada3 = chance; // vai armazenar a letra na variavel letra_errada3
                  }
                  if (cont == 4) {
                    letra_errada4 = chance; // vai armazenar a letra na variavel letra_errada4
                  }
                  if (cont == 5) {
                    letra_errada5 = chance; // vai armazenar a letra na variavel letra_errada5
                  }
                }
              }
            }
            system("cls"); // ira limpar a tela
          }
        default:
          validar = 'n';
        }
        if (cont == 6) // se o contador for igual a 6, o usuario perde
        {
          printf("___________ \n| | \n| _|_\n| O \n| /|\\ \n| / \\ \n| \n| \n| \n\n");
          for (i = 0; i < numero_caracter; i++) // numero de caracteres digitados for menor que o contador
          {
            if (resp == palavra) // caso a palavra digitada for igual
            {
              printf("%c ", resp); //ira apresentar a resposta correta no campo do jogo
            } else {
              printf("(%c) ", palavra); // irá mostrar as letras que estão faltando no campo do jogo
            }
          }
          system("color 4");
          printf("\n\n%c %c %c %c %c %c\n", letra_errada1, letra_errada2, letra_errada3, letra_errada4, letra_errada5, chance); // irá mostrar as letras que foram digitadas
          printf("\n\n\n ----- Voce Perdeu !!! -----\n\n");
          system("PAUSE"); //encerrando a execução
        }
        if (cont == 7) {
          system("color 5");
          printf("------------------------------------------------------\n\t\t ===== YOU WIN =====\t\t\n------------------------------------------------------\n\n\n\n");

        }
        validar = 'S';
        printf("\n==\t\tInsert coins to play again !\t\t== \n\n \n\t\tPressione 'S' para inserir !\n\n\t\t\t\t");
        printf("> ");
        fflush(stdin); // limpar cache
        prosseguir = toupper(getchar()); //Converte caracter minúsculo em maiúsculo
        // verifica se usuario digitar 's' ira repetir o programa
        //caso digite qualquer outro valor ira sair

      }
    } while (prosseguir == 'S'); // final do primeiro laço, caso usuario digite s o jogo irá iniciar novamente
    system("PAUSE");
    return 0;
  }
 
Topo Fundo