Baixe o app para aproveitar ainda mais
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; } }
Compartilhar