Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Programa Jogo da Velha
- Práticas de Fundamentos de Programação
- prof.: Filipe Costa Fernandes - 1ºsemestre/2017
- INSTRUÇÕES NO ENUNCIADO EM PDF
- */
- #include<stdio.h>
- #include<conio.h>
- #include<stdlib.h>
- #include<locale.h>
- #include <windows.h>//necessário para usar SetConsoleTitle
- //area de declaracao de constantes
- #define lim 3
- #define Jogador 'J'
- #define Maquina 'M'
- /*variáveis globais utilizadas no programa*/
- int c; //variável de controle para laços
- char op; //opção do jogador utilizado no programa principal
- int vezde; //variável que define de quem é a vez para jogar
- int jogo; //recebe o retorno das funções que define o fim do jogo
- char jv[3][3]; //matriz jogo 3 X 3
- //procedimento utilizado para limpeza da matriz, colocando '0' em toda a matriz
- void limpeza()
- {
- int linha, coluna;
- for (linha=0;linha<lim; linha++)
- {
- for(coluna=0; coluna<lim; coluna++)
- jv [linha][coluna]=0;
- }
- printf("\t 0 1 2\n\n");
- printf("\t _________________________\n");
- printf("\t0 | | | |\n");
- printf("\t | | | | \n");
- printf("\t | %d | %d | %d |\n",jv[0][0],jv[0][1],jv[0][2]);
- printf("\t | | | | \n");
- printf("\t |_______|_______|_______|\n");
- printf("\t | | | |\n");
- printf("\t | | | |\n");
- printf("\t1 | %d | %d | %d | \n",jv[1][0],jv[1][1],jv[1][2]);
- printf("\t | | | | \n");
- printf("\t |_______|_______|_______|\n");
- printf("\t | | | |\n");
- printf("\t | | | |\n");
- printf("\t2 | %d | %d | %d | \n",jv[2][0],jv[2][1],jv[2][2]);
- printf("\t | | | | \n");
- printf("\t |_______|_______|_______|\n");
- printf("\n\n\n");
- printf("\n\n\n");
- }
- //procedimento utilizado para visualizar o conteúdo da matriz
- void visualizar()
- {
- //Faz com que a estrutura da matriz apareça uma unica vez.
- system("cls");
- //Comando usado para colocar titulo no console.
- SetConsoleTitle(TEXT("JOGO DA VELHA"));
- //Permite suporte a língua portuguesa. Garante que caracteres como “ç” e acentuação sejam exibidos normalmente no programa.
- setlocale(LC_ALL,"Portuguese");
- int w,k;
- printf("\n");
- printf("\n\t\t\t\t JOGO DA VELHA \n\n\n\n");
- printf("\t\t\t\t C0 C1 C2 \n\n");
- printf("\t\t\t\t L0 %c | %c | %c \n",jv[0][0],jv[0][1],jv[0][2]);
- printf("\t\t\t\t ---|---|--- \n ");
- printf("\t\t\t\t L1 %c | %c | %c \n",jv[1][0],jv[1][1],jv[1][2]);
- printf("\t\t\t\t ---|---|--- \n ");
- printf("\t\t\t\t L2 %c | %c | %c \n",jv[2][0],jv[2][1],jv[2][2]);
- printf("\n\n");
- }
- //esta função verifica se houve ou não ganhador, retornando true (verdadeiro) se houver,
- //ou false (falso) se não tiver ganhador para cada jogada
- int velha(char jog)
- { //printf("Em construção........");
- // ESSE SERÁ O RESULTADO , CHECAR SE HOUVE GANHADOR NA PARTIDA;
- if((jv[0][0]==jog && jv[0][1]==jog && jv[0][2]==jog)||
- (jv[0][0]==jog && jv[1][0]==jog && jv[2][0]==jog)||
- (jv[0][0]==jog && jv[1][1]==jog && jv[2][2]==jog)||
- (jv[0][2]==jog && jv[0][1]==jog && jv[0][0]==jog)||
- (jv[2][0]==jog && jv[1][0]==jog && jv[0][0]==jog)||
- (jv[2][2]==jog && jv[1][1]==jog && jv[0][0]==jog)||
- (jv[0][1]==jog && jv[1][1]==jog && jv[2][1]==jog)||
- (jv[0][2]==jog && jv[1][2]==jog && jv[2][2]==jog)||
- (jv[0][2]==jog && jv[1][1]==jog && jv[2][0]==jog)||
- (jv[1][0]==jog && jv[1][1]==jog && jv[1][2]==jog)||
- (jv[2][0]==jog && jv[2][1]==jog && jv[2][2]==jog)||
- (jv[2][1]==jog && jv[1][1]==jog && jv[0][1]==jog)||
- (jv[2][2]==jog && jv[1][2]==jog && jv[0][2]==jog)||
- (jv[2][0]==jog && jv[1][1]==jog && jv[0][2]==jog)||
- (jv[1][2]==jog && jv[1][1]==jog && jv[1][0]==jog)||
- (jv[2][2]==jog && jv[2][1]==jog && jv[2][0]==jog))
- {
- return 1;
- }
- // printf("PARABENS! JOGADOR VENCEDOR!!");
- // fazer um do while para a pessoa jogar de novo ou não
- else
- return 0;
- //printf("Não houve ganhador, JOGUEM DE NOVO!!");
- }
- //esta função recebe uma posição da matriz e verifica se esta posição já foi
- //selecionada, retornando true (verdadeiro) se já tiver sido selecionada ou
- //false (falso) caso contrário
- int posicao( int l, int c)
- { //printf("Em construção........");
- //O laço abaixo ira percorrer toda a matriz
- for(int i = 0; i < 9; i++)
- {
- for(int j = 0; j < 9; j++)
- {
- // Os valores passados na função ('l','c') sao comparados com as posições; se ela for igual entra e faz uma outra comparação.
- if(i == l && c == j)
- {
- // Apos validar as posições da matriz ele ainda verifica se aquela posição ja foi ocupada por um valor. Se esta posição estiver com caractere diferente de '0' o e porque ela ja foi usada. logo a função irá retornar 1 'true';
- if(jv[j] == 0)
- {
- return 1;
- }
- // Caso contrario a função irá retornar 0 'false' pois aquela posição ainda pode ser usada.
- else
- {
- return 0;
- }
- }
- }
- }
- /* if(c > 3||c < 0)
- {
- if(l > 3||l < 0)
- printf("Opção Inválida. Escolha Novamente");
- //retornar para a escolha dnv
- }*/
- }
- //esta função utiliza a função random (rand) para selecionar uma nova jogada da máquina,
- //retornando true (verdadeiro) se a jogada resultou em vitória ou false (falso) caso contrário
- int maquinajoga()
- {
- int l,c,rposicao,v;
- rposicao = 1;
- do
- {
- l = rand()%3;
- c = rand()%3;
- rposicao = posicao(l,c);
- if (!rposicao)
- jv[l][c] = Maquina;
- }while ( rposicao );
- visualizar();
- v = velha(Maquina);
- if ( v )
- {
- printf(" A MAQUINA VENCEU O JOGO..........\n");
- return 1;
- }
- else return 0;
- }
- //esta função faz a jogada do jogador, que seleciona uma nova jogada válida,
- //retornando true (verdadeiro) se a jogada resultou em vitória ou false (falso) caso contrário }
- int jogadorjoga()
- { int w, k, o,O, x,X, letra;
- int l,c,rposicao,v;
- rposicao= 1;
- printf("\n\n\n");
- while (! rposicao == 1);
- {
- printf("\t\t#\tJogador - Escolha a coluna a ser marcada: ");
- scanf("%d",&w);
- printf("\t\t#\tJogador - Escolha a linha a ser marcada: ");
- scanf("%d",&k);
- rposicao = posicao(k,w);
- if (rposicao ==1)
- jv[k][w] = Jogador;
- }
- visualizar();
- v = velha(Jogador);
- if ( v==1 ){
- int i = 10;
- while (i)
- {
- printf(" \n\n\n\t\t\t O JOGADOR VENCEU O JOGO! \n");
- Sleep (2000);
- system ("cls");
- Sleep (100);
- }
- return 1;
- }
- else return 0;
- }
- //preencher com O ou X
- //isso tem que alterar dentro da matriz//
- //esperar a maquina jogar e retornar para cá//*/
- //programa principal. Jogo da Velha, esta parte do programa é a mais importante,
- //controla de quem é a vez de jogar, chamando as funções e procedimentos necessários
- //para cada execução do programa
- int main()
- {
- setlocale(LC_ALL,"Portuguese");
- c = 1;
- limpeza(); //chama a função para limpeza da matriz
- visualizar(); //visualiza a matriz 3 X 3 com '0'
- //Controle para selecionar de quem é a primeira jogada MAQUINA ou JOGADOR
- do
- {
- printf("Opção para início do jogo...\n");
- printf(" m = máquina\n");
- printf(" j = jogador\n");
- op = getchar();
- }while ( ( op != 'm' ) && ( op != 'M' ) && ( op != 'j' ) && ( op = 'J' ) );
- if ( ( op == 'm' ) || ( op == 'M' ) )
- {
- jogo = maquinajoga();
- vezde = 1; // está variável é muito importante no programa,
- //fazendo com que após a máquina jogar ela sede a vez para o jogador.
- }
- else
- {
- jogo = jogadorjoga();
- vezde = 0; //esta variável é muito importante no programa,
- //fazendo com que após o jogador jogar ele sede a vez para a maquina
- }
- //este laço controla as jogadas e só termina quando alguém ganha ou quando
- //der empate: OBS.: uma ótima modificação neste programa seria o jogador
- //selecionar se quer parar ou começar um novo jogo
- do
- {
- if ( vezde )
- {
- jogo = jogadorjoga();
- vezde = 0;
- }
- else
- {
- jogo = maquinajoga();
- vezde = 1;
- }
- c++;
- }while (( c <= 8 ) && ( !jogo ));
- getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement