Buscar

Jogo da Velha e Jogo da Forca em C

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Jogo da Forca/Jogo da Forca.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define NUMERO_DE_PALAVRAS 100
int Global=0,count=0;
int isLetter(char letra){ //tabela ASCII as letras estao entre 65 e 90(maiúsculas) e 97 e 122(minúsculas)
	if(!((letra>=65 && letra <=90)||(letra>=97 && letra <= 122))){
		printf("\n\t\t\t\t\t\tNao e uma letra!\n");
		return 0;
	}
	return 1;
}
int acharLetra(char *palavra, char* rest, char letra,int *a){ //usa recursividade //vai iniciar com null para dizer que nao existe
	char *resto = rest;
	if(!rest){
		if((resto = strchr(palavra, letra)) == NULL) return 0; //padrão do C, procura a primeira, caso seja null, retorna 0 e aparecerá a cabeça (um erro)
		else{
			a[Global++] = resto - palavra +1; //descobre a posição da letra //armazena no a a posição que a letra está
			acharLetra(palavra, resto+1,letra,a); // e chama de novo a funcao pra ver se tem outras instancias no resto da palavra
		}
	}else{
		if((resto = strchr(resto, letra)) == NULL) return 0; //nao vai ter resto, vai procurar na palavra, se tiver resto procura no resto
		else{
			a[Global++] = resto - palavra +1;
			 acharLetra(palavra, resto+1,letra,a);
		}
	}
	return 1;
}
int atualizar(int* a, char letra,int tamanhoPalavra, char *palavra, int erros, char* tent){ //int a é onde as letras que acertou está
	system("cls");
	switch(erros){
			case 1:
			printf("\n----------\n\t |\n\t O\n\n\n");
			printf("\n\t\t\t\t\t\tVoce tem mais 5 chances!\n");
			break;
		case 2:
			printf("\n----------\n\t |\n\t O\n\t |\n\n");
			printf("\n\t\t\t\t\t\tVoce tem mais 4 chances!\n");
			break;
		case 3:
			printf("\n----------\n\t |\n\t O\n\t/|\n\n");
			printf("\n\t\t\t\t\t\tVoce tem mais 3 chances!\n");
			break;
		case 4:
			printf("\n----------\n\t |\n\t O\n\t/|\\\n\n");
			printf("\n\t\t\t\t\t\tVoce tem mais 2 chances!\n");
			break;
		case 5:
			printf("\n----------\n\t |\n\t O\n\t/|\\\n\t/ \n");
			printf("\n\t\t\t\t\t\tVoce tem so 1 chance! \n");
			break;
		case 6:
			printf("\n----------\n\t |\n\t O\n\t/|\\\n\t/ \\\n");
			printf("\n\t\t\t\t\t\tFoi sua ultima chance!\n");
			break;
		default:
			printf("\n----------\n\t |\n\n\n\n");
			break;
	}
	int i,j, print=0; //saber onde colocar as letras que acertou
	for(i=0; i<tamanhoPalavra; ++i){ //o tamanho da palavra vai ser descoberto na função abaixo
		print = 0; //print vai servir como booleano
		for(j =0; j<tamanhoPalavra; j++){
			if(a[j]-1 == i){ //o primeiro for vai percorrer os traços e o segundo
				printf(" %c",palavra[i] ); //vai ver se precisa ser substituido por uma letra
				print = 1;
				break;
			}
		}
		if(!print){ //se o print for 0, vai imprimir _ senao vai imprimir a letra
			printf(" _");
		}
	}
	printf("\n"); //letras que tentei
	printf("\n\t\t\t\t\t\tTentativas: ");
	for(i =0; i<count; ++i) printf("%c%c", tent[i], i==count-1?'\0':','); //laço de formatação das tentativas
} //numero de tentativas
 //se for o ultimo caractere eu imprimo nada ao
