Jogo da forca
Publicado por José Mario Silva Rosa Filho 20/11/2008
[ Hits: 24.688 ]
Jogo da forca desenvolvido em C, com funções de leitura e gravação.
A leitura é feita de forma RANDOM, e possui 1 exemplo de estrutura;
Obs: Desenvolvido para um trabalho de faculdade;
#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;
}
Sequência fibonacci com 35 linhas e for
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Assisti Avatar 3: Fogo e Cinzas (4)
Conky, alerta de temperatura alta (11)









