Jogo da forca

Publicado por José Mario Silva Rosa Filho 20/11/2008

[ Hits: 24.269 ]

Download Forca.cpp




Jogo da forca desenvolvido em C, com funções de leitura e gravação.

A leitura é feita de forma RANDOM, e possui 1 exemplo de estrutura;

Obs: Desenvolvido para um trabalho de faculdade;

  



Esconder código-fonte

#include <stdio.h>    
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
#include <ctype.h>

#define PAL 100

FILE *doc;

int criou = 0, leu = 0;
char palavras[PAL][25];


void cadastrapal();
void creditos();
void lepal();
void manual();
void menu();
void erase();
void jogo();

void erase(){
     
     int x;
     system("cls");
     printf("Gostaria de Apagar o Arquivo Forca.txt e o Arquivo Creditos.txt?\n");
     printf("1)Sim apagar os dois!\n");
     printf("2)Apagar somente foca.txt!\n");
     printf("3)Apagar somente creditos.txt\n");
     printf("4)Nao apagar!\n");
     scanf("%d",&x);
     
     switch(x){
               
               case 1:{
                       remove("forca.txt");
                       remove("Creditos.txt");
                break;
               }
               case 2:{
                       remove("forca.txt");
                break;
               }
               case 3:{
                       remove("Creditos.txt");
                break;
               }
               case 4: 
                       break;
                       
               default:{
                            printf("Nao existe essa opcao!\n\n");
                            break;
               }
     }
     
     printf("Pressione uma tecla para voltar ao menu!");

getch();  
}

void jogo(){
     
     system("cls");
     
     int i, gera_rand, erros = 8, tamanho, termina = 0, z = 0; 
     bool joga = 1, errou;
     char selecionada[25], verifica[1] = {""}, correta[25], digitadas[25] = {""};
     char letras[57] = {" a b c d e f g h i j k l m n o p q r s t u v w x y z 0"};
     
     srand(time(NULL));
     
     typedef struct Membros_Do_Carinha{     // Exemplo de Uso de estrutura para formaçao do boneco
     
             char cabeca[1];
             char tronco[1];
             char b_p[1];
             char p_b[1];
     }P;
     
     
     for(i=0;i<PAL;i++){
              
              if(strcmp(palavras[i],"") == 0 && i == 0){
                                        
                                        printf("Erro voce nao cadastrou nenhuma palavra!\n");
                                        printf("E seu forca.txt nao consta nenhuma palavra!\n");
                                        joga = 0;
                                        break;
              
              }
              
              else if(strcmp(palavras[i],"") == 0){
                                        
                                        gera_rand = i;
                                        break;                      
              }
                                                                                      
     }
     
     if(joga){ // Onde o jogo começa meu parceroooo!!!
             
             gera_rand = rand() % gera_rand;
             
             strcpy(selecionada,palavras[gera_rand]);
                        
             for(i=0;i<25;i++)
                            selecionada[i] = tolower(selecionada[i]);
             
           //  printf("A palavra seleciona e %s\n",selecionada);  
             
             tamanho = strlen(selecionada);
             
             P ERROS;
             
             ERROS.cabeca[1] = 'O';
             ERROS.tronco[1] = '|';
             ERROS.b_p[1] = '/';
             ERROS.p_b[1] = '\\';
             
             for(i = 0;i < tamanho;i++){
                         if(selecionada[i] == ' ')
                                           correta[i] = ' ';             
                         else
                             correta[i] = '_';
             }
             for(i = 0;i < tamanho;i++)
                         if(selecionada[i] == ' '){
                                                  tamanho++;
                                                  termina++;
                         }
             while(erros){
                          
                 system("cls");
                         
                 printf("\n");                        
                 printf("+--------------------+\n");
                 printf("|                    |\n");
                 printf("|                    %c\n",erros < 8 ? ERROS.cabeca[1] : ' ');
                 printf("|                   %c%c%c\n",erros < 6 ? ERROS.b_p[1] : ' ',erros < 7 ? ERROS.tronco[1] : ' ',erros < 5 ? ERROS.p_b[1] : ' ');
                 printf("|                    %c\n",erros < 4 ? ERROS.tronco[1] : ' ');
                 printf("|                   %c %c\n",erros < 3 ? ERROS.b_p[1] : ' ',erros < 2 ? ERROS.p_b[1] : ' ');
                 printf("|\n");      
                 printf("|\n");
                 printf("| ");
                 
                 for(i = 0;i < tamanho;i++){
                       if(selecionada[i] == verifica[0]){                                       
                               correta[i] = verifica[0];
                               termina++;                                     //Faz o controle ' se termina for igual a tamanho entao a palavras esta correta e acaba o jogo...
                       }
                 }                   
                 
                 for(i = 0;i < tamanho;i++){                                  // Imprime a palavra na tela
                       printf("%c ",correta[i]);
                 }
                 
                 printf("\n\n");
                 
                 for(i = 1;letras[i] != '0';i++){                             // Coloca       -      nas letras digitadas                                   
                                     if(letras[i] == verifica[0]) 
                                                                         letras[i] = '-';
                                     printf("%c",letras[i]);
                                     
                 }
                 
                 if(termina == tamanho){
                            printf("\n\n\n\nAeeeeeeeeeeeeeeee Aeeeeeeeeeeeeeee\n\n");     
                            printf("Uhuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\n");
                            printf("Voce Ganhou!!!\n");
                 break;     
                 }
                 
                 if(erros == 1){
                            printf("\n\n\n\nLoseerrrrrrrr\n\n");     
                            printf("Uuuuuuuuuuuuuuuuuuuuuu\n");
                            printf("Perdedor!!!\n");
                            printf("A palavra selecionada era %s\n",selecionada);
                            printf("Ate minha avo sabia!\n");
                            printf("ALOCOOOOOOO\n\n");
                 break;
                 } 
                 
                 printf("\n\nDigite uma Letra: ");
                 
                 verifica[0] = getch();
                 
                 for(i=0;digitadas[i] != '{FONTE}';i++){           // Verifica se a letra ja foi digitada
                             if(digitadas[i] == verifica[0]){
                                             
                                             printf("\nEssa letra ja foi digitada meu parcero!\n");
                                             printf("Por Gentileza digite outra e tente nao cometer o mesmo erro 2 vezes.\n");
                                             verifica[0] = getch();
                                             
                                                         if(verifica[0] == digitadas[i]){  // Se caso o cara volte a digitar a mesma letra que a anterior ele diminui 1 em i e manda continuar o FOR
                                                                        verifica[0] = getch();
                                                                        i--;
                                                                        continue;
                                                                        }
                                             break;
                             }                          
                 }
      
                 digitadas[z] = verifica[0];
                 z++;
                 errou = 1;     
                 for(i = 0;i < tamanho;i++){                            // Verifica se o cara digito uma letra que nao tem na palavra
                       if(selecionada[i] == verifica[0]){               // Se nao tiver letra na palavra incrementa um erro                       
                               correta[i] = verifica[0];
                               errou = 0;
                       }
                 }
                 
                 if(errou) 
                           erros--;
         }
     }
       
getch();
}

