Jogo da forca
Publicado por José Mario Silva Rosa Filho 20/11/2008
[ Hits: 24.584 ]
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;
}
Jogo da Velha contra o Computador.
Passando parâmetros com getopt
Programa para cálculo vetorial
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)
Alternativas ao Multilogin para gerenciamento de múltiplas contas/prof... (0)









