Created
January 19, 2015 21:50
-
-
Save mauricioaniche/5b0c7c543de0ca2d4e08 to your computer and use it in GitHub Desktop.
Jogo de Forca - Completo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <time.h> | |
#include "forca.h" | |
char palavrasecreta[TAMANHO_PALAVRA]; | |
char chutes[26]; | |
int chutesdados = 0; | |
int letraexiste(char letra) { | |
for(int j = 0; j < strlen(palavrasecreta); j++) { | |
if(letra == palavrasecreta[j]) { | |
return 1; | |
} | |
} | |
return 0; | |
} | |
int chuteserrados() { | |
int erros = 0; | |
for(int i = 0; i < chutesdados; i++) { | |
if(!letraexiste(chutes[i])) { | |
erros++; | |
} | |
} | |
return erros; | |
} | |
int enforcou() { | |
return chuteserrados() >= 5; | |
} | |
int ganhou() { | |
for(int i = 0; i < strlen(palavrasecreta); i++) { | |
if(!jachutou(palavrasecreta[i])) { | |
return 0; | |
} | |
} | |
return 1; | |
} | |
void abertura() { | |
printf("/****************/\n"); | |
printf("/ Jogo de Forca */\n"); | |
printf("/****************/\n\n"); | |
} | |
void chuta() { | |
char chute; | |
printf("Qual letra? "); | |
scanf(" %c", &chute); | |
if(letraexiste(chute)) { | |
printf("Você acertou: a palavra tem a letra %c\n\n", chute); | |
} else { | |
printf("\nVocê errou: a palavra NÃO tem a letra %c\n\n", chute); | |
} | |
chutes[chutesdados] = chute; | |
chutesdados++; | |
} | |
int jachutou(char letra) { | |
int achou = 0; | |
for(int j = 0; j < chutesdados; j++) { | |
if(chutes[j] == letra) { | |
achou = 1; | |
break; | |
} | |
} | |
return achou; | |
} | |
void desenhaforca() { | |
int erros = chuteserrados(); | |
printf(" _______ \n"); | |
printf(" |/ | \n"); | |
printf(" | %c%c%c \n", (erros>=1?'(':' '), (erros>=1?'_':' '), (erros>=1?')':' ')); | |
printf(" | %c%c%c \n", (erros>=3?'\\':' '), (erros>=2?'|':' '), (erros>=3?'/': ' ')); | |
printf(" | %c \n", (erros>=2?'|':' ')); | |
printf(" | %c %c \n", (erros>=4?'/':' '), (erros>=4?'\\':' ')); | |
printf(" | \n"); | |
printf("_|___ \n"); | |
printf("\n\n"); | |
for(int i = 0; i < strlen(palavrasecreta); i++) { | |
if(jachutou(palavrasecreta[i])) { | |
printf("%c ", palavrasecreta[i]); | |
} else { | |
printf("_ "); | |
} | |
} | |
printf("\n"); | |
} | |
void escolhepalavra() { | |
FILE* f; | |
f = fopen("palavras.txt", "r"); | |
if(f == 0) { | |
printf("Banco de dados de palavras não disponível\n\n"); | |
exit(1); | |
} | |
int qtddepalavras; | |
fscanf(f, "%d", &qtddepalavras); | |
srand(time(0)); | |
int randomico = rand() % qtddepalavras; | |
for(int i = 0; i <= randomico; i++) { | |
fscanf(f, "%s", palavrasecreta); | |
} | |
fclose(f); | |
} | |
void adicionapalavra() { | |
char quer; | |
printf("Você deseja adicionar uma nova palavra no jogo (S/N)?"); | |
scanf(" %c", &quer); | |
if(quer == 'S') { | |
char novapalavra[TAMANHO_PALAVRA]; | |
printf("Digite a nova palavra, em letras maiúsculas: "); | |
scanf("%s", novapalavra); | |
FILE* f; | |
f = fopen("palavras.txt", "r+"); | |
if(f == 0) { | |
printf("Banco de dados de palavras não disponível\n\n"); | |
exit(1); | |
} | |
int qtd; | |
fscanf(f, "%d", &qtd); | |
qtd++; | |
fseek(f, 0, SEEK_SET); | |
fprintf(f, "%d", qtd); | |
fseek(f, 0, SEEK_END); | |
fprintf(f, "\n%s", novapalavra); | |
fclose(f); | |
} | |
} | |
int main() { | |
abertura(); | |
escolhepalavra(); | |
do { | |
desenhaforca(); | |
chuta(); | |
} while (!ganhou() && !enforcou()); | |
if(ganhou()) { | |
printf("\nParabéns, você ganhou!\n\n"); | |
printf(" ___________ \n"); | |
printf(" '._==_==_=_.' \n"); | |
printf(" .-\\: /-. \n"); | |
printf(" | (|:. |) | \n"); | |
printf(" '-|:. |-' \n"); | |
printf(" \\::. / \n"); | |
printf(" '::. .' \n"); | |
printf(" ) ( \n"); | |
printf(" _.' '._ \n"); | |
printf(" '-------' \n\n"); | |
} else { | |
printf("\nPuxa, você foi enforcado!\n"); | |
printf("A palavra era **%s**\n\n", palavrasecreta); | |
printf(" _______________ \n"); | |
printf(" / \\ \n"); | |
printf(" / \\ \n"); | |
printf("// \\/\\ \n"); | |
printf("\\| XXXX XXXX | / \n"); | |
printf(" | XXXX XXXX |/ \n"); | |
printf(" | XXX XXX | \n"); | |
printf(" | | \n"); | |
printf(" \\__ XXX __/ \n"); | |
printf(" |\\ XXX /| \n"); | |
printf(" | | | | \n"); | |
printf(" | I I I I I I I | \n"); | |
printf(" | I I I I I I | \n"); | |
printf(" \\_ _/ \n"); | |
printf(" \\_ _/ \n"); | |
printf(" \\_______/ \n"); | |
} | |
adicionapalavra(); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define TAMANHO_PALAVRA 20 | |
int letraexiste(char letra); | |
int chuteserrados(); | |
int enforcou(); | |
void abertura(); | |
void chuta(); | |
int jachutou(char letra); | |
int ganhou(); | |
void desenhaforca(); | |
void escolhepalavra(); | |
void adicionapalavra(); |
Boa noite, eu fiz o fork do jogo, só que quando roda, diz "Banco de dados de palavras não disponível". Como posso resolver isso?
Deixe o arquivo "palavras".txt no mesmo diretório do jogo compilado.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Boa noite, eu fiz o fork do jogo, só que quando roda, diz "Banco de dados de palavras não disponível". Como posso resolver isso?