Buscar

Jogo da VELHA em C

Prévia do material em texto

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
// criador Severino Diogo Rodrigues Dantas UERN
char interface[3][3]; // Variavel global.
char jogador1[20]={'P','L','A','Y','E','R','1'}, jogador2[20]={'P','L','A','Y','E','R','2'}; // Variaveis globais.
int vitoriasP1=0, vitoriasP2=0, empates=0; // Variaveis globais.
char quemcomeca2[20], quemcomeca3[20]; // Variaveis globais.
int escolha3, escolha4; // Variaveis globais.
char login[20];
int senha;
char procurarnome[20];
FILE* bancodedados;
int main(int escolha) // A função main vai receber as primeiras informações do usuario e se interligar com as outras funções.
{
	logar();
 continuar: // Para voltar ao menu usando goto.
 system("cls");
 cabecalho();
 printf ("\n\n\n O que deseja fazer antes de comecar o jogo?\n\n");
 printf ("1. Ver o tutorial do jogo;\n");
 printf ("2. Atualizar informacoes sobre os usuarios;\n");
 printf ("3. Resetar RANKING;\n");
 printf ("4. Analisar RANKING;\n");
 printf ("5. Comecar a jogar;\n");
 printf ("6. Sair do programa;\n\n");
 printf (" Digite o numero e aperte ENTER.\n");
 scanf ("%d", &escolha);
 switch(escolha){
 case 1:
 system("cls");
 cabecalho();
 tutorial();
 printf ("\nAperte ENTER para voltar ao menu:");
 getch();
 goto continuar;
 break;
 case 2:
 system("cls");
 cabecalho();
 atualizarINFOS();
 goto continuar;
 break;
 case 3:
 system("cls");
 cabecalho();
 zeraranking();
 goto continuar;
 break;
 case 4:
 system("cls");
 cabecalho();
 analisaranking();
 goto continuar;
 break;
 case 5:
 system("cls");
 funcionamento();
 goto continuar;
 break;
 case 6:
 printf ("\nObrigado por jogar TIC-TAC-TOE!\n");
 break;
 
 default:
 	printf ("Opcao invalida, digite ENTER para voltar ao menu.\n");
 	getch();
 	goto continuar;
}
 return 0;
}
void cabecalho(void) // Essa função apenas mostra nossas informações.
{
	system("cls");
	printf ("\n PROJETO EM C - JOGO DA VELHA - TIC TAC TOE\n");
	printf ("UERN - UNIVERSIDADE DO ESTADO DO RIO GRANDE DO NORTE\n");
 printf (" PROFESSOR WILFREDO BLANCO\n");
 printf (" ALUNOS: SEVERINO DIOGO / PAULO RICARDO\n");
 return;
}
void tabuleiro(void) // Essa função vai imprimir o tabuleiro.
{
 printf ("\n\n\n\t\t %c | %c | %c \n", '1', '2', '3');
	printf ("\t\t1 %c | %c | %c \n", interface[0][0], interface[0][1], interface[0][2]);
	printf ("\t\t2 %c | %c | %c \n", interface[1][0], interface[1][1], interface[1][2]);
	printf ("\t\t3 %c | %c | %c \n", interface[2][0], interface[2][1], interface[2][2]);
	return;
}
void tutorial(void) // Essa função vai mostrar o tutorial ao usuario quado selecionado no menu.
{
 printf ("\n\n\n#### TUTORIAL ####");
 printf ("\n\n1. A escolha de casas deve ser feita da seguinte maneira:\n\n");
 printf (" L1C1 | L1C2 | L1C3 \n");
 printf (" L2C1 | L2C2 | L2C3 \n");
 printf (" L3C1 | L3C2 | L3C3 \n\n");
 printf ("2. O jogador que comecar ira jogar com o X e o outro com o O;\n");
 printf ("3. O jogador que ira comecar o jogo sera sorteado randomicamente.\n");
 printf ("4. L eh a posicao das linhas e C das colunas.\n");
 return;
}
int atualizarINFOS(void) // Função de atualização de dados.
{
 printf ("\n\n\n####PAINEL DE ATUALIZACAO####\n");
 printf ("\nOs atuais jogadores sao: %s [eh o jogador 1] e %s [eh o jogador 2], deseja atualizar?\n",jogador1, jogador2);
 printf ("1. Sim;\n");
 printf ("2. Nao.\n");
 scanf ("%d",&escolha3);
 if (escolha3 == 1){
 printf ("Digite o novo nome para o jogador 1:\n");
 scanf ("%s",jogador1);
 printf ("Digite o novo nome para o jogador 2:\n");
 scanf ("%s",jogador2);
 printf ("\nNomes atualizados! Aperte ENTER para voltar ao menu:");
 getch();
 } else {
 printf ("\nAperte ENTER para voltar ao menu:");
 getch();
 }
 return;
}
int zeraranking(void) // Função pra zerar os rankings.
{
 printf ("\n\n\n####RANKING####\n");
 printf ("\nO Ranking atual eh:\n");
 printf ("%s: %d VITORIAS.\n",jogador1,vitoriasP1);
 printf ("%s: %d VITORIAS.\n",jogador2,vitoriasP2);
 printf ("Empates: %d EMPATES\n",empates);
 printf ("\n\nDeseja realmente zerar o ranking?\n");
 printf ("1. Sim;\n");
 printf ("2. Nao.\n");
 scanf ("%d",&escolha4);
 if (escolha4 == 1){
 vitoriasP1 = 0;
 vitoriasP2 = 0;
 empates = 0;
 printf ("\nRanking zerado! Aperte ENTER para voltar ao menu:");
 getch();
 } else {
 printf ("\nAperte ENTER para voltar ao menu:");
 getch();
 }
 return;
 }