void manual(){
     
     system("cls");
     printf("Este e o manual do jogo da forca por Jos%c Mario Silva Rosa Filho.\n",130);
     printf("                                                                                ");
     printf("Na segunda opcao do menu criar lista de palavras, ele ira gerar um txt\n");
     printf("Chamado \"Forca.txt\" nesse arquivo se concentra um banco de palavras\n");
     printf("O qual suportara um maximo de 100 palavras para leitura, entao se por\n");
     printf("Ventura o usuario criar mais de 100 palavras elas nao serao utilizadas.\n");
     printf("O usuario podera cadastrar 100 palavras sem consultar o banco de palavras.\n");
     printf("                                                                                ");
     printf("*Importante: Nao existe a necessidade de colocar 100 palavras para começar\n");
     printf("a jogar;");
     printf("\n\n\n\n");
     printf("Pressione uma tecla para voltar ao menu!");

getch();
}

void cadastrapal(){              // FUNCAO PARA CADASTRAR PALAVRAS
     int i,tamanho;
     
     if((doc = fopen("forca.txt","a+")) == NULL){
    
            printf("Erro ao Abrir o Arquivo \"FORCA.txt\".");
     exit(0);
     };
     
     for(i=0;i<PAL;i++){
            
            fflush(stdin);
            gets(palavras[i]);
            
            if(strcmp(palavras[i],"") == 0)
                                                   break;
                                                   
            fwrite(palavras[i],sizeof(palavras[25]),1,doc);

     }
     fclose(doc);
     
     criou = 1;
}

