Jogo da forca em C


Autor/fonte: José Mario Silva Rosa Filho
E-mail/Url: http://www.vivaolinux.com.br/script/Jogo-da-forca-2
Tags: [ jogo da forca ]



Digg del.icio.us

Jogo da forca desenvolvido em C, com funções de leitura e gravação. A leitura é feita de forma random e possui um exemplo de estrutura.

Script:

#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;
}




Enviado por xKuRt em 22/11/2008 às 18:18


Avaliação

Esta publicação ainda não foi avaliada!


Avaliar:


A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.



Comentários

Este artigo ainda não foi comentado ou o(s) comentário(s) que foi(ram) enviado(s) a ele ainda não foi(ram) publicado(s).


Envio de comentário:




  

Segunda, 20 de Outubro de 2014




Leitura recomendada

Mobile Game Jam: Vol. 1

Top 5 membros

Últimos membros online

Últimos membros cadastrados



Capa do livro
Linguagem de Programação COBOL Para Mainframe


Capa do livro
Certificação Linux LPI: Rápido e Prático - Guia de Referência


Capa do livro
Regras Do Jogo: Fundamentos Do Design De Jogos - Volume 1





Hostnet

IMD