Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Jogo da Forca

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    C / C++ Jogo da Forca

    Estou disponibilizando o código de um jogo da forca que eu fiz, ainda possui alguns bugs mas pode servir como objeto de estudo.

    O jogo foi feito para rodar na plataforma windows dentro do prompt de comando.

    Quem estiver interessado, o código vai logo abaixo.


    Para compilar:
    Código:
    gcc -std=c99 -o forca forca.c
    Código:
    /*
    * ___________________________
    * |          JOGO DA FORCA             |
    * |                                              |
    * |     CRIADO POR Th3_K1R4        |
    * | TESTADO NO S.O.WINDOWS 7 |
    * ___________________________
    */
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <windows.h>
    
    void forcaErro7()
    {
    	printf("\n-----------\n");
    	printf("|     |\n");
    	printf("|    ___\n");
    	printf("|   (x x)\n");
    	printf("|     '\n");
    	printf("|    /|\\\n");
    	printf("|   / | \\\n");
    	printf("|     |\n");
    	printf("|    / \\\n");
    	printf("|   /   \\\n");
    	printf("|\n");
    	printf("--------------\n");
    }
    
    void forcaErro6()
    {
    	printf("\n-----------\n");
    	printf("|     |\n");
    	printf("|    ___\n");
    	printf("|   (. .)\n");
    	printf("|     '\n");
    	printf("|    /|\\\n");
    	printf("|   / | \\\n");
    	printf("|     |\n");
    	printf("|    /  \n");
    	printf("|   /    \n");
    	printf("|\n");
    	printf("--------------\n");
    }
    
    void forcaErro5()
    {
    	printf("\n-----------\n");
    	printf("|     |\n");
    	printf("|    ___\n");
    	printf("|   (. .)\n");
    	printf("|     '\n");
    	printf("|    /|\\\n");
    	printf("|   / | \\\n");
    	printf("|     |\n");
    	printf("|       \n");
    	printf("|        \n");
    	printf("|\n");
    	printf("--------------\n");
    }
    
    void forcaErro4()
    {
    	printf("\n-----------\n");
    	printf("|     |\n");
    	printf("|    ___\n");
    	printf("|   (. .)\n");
    	printf("|     '\n");
    	printf("|    /| \n");
    	printf("|   / |  \n");
    	printf("|     |\n");
    	printf("|       \n");
    	printf("|        \n");
    	printf("|\n");
    	printf("--------------\n");
    }
    
    void forcaErro3()
    {
    	printf("\n-----------\n");
    	printf("|     |\n");
    	printf("|    ___\n");
    	printf("|   (. .)\n");
    	printf("|     '\n");
    	printf("|     | \n");
    	printf("|     |  \n");
    	printf("|     |\n");
    	printf("|       \n");
    	printf("|        \n");
    	printf("|\n");
    	printf("--------------\n");
    }
    
    void forcaErro2()
    {
    	printf("\n-----------\n");
    	printf("|     |\n");
    	printf("|    ___\n");
    	printf("|   (. .)\n");
    	printf("|     '\n");
    	printf("|       \n");
    	printf("|        \n");
    	printf("|      \n");
    	printf("|       \n");
    	printf("|        \n");
    	printf("|\n");
    	printf("--------------\n");
    }
    
    void forcaErro1()
    {
    	printf("\n-----------\n");
    	printf("|     |\n");
    	printf("|       \n");
    	printf("|        \n");
    	printf("|      \n");
    	printf("|       \n");
    	printf("|        \n");
    	printf("|      \n");
    	printf("|       \n");
    	printf("|        \n");
    	printf("|\n");
    	printf("--------------\n");
    }
    
    void cabecalho(int *Erro)
    {
    	printf("*** | JOGO DA FORCA | ***\n\n");
    	switch(*Erro)
    	{
    		case 1: forcaErro1();
    				break;
    		case 2: forcaErro2();
    				break;
    		case 3: forcaErro3();
    				break;
    		case 4: forcaErro4();
    				break;
    		case 5: forcaErro5();
    				break;
    		case 6: forcaErro6();
    				break;
    		case 7: forcaErro7();
    				break;
    	}
    }
    
    int main(int argc, char *argv[])
    {
    	FILE *palavras;
    	//Verifica se o arquivo com as palavras existe.
    	if(argc > 2 || argc < 2)
    	{
    		printf("\nSintaxe inv%clida!\n\n", 160);
    		printf("Para ver a lista de comandos do jogo, digite: forca --comandos\n");
    		printf("Para ler as instru%c%ces do jogo, digite: forca --instrucoes\n", 135, 228);
    		return 0;
    	}
    	else
    	{
    		if(strcmp(argv[1], "--comandos") == 0)
    		{
    			printf("\n************ COMANDOS ************\n");
    			printf("\nJOGAR: forca ArquivoDePalavras.txt\n");
    			printf("LISTA DE COMANDOS: forca --comandos\n");
    			printf("INSTRU%c%cES: forca --instrucoes\n", 128, 229);
    			return 0;
    		}
    		else if(strcmp(argv[1], "--instrucoes") == 0)
    		{
    			printf("\nINSTRU%c%cES\n\n", 128, 229);
    			printf("Para abrir o jogo, digite a palavra 'forca' seguido do arquivo de palavras.\n");
    			printf("O arquivo de palavras cont%cm todas as palavras que ser%co utilizadas no jogo.\n", 
    			130, 198);
    			printf("Ex: forca palavras.txt\n\n");
    			printf("Apos entrar no jogo com o arquivo de palavras, o jogo inicia com a primeira\n");
    			printf("palavra da lista do arquivo e segue a ordem ate a ultima palavra.\n\n");
    			printf("Para dar um palpite, digite uma letra e tecle Enter. Se a letra digitada\nexistir na");
    			printf(" palavra, a mesma ser* adicionada e o jogo ira pedir a proxima\nletra. O mesmo"); 
    			printf(" passo deve ser"); 
    			printf(" seguido ate o fim da palavra ou ate o numero de\nerros atingir o limite.\n\n");
    			printf("Quando o numero de erros atingir o limite, o jogador tem a opcao de continuar\n");
    			printf("jogando ou sair do jogo, bastando teclar uma das letras, 'C' ou 'S'.\n\n");
    			printf("Se o jogador teclar 'S', o jogo e encerrado.\n");
    			printf("Se o jogador teclar 'C', o jogo sera reiniciado com a proxima palavra da lista.\n\n");
    			return 0;
    		}
    		else
    		{
    			palavras = fopen(argv[1], "r");
    		}
    	}
    	//Verifica se o arquivo passado no parâmetro existe no diretório.
    	if(palavras == NULL)
    	{
    		printf("\nO arquivo %s nao existe!\n", argv[1]);
    		return 0;
    	}
    	
    	char palavra[100], jogo[100], letra;
    	int cont = 1;
    	int numPalavra = 1, palavraCompletada = 0;
    	//Armazena cada linha do arquivo no vetor palavra.
    	while(fgets(palavra, 100, palavras) != NULL)
    	{
    		int contErro = 1, boolPalavra = 0;
    		int fimPalavraAtual = 0;
    		int contLetras = 0;
    		int verificaUnderline = 0;
    		//Conta a quantidade de letras da linha atual.
    		for(int i = 0; i< 100; i++)
    		{
    			if(palavra[i] == '\n')
    			{
    				break;
    			}
    			else
    			{
    				contLetras++;
    			}
    		}
    		system("cls");
    		//Cria o jogo com a quantidade de letras da palavra da linha atual do arquivo.
    		for(int i = 0; i < contLetras; i++)				
    		{
    			jogo[i] = '_';
    		}
    		//Roda enquanto a palavra atual não for descoberta.
    		while(fimPalavraAtual == 0)
    		{	
    			system("cls");
    			cabecalho(&contErro);
    			printf("   ERROS:  %d\n\n", contErro-1);
    			printf("   PALAVRA %d\n\n", numPalavra);
    			//Imprime o jogo.
    			for(int i = 0; i < contLetras; i++)				
    			{
    				printf("%c ", jogo[i]);
    			}
    			//Pede para o usuário digitar uma letra.
    			printf("\n\nDigite uma letra: ");
    			scanf("%c", &letra);
    			fflush(stdin); //Limpa o buffer do teclado.
    			//Verifica se a letra digitada existe no jogo. Se existir, coloca ela no jogo.
    			for(int i = 0; i < contLetras; i++)
    			{
    				//Se a letra digitada já foi inserida antes, pede para o jogador digitar outra letra.
    				while(jogo[i] == letra)
    				{
    					system("cls");
    					cabecalho(&contErro);
    					printf("   ERROS:  %d\n\n", contErro-1);
    					printf("   PALAVRA %d\n\n", numPalavra);
    					//Imprime o jogo.
    					for(int i = 0; i < contLetras; i++)				
    					{
    						printf("%c ", jogo[i]);
    					}
    					printf("      A letra '%c' ja foi utilizada!", letra);
    					printf("\n\nDigite uma letra: ");
    					scanf("%c", &letra);
    					fflush(stdin);
    				}
    				if(palavra[i] == letra)
    				{
    					jogo[i] = letra;
    					boolPalavra = 1;
    				}
    			}
    			//Verifica se a letra inserida não existe na palavra.
    			if(boolPalavra == 0)
    			{
    				contErro++;
    			}
    			
    			printf("\n");
    			//Verifica se a palavra atual ainda contém underline.
    			for(int i = 0; i < contLetras; i++)
    			{
    				if(jogo[i] == '_')
    				{
    					verificaUnderline = 1;
    				}
    			}
    			
    			//Quando o jogador errar 6 vezes.
    			if(contErro == 7)
    			{
    				char opc;
    				system("cls");
    				cabecalho(&contErro);
    				printf("   ERROS:  6\n\n");
    				printf(" VOCE PERDEU!\n\n");
    				printf("Palavra correta: ");
    				for(int i = 0; i < contLetras; i++)
    				{
    					printf("%c ", palavra[i]);
    				}
    				printf("\n\nDigite 'S' para sair do jogo ou 'C' para continuar jogando: ");
    				opc = getch();
    				contErro = 1;
    				fimPalavraAtual = 1;
    				verificaUnderline = 0;
    				if(opc == 'S' || opc == 's')
    				{
    					return 0;
    				}
    			}
    			//Verifica se a palavra atual terminou.
    			if(verificaUnderline == 1)
    			{
    				fimPalavraAtual = 0;
    			}
    			else
    			{
    				if(contErro < 7)
    				{
    					//Mensagem de palavra completada.
    					for(int tempo = 5; tempo >= 1; tempo--) 
    					{
    						system("cls");
    						cabecalho(&contErro);
    						printf("   ERROS:  %d\n\n", contErro-1);
    						printf("   PALAVRA %d\n\n", numPalavra);
    						//Imprime o jogo.
    						for(int i = 0; i < contLetras; i++)				
    						{
    							printf("%c ", palavra[i]);
    						}
    						printf("\n\nJOGADA ENCERRADA! PROXIMA PALAVRA EM %d", tempo);
    						Sleep(1000);
    					}
    				}
    				fimPalavraAtual = 1;
    				contErro = 0;
    			}
    			boolPalavra = 0;
    			verificaUnderline = 0;
    		}
    		numPalavra++;
    		printf("\n");
    		cont++;
    	}
    	//Fecha o arquivo com as palavras.
    	fclose(palavras);
    	return 0;
    }
    This business is binary. You're a one or a zero. Alive or Dead.
    Similar Threads
X
Working...
X