void lepal(){                                                // FUNCAO PARA LER PALAVRAS

     int i = 0;
     char nome[] = {"forca.txt"};
     
     if((doc = fopen(nome,"r")) == NULL){
    
            printf("Erro ao Abrir o Arquivo \"FORCA.txt\".");
            getch();
     exit(0);
     };
    
     while(!feof(doc)){
     
             fread(palavras[i],sizeof(palavras[25]),1,doc);

     i++;
     }
     fclose(doc);
     
     leu = 1;
}


void menu(){
    
    int x, aceita;
     
    system("cls");
    
    do{
       system("cls");
       printf("Escolha uma das Opcoes para execucao do programa.\n");   
       printf("+------------------------------------------------------------------------------+");
       printf("|                          Bem Vindo ao Jogo Da Forca                          |");
       printf("|                                                                              |");
       printf("|1)Ler Manual Do Usuario.                                                      |");
       printf("|2)Criar Lista De Palavras.                                                    |");
       printf("|3)Apagar Arquivo.                                                             |");
       printf("|4)>>>>>>>>>>>>>Jogar.<<<<<<<<<<<<<<<<                                         |");
       printf("|5)Mostrar Creditos e Encerrar o Programa.                                     |");
       printf("|                                             Por: Jos%c Mario Silva Rosa Filho |",130);
       printf("+------------------------------------------------------------------------------+\n");
       scanf("%d",&x);
    }
    while(x < 1 || x > 5);
    
    switch(x){
              
          case 1:{
               manual();
               menu();
          break;     
          }
          case 2:{
               cadastrapal();
               menu();
          break;
          }
          case 3:{
               erase();
               menu();
          break;
          }
          case 4:{
               lepal();
               
               if(leu || criou)
                                jogo();
                                
               else{
                   printf("Voce nao criou palavras e seu txt nao possui nenhuma!\n");
                   printf("Selecione a opcao 2 do menu!\n");
                   getch();
              }
              
               menu();
          break;
          }
          case 5:{
               creditos();
          break;
          }     
    
    }
}

void creditos(/*int texto*/){ //Nao lembro Motivo pelo qual coloquei esse parãmetro aqui
        
        system("cls");

        if((doc = fopen("Creditos.txt","w")) == NULL){
              printf("Erro ao Abrir o Arquivo \"Creditos.txt\".");
         exit(0);
        };
        
        printf("+-----------------------------------------------------------+\n");
        printf("|Programa Desenvolvido Por:                                 |\n");
        printf("|                           Jos%c Mario Silva Rosa Filho     |\n",130);
        printf("|\"Todo homem procura o sentido de sua exist%cncia, mas nem   |\n",136);
        printf("|todos encontram o caminho.\" Jos%c Mario                     |\n",130);
        printf("|                           zemariosrf@hotmail.com          |\n");
        printf("|                           06/06/2008 02:15                |\n");
        printf("+-----------------------------------------------------------+\n\n\n");
        fprintf(doc,"+-----------------------------------------------------------+\n");
        fprintf(doc,"|Programa Desenvolvido Por:                                 |\n");
        fprintf(doc,"|                           Jose Mario Silva Rosa Filho     |\n",130);
        fprintf(doc,"|\"Todo homem procura o sentido de sua existencia, mas nem   |\n",136);
        fprintf(doc,"|todos encontram o caminho.\" Jose Mario                     |\n",130);
        fprintf(doc,"|                           zemariosrf@hotmail.com          |\n");
        fprintf(doc,"|                           06/06/2008 02:15                |\n");
        fprintf(doc,"+-----------------------------------------------------------+\n\n\n");
        printf("Pressione uma tecla para sair!");

getch();
} 



int main(){
    
    if((doc = fopen("forca.txt","a+")) == NULL){
            printf("Erro ao Abrir o Arquivo \"FORCA.txt\".");
     exit(0);
     }; 
    fclose(doc); 
    menu();

return 0;
}

Scripts recomendados

Lista simplesmente encadeada C

Função boa para ler string em C

Menu com teclas direcionais

ArkaPoing (arkanoid+pingpoing hehe)

Função que converte números decimais em binários


  

Comentários
[1] Comentário enviado por Marco Carvalho em 25/11/2008 - 01:29h

O único problema é que esse código não é ANSI C, que não usa a biblioteca conio.h, portanto não compila com gcc

[2] Comentário enviado por zemariosrf em 25/11/2008 - 18:33h

Basta substituir, o getch() por alguma função como scanf não importando os parâmetros passados para leitura, pq a funcionalidade seria a mesma!
Eu esqueci de colocar que eu Usei o Dev-Cpp pra fazê-lo!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts