Skip to content

Instantly share code, notes, and snippets.

@mauricioaniche
Created January 19, 2015 21:50
Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save mauricioaniche/5b0c7c543de0ca2d4e08 to your computer and use it in GitHub Desktop.
Save mauricioaniche/5b0c7c543de0ca2d4e08 to your computer and use it in GitHub Desktop.
Jogo de Forca - Completo
#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();
}
#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();
@JosiasSalermo
Copy link

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?

@GabrielVSMachado
Copy link

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