void jogo(){ //inves da virgula
 	while(1){ //loop infinito
 system("cls");
 FILE *arquivos = fopen("palavras.txt", "r");
 int i, erros=0;
	char palavras[NUMERO_DE_PALAVRAS][20];
	for (i = 0; i < NUMERO_DE_PALAVRAS ; i++)
	 {
	 fgets(palavras[i], 20, arquivos);
	 }
	free(arquivos);
	srand (time(NULL));
	int index = rand()%NUMERO_DE_PALAVRAS;
	char *palavra = palavras[index];
	int tamanhoPalavra;
	for(tamanhoPalavra = 0; tamanhoPalavra<20; tamanhoPalavra++){ //descobrir quantas letras tem a palavra
		if(palavra[tamanhoPalavra] =='\n'||palavra[tamanhoPalavra] == '\0')
			break;
	}
	int *a = malloc(sizeof(int*)*tamanhoPalavra); //descobriu o tamanho da palavra em cima
	char *tent = malloc(sizeof(int*)*(tamanhoPalavra+6));//logo em baixo vai ser usado o ciclo ate o tamanho da palavra
	printf("\n----------\n\t |\n\n\n\n");
	for(i=0; i<tamanhoPalavra; ++i) //criar as lacunas
		printf(" _");
	printf("\n");
	char letra;
	while(1){ //loop infinito
		do{
			fflush(stdin);
			printf("\n\t\t\t\t\t\tDigite uma letra: ");
			letra = getchar();
			int c;
		while ( (c = getchar()) != '\n' && c != EOF ) { } //limpar o buffer por enquanto nao encontra uma quebra de linha
		}while(!isLetter(letra)); //ou acabar o file
		int g; //PADRÃO C99 //count é quantas letras foram encontradas
		for(g=0;g<count; ++g){ //pra ver se ja usou a letra alguma vez //procura se é uma letra repetida
			if(tent[g] == letra) break; //ele vai quebrar aqui se achar a primeira letra = tent
		}
		if(g == count){//senao, se continuar o loop, o g vai chedgar em count //count conta quantas letras foram encontradas
			tent[count++] = letra;//nao tem uma letra repetida // e o array armazena onde foi encontrado a letra
			if(!acharLetra(palavra,NULL,letra,a)){//agora que irá ver se aertou ou nao
				++erros;
				printf("\t\t\t\t\t\tErrou! Tente novamente\n\n");
				system("pause");
				atualizar(a, letra, tamanhoPalavra, palavra,erros, tent);
			}else atualizar(a, letra, tamanhoPalavra, palavra,erros,tent);
			if(erros >=6 ){
				atualizar(a, letra, tamanhoPalavra, palavra,erros,tent);
				printf("\t\t\t\t\t\t\n Voce perdeu!\n");
				break;
			}
			if(Global>=tamanhoPalavra){
				printf("\n\t\t\t\t\t\t Voce ganhou!\n");
				break;
			}
		}
	}
	free(a);
	free(tent);
	Global =0;
	erros = 0;
	count = 0;
	return;
	}
}
int main(){
 printf("\t\t\t\t\t\tBEM VINDO AO JOGO DA FORCA!\n\t\t\t\t\t\t\tversao beta\n\t\t\t\t\t\tEngenharia de Computacao 2015.2\n");
 printf("\n\n\n\n\t\t\t\tDesenvolvedores: Tallys Prado, Jose Paulo e Marcio Anderson\n");
 system("pause");
	while(1){
		jogo();
		int x;
		printf("\n\n\t\t\t\t\t\tJogar Novamente? 1- Sim | 2- Nao\n");
		scanf("%d", &x);
		if(x!=1) break;
	}
	system("pause");
 return 0;
}
Jogo da Forca/Jogo da Forca.exe
Jogo da Forca/Jogo da Forca.o
Jogo da Forca/palavras.txt
caminhao
porta
aviao
computador
celular
carro
ventilador
programacao
janela
geladeira
cadeira
vento
azul
hipopotamo
rinoceronte
riacho
guarda
sobral
brasil
alemanha
canada
carregador
caderno
lapis
neve
chuva
facebook
whatsapp
planeta
terra
novembro
garrafa
cachorro
gato
girafa
rinoceronte
dinossauro
macaco
teclado
violao
bateria
violino
violoncelo
guitarra
rosa
flor
japao
equador
australia
russia
acopiara
fortaleza
itapaje
quixada
iguatu
flauta
nirvana
oficina
comercio
empresario
engenheiro
medico
dentista
escritor
ator
autor
carnaval
natal
recife
piaui
para
paracuru
aranha
etiopia
haiti
italia
franca
europa
portugal
suecia
rondonia
maceio
niteroi
russas
rato
matematica
historia
geografia
ciencias
fisica
biologia
sociologia
filosofia
informatica
quimica
computacao
artes
redacao
portugues
ingles
Jogo da Velha/Jogo da Velha.c
#include<stdio.h>
#include<stdlib.h>
#include <ctype.h>
int main(){
char posicao[10] = {' ' ,'1', '2', '3', '4', '5', '6', '7', '8','9'}; // declarado vetor posição para representar o valores de 1 a 9 sendo de tam 10
//char vetor_vazio[9]= {' ',' ',' ',' ',' ',' ',' ',' ',' ' }; // onde a posição 0 é vazia assim cada numero corresponde sua posição no vetor "real"
char x[15], o[15]; //para capturar nomes pros jogadores
int jogada= 0; // contrala o numero de jogadas e vez dos jogadores
int posicao_escolhida; // para capturar uma posição do usuário
int resp= 1;
int vencedor=0;
 //capturando
o nome dos jogadores
 printf("DIGITE UM NOME PARA X: ");
 scanf("%s",&x);
 printf("DIGITE UM NOME PARA O: ");
 scanf("%s",&o);
 system ("cls");
 //começando o jogo
while (resp==1){
 do{
 fflush(stdin);
 system("cls");
 if(jogada % 2 == 0) // De acordo com o numero da jogada é determinada a vez se Impar = jogador 1, Par = jogador 2.
 {
 printf("\n Jogador 1: %s (X) \n",&x); // X sempre começa
 }
 else {
 printf("\n Jogador 2: %s (O) \n",&o );
 } //imprimindo tabuleiro
 printf ("\n %c | %c | %c ", posicao[1], posicao[2], posicao[3]);
 printf ("\n---|---|---");
 printf ("\n %c | %c | %c ", posicao[4], posicao[5], posicao[6]);
 printf ("\n---|---|---");
 printf ("\n %c | %c | %c \n", posicao[7], posicao[8], posicao[9]);
 printf ("\nEntre com a posicao da jogada : ");
 scanf ("%i", &posicao_escolhida);
 system("cls");
 if(posicao_escolhida < 1 || posicao_escolhida > 9 ){ //testa se a posição digitada é válida
 printf("Posicao invalida, digite um numero entre 1 e 9 de acordo com tabuleiro\n");
 system("pause");
 system ("cls");
 continue;
 }
 if(posicao[posicao_escolhida] == 'X' || posicao[posicao_escolhida ]== 'O'){//testa se a posição já foi ocupada
 printf("posicao ocupada, faca outra escolha\n");
 system("pause");
 system ("cls");
 continue;
 }
 //fazendo a jogada aparecer de acordo com o jogador, e o vetor posição é substituido
 posicao[posicao_escolhida] = 'X';
 if(jogada %2 != 0){
 posicao[posicao_escolhida] = 'O';
 }
 //testes das possibilidades por jogador
 if(( posicao[1]=='X' && posicao[2]=='X' && posicao[3]=='X')||
 ( posicao[4]=='X' && posicao[5]=='X' && posicao[6]=='X')||
 ( posicao[7]=='X' && posicao[8]=='X' && posicao[9]=='X')||
 ( posicao[1]=='X' && posicao[4]=='X' && posicao[7]=='X')||
 ( posicao[2]=='X' && posicao[5]=='X' && posicao[8]=='X')||
 ( posicao[3]=='X' && posicao[6]=='X' && posicao[9]=='X')||
 ( posicao[1]=='X' && posicao[5]=='X' && posicao[9]=='X')||
 ( posicao[3]=='X' && posicao[5]=='X' && posicao[7]=='X')){
 vencedor =1;
 printf("jogador %s (X), VENCEU \n",&x);
 break;
 }
 if(( posicao[1]=='O' && posicao[2]=='O' && posicao[3]=='O')||
 ( posicao[4]=='O' && posicao[5]=='O' && posicao[6]=='O')||
 ( posicao[7]=='O' && posicao[8]=='O' && posicao[9]=='O')||
 ( posicao[1]=='O' && posicao[4]=='O' && posicao[7]=='O')||
 ( posicao[2]=='O' && posicao[5]=='O' && posicao[8]=='O')||
 ( posicao[3]=='O' && posicao[6]=='O' && posicao[9]=='O')||
 ( posicao[1]=='O' && posicao[5]=='O' && posicao[9]=='O')||
 ( posicao[3]=='O' && posicao[5]=='O' && posicao[7]=='O')){
 vencedor=2;
 printf("jogador %s (O), VENCEU \n",&o);
 break;
 }
 jogada++; //system("cls");
 if (jogada==9 && vencedor!=1 && vencedor!=2){
 printf("DEU VELHA");
 break;
 }
 }while(vencedor == 0);
 printf("1.JOGAR NOVAMENTE \n");
 printf("2. SAIR \n");
 printf("digite uma opcao \n");
 scanf("%d",&resp);
	 int x;
	 for(x=1; x<=9; ++x)
	 	posicao[x] = '0'+ x;
 vencedor = 0;
 jogada =0;
}
system("pause");
return 0;
}
Jogo da Velha/Jogo da Velha.exe
Jogo da Velha/Jogo da Velha.o

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais