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