void analisaranking(void) // Para consultar ranking.
{
 printf ("\n\n\n####RANKING####\n");
 printf ("\nO Ranking atual eh:\n");
 printf ("%s: %d VITORIAS.\n",jogador1,vitoriasP1);
 printf ("%s: %d VITORIAS.\n",jogador2,vitoriasP2);
 printf ("Empates: %d EMPATES\n",empates);
 printf ("\nAperte ENTER para voltar ao menu:");
 getch();
}
void mostraranking(void) // Esse daqui será diferente pra ocupar menos espaço e servirá para mostrar o ranking no ato do jogo.
{
 printf ("\n\n\n%s: %d VITORIAS.\n",jogador1,vitoriasP1);
 printf ("%s: %d VITORIAS.\n",jogador2,vitoriasP2);
 printf ("Empates: %d EMPATES\n",empates);
}
void funcionamento(void) // Funcionamento do jogo
{
	int contador, linha, coluna, vez=0, limpari, limparj;
	char resposta = 's';
	int quemcomeca;
	// Vai sortear randomicamente o jogador que vai comecar a partida.
	quemcomeca = 1 + rand () % 9;
	// Essa parte atribui strings de um vetor ao outro.
	if (quemcomeca <= 5){
		sprintf(quemcomeca2, "%s", jogador1);
		sprintf(quemcomeca3, "%s", jogador2);
	} else {
		sprintf(quemcomeca2, "%s", jogador2);
		sprintf(quemcomeca3, "%s", jogador1);
	}
	// Começo do laço pra o jogo.
	do {
		// contador começa do 1 e vai até 9, que é o numero total de jogadas.
		contador = 1;
		// Esse for vai limpar a matriz colocando um espaço em branco.
		for (limpari=0;limpari<=2;limpari++){
			for (limparj=0;limparj<=2;limparj++){
				interface[limpari][limparj] = ' ';
			}
		}
		//Vai mostrar e atualizar o cabeçalho e o tabuleiro a cada jogada.
		do {
			cabecalho();
			tabuleiro();
			mostraranking();
			// O primeiro que foi sorteado irá começar as jogadas.
			if (vez%2 != 0){
				printf ("\nJogador %s faca sua jogada:",quemcomeca2);
			} else {
				printf ("\nJogador %s faca sua jogada:",quemcomeca3);
			}
			printf ("\nDigite a linha:\n");
			scanf ("%d",&linha);
			printf ("Digite a coluna:\n");
			scanf ("%d",&coluna);
			// Caso o usuario digite algo fora da matriz não acontecerá nada e terá que digitar novamente.
			if (linha < 1 || coluna < 1 || linha > 3 || coluna > 3){
				linha = 0;
				coluna = 0;
			// A mesma coisa acontecerá caso digite em um local já ocupado.
			} else if (interface[linha-1][coluna-1] != ' '){
				linha = 0;
				coluna = 0;
			} else {
				// E aqui marcará os X e as O de acordo com as coordenadas dadas pelo usuario.
				if (vez%2 == 0){
					interface[linha-1][coluna-1] = 'X';
				} else {
					interface[linha-1][coluna-1] = 'O';
				}
				// Incremento do contador e da vez para que possa parar na nona jogada.
				vez++;
				contador++;
			}
			// Essas são as condições de vitorias para X.
			if (interface[0][0] == 'X' && interface[0][1] == 'X' && interface[0][2] == 'X'){contador = 11;}
			if (interface[1][0] == 'X' && interface[1][1] == 'X' && interface[1][2]== 'X'){contador = 11;}
			if (interface[2][0] == 'X' && interface[2][1] == 'X' && interface[2][2] == 'X'){contador = 11;}
			if (interface[0][0] == 'X' && interface[1][0] == 'X' && interface[2][0] == 'X'){contador = 11;}
			if (interface[0][1] == 'X' && interface[1][1] == 'X' && interface[2][1] == 'X'){contador = 11;}
			if (interface[0][2] == 'X' && interface[1][2] == 'X' && interface[2][2] == 'X'){contador = 11;}
			if (interface[0][0] == 'X' && interface[1][1] == 'X' && interface[2][2] == 'X'){contador = 11;}
			if (interface[0][2] == 'X' && interface[1][1] == 'X' && interface[2][0] == 'X'){contador = 11;}
			// Essas são as condições de vitorias para O.
			if (interface[0][0] == 'O' && interface[0][1] == 'O' && interface[0][2] == 'O'){contador = 12;}
			if (interface[1][0] == 'O' && interface[1][1] == 'O' && interface[1][2] == 'O'){contador = 12;}
			if (interface[2][0] == 'O' && interface[2][1] == 'O' && interface[2][2] == 'O'){contador = 12;}
			if (interface[0][0] == 'O' && interface[1][0] == 'O' && interface[2][0] == 'O'){contador = 12;}
			if (interface[0][1] == 'O' && interface[1][1] == 'O' && interface[2][1] == 'O'){contador = 12;}
			if (interface[0][2] == 'O' && interface[1][2] == 'O' && interface[2][2] == 'O'){contador = 12;}
			if (interface[0][0] == 'O' && interface[1][1] == 'O' && interface[2][2] == 'O'){contador = 12;}
			if (interface[0][2] == 'O' && interface[1][1] == 'O' && interface[2][0] == 'O'){contador = 12;}
		}while (contador <=9);
		printf ("Deseja jogar novamente?\n");
		scanf ("%c",&resposta);
		cabecalho ();
		tabuleiro ();
		// Incremento do placar.
		if (contador == 10){
			printf ("\n\n\nQue pena, deu empate!\n");
			empates++;
		} else if (contador == 11){
			printf ("\n\n\nO jogador %s ganhou!\n", jogador1);
			vitoriasP1++;
		} else if (contador == 12) {
			printf ("\n\n\nO jogador %s ganhou!\n", jogador2);
			vitoriasP2++;
		}
		printf ("Deseja jogar novamente? Digite S para sim e N para nao:\n");
		scanf ("%c",&resposta);
	} while (resposta == 'S' || resposta == 's');
 if (resposta == 'N' || resposta == 'n'){
 printf ("Aperte ENTER para voltar ao menu.");
 getch();
 int main();
 }
}
FILE* abrirarquivo(char modo, char caminho[30]){ // Função para abrir arquivo e não ficar muito repetitivo.
	FILE *bancodedados;
	switch(modo){ // Dependendo da atribuição irá abrir o arquivo em caminhos diferentes.
		case 'G':
			bancodedados = fopen (caminho,"wt");
			break;
		case 'L':
			bancodedados = fopen (caminho,"rt");
			break;
		case 'A':
			bancodedados = fopen (caminho,"a");
			break;
	}
	if (bancodedados == NULL){ // Condição caso o arquivo não exista.
		printf ("Não foi possivel abrir o arquivo.");
		getch();
		exit(0);
	}
	return bancodedados;	
}
void fechararquivo(FILE *bancodedados){ // Função para fechar arquivo e não ficar muito repetitivo.
	fclose(bancodedados);
}
void cadastrar(){ // Irá cadastrar o usuario e salvar os dados em um arquivo txt.
	FILE *bancodedados;
	bancodedados = abrirarquivo('A',"bd.txt");
	fprintf (bancodedados, "%s %d\n", login, senha);
	fechararquivo(bancodedados);
}
void recuperarsenha(){ // O usuario irá informar o login e a senha será imprimida na tela como meio de recuperação.
	FILE *bancodedados;
	bancodedados = abrirarquivo('L',"bd.txt");
	printf ("Digite o seu USUARIO:\n");
	scanf ("%s", login);
	while (fscanf(bancodedados,"%s %d\n", login, &senha) != EOF) // EOF = End of file, vai ler até o final do arquivo
	printf ("\n%s sua SENHA eh: %d\n\n", login, senha);
	fechararquivo(bancodedados);
}
void logar(int choise1){ // Função para logar, ainda falta descobrir como escanear os arquivos até encontrar o que seja compativel com a senha.
	FILE *bancodedados;
	cabecalho();
	printf ("\n\n\n1. Logar com seu USUARIO e sua SENHA;\n");
	printf ("2. Cadastrar um novo USUARIO;\n");
	printf ("3. Recuperar SENHA perdida.\n");
	scanf ("%d",&choise1);
	
	switch (choise1){ // Tela principal do menu de LOGIN.
		
	case 1:
		printf ("USUARIO: \n");
		scanf ("%s",login);
		printf ("SENHA: \n");
		scanf ("%d",senha);
		break;
	
	case 2:
		printf ("Digite o USUARIO:\n");
		scanf ("%s",login);
		printf ("Digite a SENHA:\n");
		scanf ("%d",&senha);
		cadastrar();
		printf ("Usuario cadastrado com sucesso! Digite ENTER para ir ao menu do jogo.\n");
		getch();
		int main();
		break;
		
	case 3:
		recuperarsenha();
		printf ("Senha recuperada! Aperte ENTER para ir ao menu do jogo.\n");
		getch();
		int main();
		break;		
}
}

Continue navegando