Ir ao conteúdo
  • Cadastre-se

C++ Jogo da Velha C++


Posts recomendados

Boa tarde pessoal, estou fazendo um Jogo da Velha em C++, o código já está todo pronto e o jogo rodando, porém quando eu digito o ultimo comando o O ou o X não aparece no tabuleiro, já diz direto o ganhador. Se puderem me dizer o erro ficarei muito grata. 

 

O código está assim: 

#include <iostream>
#include <stdlib.h>
using namespace std;

//Variáveis
string Titulo = "<<<< JOGO DA VELHA >>>>\n\n";
int Continuar;
const int Tam=11, pos = 3;//
char Mapa[Tam][Tam];
char tabuleiro [pos][pos];
char vazio=' ';
char cerquilha='#';
char jogador1='O', jogador2='X';
bool gameOver;
int jogadorAtual=1;
int Jogada;
bool jogadaValida;
int ganhou=false;
int NumeroDeJogadas=0;
char A, B, C, D, E, F, G,H;

void menu()
{
    //Desenhando o título
    cout<<Titulo;
    //Especificação dos jogadores
    cout<<"Jogador 1: O\t";
    cout<<"Jogador 2: X\n\n";
    //Confirmação de continuação
    cout<<"Digite 1 para continuar ou 0 para sair...";
    cin>>Continuar;

}

void inicializar()
{
    //Tabuleiro
    for (int i=0;i<Tam;i++)
    {
        for(int j=0;j<Tam;j++)
        {
            tabuleiro[j]=vazio;
        }
    }


    //Mapa
    for (int i=0;i<Tam;i++)
    {
        for(int j=0;j<Tam;j++)
        {
            //Espaços
            Mapa[j]=vazio;

            //cerquilha

            if((i==3)||(i==7)||(j==3)||(j==7))
                Mapa[j] = cerquilha;
        }
    }
}

void desenharJogo()
{

    system("cls");

    //Desenhar título
    cout<<Titulo;

    //Desenhar tabuleiro
    for(int i=0;i<Tam;i++)
    {
        for(int j=0;j<Tam;j++)
        {
            cout<<Mapa[j]<<" ";
        }
        cout<<endl;
    }

    //Pedir comando
    cout<<"\nJogador da Rodada: ";
    if(jogadorAtual == 1)
        cout<<"O"<<endl;
    else
        cout<<"X"<<endl;

    cout<<"Jogada: ";
    cin>>Jogada;

    while(Jogada/10<0 || Jogada/10>=4 || Jogada%10<0 || Jogada%10>=4 || tabuleiro[(Jogada/10)-1][(Jogada%10)-1]!=vazio)
    {
        cout<<"Jogada invalida. Tente novamente: ";
        cin>>Jogada;
    }
    jogadaValida=true;
    //NumeroDeJogadas++;
}

void comando()
{
    //Preenchimento do tabuleiro
    cout<<"\nJogador da Rodada: ";
    if(jogadorAtual == 1)
        tabuleiro[Jogada/10-1][Jogada%10-1]='O';
    else
        tabuleiro[Jogada/10-1][Jogada%10-1]='X';


    //Preenchimento do Mapa
    for(int i=0; i<pos; i++)
    {
        for(int j=0; j<pos; j++)
        {
            Mapa[1+4*i][1+4*j]=tabuleiro[j];
        }
    }

    jogadorAtual = jogadorAtual*(-1);
}

void ganhador()
{
    A=((tabuleiro[0][0]==tabuleiro[0][1])&&(tabuleiro[0][1]==tabuleiro[0][2])&&(tabuleiro[0][0]!=vazio));
    B=((tabuleiro[1][0]==tabuleiro[1][1])&&(tabuleiro[1][1]==tabuleiro[1][2])&&(tabuleiro[1][0]!=vazio));
    C=((tabuleiro[2][0]==tabuleiro[2][1])&&(tabuleiro[2][1]==tabuleiro[2][2])&&(tabuleiro[2][0]!=vazio));
    D=((tabuleiro[0][0]==tabuleiro[1][0])&&(tabuleiro[1][0]==tabuleiro[2][0])&&(tabuleiro[0][0]!=vazio));
    E=((tabuleiro[0][1]==tabuleiro[1][1])&&(tabuleiro[1][1]==tabuleiro[2][1])&&(tabuleiro[0][1]!=vazio));
    F=((tabuleiro[0][2]==tabuleiro[1][2])&&(tabuleiro[1][2]==tabuleiro[2][2])&&(tabuleiro[0][2]!=vazio));
    G=((tabuleiro[0][0]==tabuleiro[1][1])&&(tabuleiro[1][1]==tabuleiro[2][2])&&(tabuleiro[0][0]!=vazio));
    H=((tabuleiro[0][2]==tabuleiro[1][1])&&(tabuleiro[1][1]==tabuleiro[2][0])&&(tabuleiro[0][2]!=vazio));

    //verificando o ganhador na horizontal
    if (A)
    {
        gameOver=true;
    }
    else if (B)
    {
        gameOver=true;
    }
    else if (C)
    {
        gameOver=true;
    }

    //verificando ganhador na vertical
    if(D)
    {
        gameOver = true;
    }
    else if(E)
    {
        gameOver = true;
    }
    else if(F)
    {
        gameOver = true;
    }

    //verificando ganhador na diagonal
    if(G)
    {
        gameOver=true;
    }
    else if(H)
    {
        gameOver = true;
    }

    //verificando se deu velha
    if (NumeroDeJogadas==9 && !(A)&&!(B)&&!(C)&&!(D)&&!(E)&&!(F)&&!(G)&&!(H))
    {
            gameOver = true;
            cout<<"Deu Velha \n";

    }
    if(NumeroDeJogadas%2!=0)
        {
           cout<<"Jogador 1 venceu";
        }
        else
        {
            cout<<"Jogador 2 venceu";
        }

}

void jogo()
{
    inicializar();
    NumeroDeJogadas=0;
    while(!(gameOver))
    {
        desenharJogo();
        comando();
        NumeroDeJogadas++;
        ganhador ();
    }

}

int main ()
{
    system("color e2");
    menu();//Função para desenhar o menu

    if(Continuar==0)
        return 0;


    jogo();
    char novo;
    while (novo!='n')
    {
        cout<<"\nDigite 's' para jogar novamente e 'n' para finalizar o jogo ";
        cin>>novo;
        if(novo=='s')
           {
               jogo();
           }
    }
} 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 7 meses depois...

Olá, amigo. Sou novo aqui. Tem umas partes no seu código q não estão ok. Quem sabe seja pelo modo como você postou o código ou senão por ter erros no seu código. Mas do jeito q está não tem mesmo como funcionar.

Na função inicializar teria q mudar para isso:

void inicializar()
{
    //Tabuleiro
    for (int i=0;i<Tam;i++)
    {
        for(int j=0;j<Tam;j++)
        {
            tabuleiro[i][j]=vazio;
        }
    }


    //Mapa
    for (int i=0;i<Tam;i++)
    {
        for(int j=0;j<Tam;j++)
        {
            //Espaços
            Mapa[i][j]=vazio;

            //cerquilha

            if((i==3)||(i==7)||(j==3)||(j==7))
                Mapa[i][j] = cerquilha;
        }
    }
}

Na função desenharJogo() seria isso no primeiro for da função:

 

for(int i=0;i<Tam;i++)
    {
        for(int j=0;j<Tam;j++)
        {
            cout<<Mapa[i][j]<<" ";
        }
        cout<<endl;
    }

Creio q fazendo essas alterações é mais provável q seu jogo funcione. Experimenta fazer essas modificações e daí, se puder, diga se ajudou em alguma coisa, ok?

Pode ser q tenha alguma outra questão a corrigir no seu código. Uma sugestão apenas é fazer com q o usuário digite primeiro a linha e depois a coluna. Seria algo útil p deixar o jogo mais intuitivo. Mas é apenas uma sugestão. Isso fica a seu critério

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...

Olá, amiga. Se ainda está interessada no seu jogo da velha vou passar o código de um jogo da velha q considero relativamente simples. Se porventura interessar ok!

 

// ProjetoJogoDaVelha.cpp : define o ponto de entrada para o aplicativo do console.
//

#include "stdio.h"

char matriz[3][3];

void init_matriz();
void show_matriz();
void play_request(char simbolo);
int isFull();
int isSequence();


int main()
{
	system("title Jogo da Velha");

	char sim[2];
	int vez = 1;
	
	do
	{
	
		//int vez = 1;
		char simbolo;
		char nome1[21], nome2[21];
		char *c;
		int jogada = 0;
		
		printf("   =====================\n");
		printf("   ==| JOGO DA VELHA |==\n");
		printf("   =====================\n");

		printf("\n");

		printf("NOME DO JOGADOR 1: ");
		scanf("%s", nome1);

		printf("NOME DO JOGADOR 2: ");
		scanf("%s", nome2);

		system("cls"); // limpar a tela

		init_matriz();

		do
		{
			printf("\n");

			if (jogada <= 10)
			{
				system("cls");
			}
			
			show_matriz();

			printf("\n");

			if (vez)
			{
				printf("E a vez do jogador %s\n", nome1);
				simbolo = 'X';
				play_request(simbolo);
				vez = 0;
			}
			else
			{
				printf("E a vez do jogador %s\n", nome2);
				simbolo = 'O';
				play_request(simbolo);
				vez = 1;
			}


			if (isSequence())
			{
				if (vez)
				{

					system("cls");
					show_matriz();
					printf("\n");
					printf("O jogador \'%s\' ganhou!\n", nome2);
					vez = 0;
					break;
				}
				else
				{
					system("cls");
					show_matriz();
					printf("\n");
					printf("O jogador \'%s\' ganhou!\n", nome1);
					vez = 1;
					break;
				}
			}
			else if (isFull())
			{
				system("cls");
				show_matriz();
				printf("\n");
				printf("O jogo terminou empatado!\n\n");
				break;
			}

			jogada++;

		} while (1);

		printf("\nDeseja jogar novamente? s/n: ");
		scanf("%s", sim);

		printf("\n");

		system("cls");

	} while (!strcmp(sim, "s"));

	printf("voce saiu do Jogo!\n\n");

	//scanf("%d", &c);
	system("pause");

    return 0;
}



void init_matriz()
{
	int i;
	int j;

	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			matriz[i][j] = ' ';
		}
	}
}



void show_matriz()
{
	int i;

	printf("\n");

	for (i = 0; i < 3; i++)
	{
		printf("        %c | %c | %c", matriz[i][0], matriz[i][1], matriz[i][2]);

		if (i < 2)
		{
			printf("\n       ---|---|---\n");
		}
	}

	printf("\n\n");

}



void play_request(char simbolo)
{
	int i;
	int j;
	int jogada = 0;

	printf("\n");

	
	do {
		do
		{
			printf("LINHA: ");
			scanf("%d", &i);

			if (i > 3 || i < 1)
			{
				printf("\n");
				printf("ERRO: JOGADA INVALIDA!\n");
				printf("\n");
				jogada = 0;
			}
			else
			{
				jogada = 1;
			}
		} while (jogada == 0);

		do
		{
			printf("COLUNA: ");
			scanf("%d", &j);

			if (j > 3 || j < 1)
			{
				printf("\n");
				printf("ERRO: JOGADA INVALIDA!\n");
				printf("\n");
				jogada = 0;
			}
			else
			{
				jogada = 1;
			}
		
		} while (jogada == 0);

		if (matriz[i - 1][j - 1] != ' ')
		{
			printf("\n");
			printf("ERRO: ESSA JOGADA JA FOI EFETUADA!\n");
			printf("\n");
			continue;
		}

	} while (matriz[i - 1][j - 1] != ' ');
	
	matriz[i - 1][j - 1] = simbolo;

}

int isFull()
{
	int i;
	int j;

	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			if (matriz[i][j] == ' ')
			{
				return 0;
			}

		}
	}
	return 1;
}


int isSequence()
{
	// Linhas
	if (matriz[0][0] == matriz[0][1] && matriz[0][1] == matriz[0][2] && matriz[0][0] != ' ')
	{
		return 1;
	}
	if (matriz[1][0] == matriz[1][1] && matriz[1][1] == matriz[1][2] && matriz[1][0] != ' ')
	{
		return 1;
	}
	if (matriz[2][0] == matriz[2][1] && matriz[2][1] == matriz[2][2] && matriz[2][0] != ' ')
	{
		return 1;
	}
	// Colunas
	if (matriz[0][0] == matriz[1][0] && matriz[1][0] == matriz[2][0] && matriz[0][0] != ' ')
	{
		return 1;
	}
	if (matriz[0][1] == matriz[1][1] && matriz[1][1] == matriz[2][1] && matriz[0][1] != ' ')
	{
		return 1;
	}
	if (matriz[0][2] == matriz[1][2] && matriz[1][2] == matriz[2][2] && matriz[0][2] != ' ')
	{
		return 1;
	}
	// Diagonais
	if (matriz[0][0] == matriz[1][1] && matriz[1][1] == matriz[2][2] && matriz[0][0] != ' ')
	{
		return 1;
	}
	if (matriz[2][0] == matriz[1][1] && matriz[1][1] == matriz[0][2] && matriz[2][0] != ' ')
	{
		return 1;
	}
	
	return 0;

}

 

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...

Olá, pessoal. Estive dando uma olhada melhor no código q postei acima do Jogo da Velha em C e percebi q, além do uso de várias linhas p a lógica do jogo, onde fica alternando entre a vez dos jogadores, encontrei duplicidade d código.

Resolvi mudar isso. Coloquei a lógica em uma função ( jogo() ) e tbém mudei a função onde é solicitada a jogada do usuário.

O resultado é q pude reduzir consideravelmente a qtde de linhas d código e tbém eliminar a duplicidade d código.

Para quem interessar, segue as funções onde fiz as mudanças como tbém o struct criado:

 

typedef char * string;

struct jogador
{
	char nome[30];
	char simbolo;
};


// funcao onde fica a logica do jogo
void jogo()
{
    char sim[2], simbolo, *c = NULL;
	int indexAtual, qtdeJogadores;
	struct jogador j[2];
	string vencedor = NULL;
	bool finalizado;
	int vez;

	do
	{
		printf("=====================\n");
		printf("==| JOGO DA VELHA |==\n");
		printf("=====================\n\n");

		vez = 0;

		printf("NOME DO JOGADOR 1: ");
		scanf("%s", j[vez].nome);
		j[vez].simbolo = 'X';

		vez++;

		printf("NOME DO JOGADOR 2: ");
		scanf("%s", j[vez].nome);
		j[vez].simbolo = 'O';

		indexAtual = 0;

		vencedor = NULL;

		finalizado = false;

		qtdeJogadores = 2;

		init_matriz();

		while (!finalizado)
		{
            system("cls");

			show_matriz();

			printf("\nE a vez do jogador %s\n", j[indexAtual].nome);

			simbolo = j[indexAtual].simbolo;
			play_request(simbolo);

			if (isSequence())
			{
				vencedor = j[indexAtual].nome;
				finalizado = true;
			}
			else if (isFull())
			{
				finalizado = true;
			}

            // aqui fica intercalando o valor de indexAtual entre 0 e 1
			indexAtual = (indexAtual + 1) % qtdeJogadores;
		}

		system("cls");
		show_matriz();

		if (!vencedor)
            printf("\n   O Jogo terminou empatado!\n\n");
		else
            printf("\n   O Jogador %s ganhou!\n\n", vencedor);

		printf("FIM DE JOGO!\n");

		printf("\nDESEJA JOGAR NOVEMENTE? [s/n]: ");
		scanf("%s", sim);
		scanf("%c", &c);

		system("cls");

	} while (!strcmp(sim, "s"));

	printf("\n\n\tPROGRAMA FINALIZADO!\n\n\n");

	system("pause");
}

// funcao onde e solicitada a jogada do usuario

void play_request(char simbolo)
{
	int i;
	int j;
	int jogada = 0;
	char *c = NULL;

	do {
		printf("\nLINHA: ");
		scanf("%d", &i);
		scanf("%c", &c);

		printf("COLUNA: ");
		scanf("%d", &j);
		scanf("%c", &c);

		if ((i < 1 || i > 3) || (j < 1 || j > 3))
		{
			printf("\nERRO: JOGADA INVALIDA!\n");
			jogada = 0;
			continue;
		}
		else
			jogada = 1;

		if (matriz[i - 1][j - 1] != ' ')
		{
			printf("\nERRO: ESSA JOGADA JA FOI EFETUADA!\n");
			jogada = 0;
			continue;
		}
		else
		  	jogada = 1;

	} while (!jogada);

	matriz[i - 1][j - 1] = simbolo;

}

O código, p minha surpresa, não ficou bem colocado nessa postagem. Mas fazendo uma pequena formatação dá pra resolver tudo d maneira tranquila.

 

Link para o comentário
Compartilhar em outros sites

Pelo q pude perceber a ênfase q você deu para o código do jogo da velha do link q passou é d jogar contra o pc e usando uma interface gráfica.

Qto a um jogo contra o pc tenho aqui. Mas inda está d um modo q o pc não perde. Pode não ganhar, mas, ou empata ou ganha.

Já qto a interface gráfica inda conheço muito pouco a respeito disso em C/C++ e preciso passar a conhecer.

No link q você passou pelo q pude ver tem exemplo do uso d interface.

Valeu! Vou dar uma olhada melhor nisso, tanto porque gosto muito d trabalhar com interface gráfica

adicionado 28 minutos depois

Vangodp, qto ao uso d interface gráfica o q você sugere. Pelo q vi no link você mencionou o SFML2. Seria isso?

Link para o comentário
Compartilhar em outros sites

1 hora atrás, giu_d disse:

Pelo q pude perceber a ênfase q você deu para o código do jogo da velha do link q passou é d jogar contra o pc e usando uma interface gráfica.

Eu tenho mais bem pouca participação neste post, a ênfase, como você citou, é pelo algoritmo minimax, que é o que se utiliza nesses tipos de jogos, é somente para que peguem ideias. Por outra parte se quiser usar interfaces é questão de experiência com a linguagem, se você dominar a linguagem não acredito que tenha maiores problemas.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
Em 13/04/2018 às 10:08, vangodp disse:

Eu tenho mais bem pouca participação neste post, a ênfase, como você citou, é pelo algoritmo minimax, que é o que se utiliza nesses tipos de jogos, é somente para que peguem ideias. Por outra parte se quiser usar interfaces é questão de experiência com a linguagem, se você dominar a linguagem não acredito que tenha maiores problemas.

 

Olá. Pelo q já pude perceber você demonstra ter um bom conhecimento com respeito a linguagem C e recursos q a mesma tem, como o algoritmo minimax.

Vou confessar q é a 1ª vez que ouço a respeito desse algoritmo e devido a isso não sei dizer do q se trata.

Se não for difícil para você, daria para passar pelo menos o básico com respeito a esse algoritmo para q eu possa fazer uso dele nos meus projetos?

Desde já agradeço pela atenção

adicionado 3 minutos depois

Tem algo a mais sobre esse algoritmo q preciso aprender além de somente pegar ideias?

Já com respeito a interfaces devo dizer q inda estou estudando C/C++ há pouco tempo. Logo vejo q não seria adequado p mim trabalhar com interface

Link para o comentário
Compartilhar em outros sites

6 horas atrás, giu_d disse:

Olá. Pelo q já pude perceber você demonstra ter um bom conhecimento com respeito a linguagem C e recursos q a mesma tem, como o algoritmo minimax.

Ola!.
Um algoritmo pouco tem que ver com uma determinada linguagem em si, na verdade pode-se aplicar minimax a qualquer linguagem.
Eu conheci o minimax através de fóruns e vídeos, nunca cheguei a aplicar realmente, mas se você quiser aprender sobre o tema bastaria fazendo uma consulta pelo google.

De uma olhada aqui e veja do que se trata.

Tal como ele coloca nesse exemplo pode ser feito com if else etc, porém trata-se claramente de arvores, mas como falei, pode se usar if else. Trata-se de ter todas as jogadas já previstas e anotadas.
É um tema realmente interessante de estudo.

Se tiver dificuldades veja mais vídeos, e inclusive sinta-se livre em buscar algum código que ja esteja pronto para estudo, a final de contas nao foi nenhum de nós que inventamos isso, mas devemos saber do que se trata. Não acha?.

Sobre interfaces não é algo tão difícil como parece... claro que também n é algo trivial mas é possível se fazer algo com poucas horas. Se quiser posso lhe mostrar como funcionam algumas delas e você verá que n é nada do outro mundo, mas que dão um aspecto muito melhor e agradável para a vista.

Se você quiser podemos fazer um para fins de estudo, assim aprendemos os dois hsuheusheu

Link para o comentário
Compartilhar em outros sites

3 horas atrás, vangodp disse:

Sobre interfaces não é algo tão difícil como parece... claro que também n é algo trivial mas é possível se fazer algo com poucas horas. Se quiser posso lhe mostrar como funcionam algumas delas e você verá que n é nada do outro mundo, mas que dão um aspecto muito melhor e agradável para a vista.

Se você quiser podemos fazer um para fins de estudo, assim aprendemos os dois hsuheusheu

 

Olá. Me interessou essa parte. Mas, como já disse, inda estou há pouco tempo estudando C/C++. Então, nesse caso, seria interessante ou você mostrar um código q faz uso d interface ou indicar algum para, que assim, eu possa dizer se está ao meu alcance trabalhar com isso ou se ainda é muito avançado.

Vou deixar você tomar a iniciativa com respeito a essa questão. Só o q posso dizer é vontade de aprender tenho bastante.

Inclusive, quando comecei a estudar C/C++ não pensei de modo algum q fosse gostar tanto do negócio como gostei.

Até mesmo deixei d lado o Java q vinha estudando.

A respeito do Java eu gostava (inda gosto) de trabalhar com o JavaFX, q é a parte de inerface gráfica do Java. Mas devo confessar q logo percebi q me empolgo mais com C/C++ do como era com o Java.

Sobre o algoritmo minimax assisti o vídeo e percebi q o q é feito é seguir uma linha lógica para pensar.

Já havia criado um jogo da velha do usuário contra o PC, mas fiz algo parecido, q foi considerar as hipóteses possível para implementar as jogadas do PC.

Vou postar o código. do modo como está, o PC não perde. Não quer dizer q ele vai ganhar, mas ou ganha ou empata

Inclusive na função inciar() tem uma parte marcada q até comentei, onde fazendo a mudança do modo como comentei, o jogo fica do PC contra o PC.

Para brincar um pouco deixei o jogo dessa forma: PC contra PC. coloquei tudo em um loop de 1 milhão de iterações e, depois de mais de 20 minutos de código rodando, o resultado foi de 1 milhão de empates hehe

No caso de deixar o jogo PC contra PC, para q as partidas não ficassem iguais, fiz a 1ª jogada de forma randômica

Segue o código se quiser dar uma olhada. Ficou um pouco extensa as jogadas do PC pois considerei todos as condições possíveis, inclusive quando não havia mais o q fazer, tipo: É a vez do Pc e só tem uma posição vaga

 

Esse é o código:

 

#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "string.h"
#include "conio.h"
#include "windows.h"

typedef enum { False, True } bool;


int matriz[3][3];
int vez;


void initMatrix();
void requestPlay(char simbolo);
int isFull();
int isSequence();
int isComputerTurn(int varVez, char simbolo);
int podeJogar(int x, int y);
void iniciar();
void sair();
int tecla();
void imprimirTitulo();
void showTab();
void apresentarJogo();
void comecarJogando();


int tecla()
{
	int vartecla;
	while (True)
	{
		if (_kbhit())
		{
			vartecla = _getch();
			return(vartecla);
		}
	}
}


void sair()
{
	int lugar = 0, c;
	system("cls");

	printf("\n\t    DESEJA JOGAR NOVAMENTE?\n\n");
	printf("\n\t\t=>  SIM  \n"
		"\t\t    NAO   \n\n\n");

	while (1)
	{
		if (_kbhit())
		{
			system("cls");
			printf("\n\t    DESEJA JOGAR NOVAMENTE?\n\n");
			c = tecla();

			if (c == 80)  //apertou para baixo
			{
				lugar++;
				if (lugar > 1)				
					lugar = 0;				
			}
			if (c == 72)   //apertou para cima
			{
				lugar--;
				if (lugar < 0)				
					lugar = 1;				
			}
			if (c == 75)   //apertou para direita
			{
				lugar++;
				if (lugar > 1)				
					lugar = 0;				
			}
			if (c == 77)  //apertou para esquerda
			{
				lugar--;
				if (lugar < 0)				
					lugar = 1;				
			}
			if (c == 13)  //apertou [enter]
			{
				if (lugar == 0)				
					comecarJogando();				
				else if (lugar == 1)
				{
					system("cls");
					printf("\n\n\n\t    voce SAIU DO JOGO!\n\n\n\n\n");
					system("pause");
					exit(0);
				}
			}

			if (lugar == 0)
			{
				printf("\n\t\t=>  SIM  \n"
					"\t\t    NAO   \n\n\n");
			}
			if (lugar == 1)
			{
				printf("\n\t\t    SIM   \n"
					"\t\t=>  NAO  \n\n\n");
			}
		}
	}
}

void comecarJogando()
{
	int c;
	int lugar = 0;
	system("cls");

	imprimirTitulo();

	printf("\n\n");
	printf("\t\t\t=>     voce COME%cA     \n", 128);
	printf("\t\t\t    COMPUTADOR COME%cA  \n\n\n", 128);


	while (1)
	{
		if (_kbhit())
		{
			system("cls");
			imprimirTitulo();
			c = tecla();

			if (c == 80)  //apertou para baixo
			{
				lugar++;
				if (lugar > 1) { lugar = 0; }
			}
			if (c == 72)   //apertou para cima
			{
				lugar--;
				if (lugar < 0) { lugar = 1; }
			}
			if (c == 75)   //apertou para direita
			{
				lugar++;
				if (lugar > 1) { lugar = 0; }
			}
			if (c == 77)  //apertou para esquerda
			{
				lugar--;
				if (lugar < 0) { lugar = 1; }
			}
			if (c == 13)  //apertou [enter]
			{
				if (lugar == 0)
				{
					vez = 1;
					iniciar();
				}
				else if (lugar == 1)
				{
					vez = 0;
					iniciar();
				}
			}

			if (lugar == 0)
			{
				printf("\n\n");
				printf("\t\t\t=>     voce COME%cA     \n", 128);
				printf("\t\t\t    COMPUTADOR COME%cA  \n\n\n", 128);
			}
			if (lugar == 1)
			{
				printf("\n\n");
				printf("\t\t\t       voce COME%cA      \n", 128);
				printf("\t\t\t=>  COMPUTADOR COME%cA  \n\n\n", 128);
			}
		}
	}
}





void imprimirTitulo()
{
	printf("\n\n         NM    NMNMN     NMNMN     NMNMN         NMNMNM     MNMNM        \n");
	printf("         NM   NM   NM   NM        NM   NM        NM   NM   NM   NM       \n");
	printf("         NM   NM   NN   NM        NM   NM        NM   NM   NM   NM       \n");
	printf("    NM   NM   NM   MN   NM  MNM   NM   NM        NM   NM   NMNMNMN       \n");
	printf("    NM   NM   MN   NM   NM   NM   NM   NM        NM   NM   NM   NM       \n");
	printf("     NMNMN     NMNMN     NMNMN     NMNMN         NMNMNM    NM   NM       \n");
	printf("                                                                         \n");
	printf("                                                                         \n");
	printf("                                                                         \n");
	printf("             NM   NM    NMNMNM   NM        NM   NM    MNMNM                \n");
	printf("             NM   NM   NM        NM        NM   NM   NM   NM               \n");
	printf("             NM   NM   NM        NM        NM   NM   NM   NM               \n");
	printf("             NM   NM   NMNMNMN   NM        NMNMNMN   NMNMNMN               \n");
	printf("              NM NM    NM        NM        NM   NM   NM   NM               \n");
	printf("               NMn      NMNMNM    NMNMNM   NM   NM   NM   NM               \n");
	printf("\n\n");

}

void apresentarJogo()
{
	system("cls");

	char *c;
	int i;

	imprimirTitulo();	

	Sleep(2000);

	comecarJogando();
}

void iniciar()
{
	int i;
	char simbolo;
	bool finalizado;
	
	system("cls");

	initMatrix();

	printf("\n");

	finalizado = False;

	showTab();

	while (!finalizado)
	{
		system("cls");

		printf("\n");

		showTab();

		printf("\n");

		if (vez)
		{
			printf("\nE A SUA VEZ!\n");
			simbolo = 'X';
			requestPlay(simbolo);
			//isComputerTurn(vez, simbolo); // Se retirar o comentario dessa linha e comentar a linha acima, o jogo vai ser do PC contra o PC
			vez = 0;
		}
		else
		{
			printf("\nAGUARDE A VEZ DO COMPUTADOR!\n\n");
			printf("Using IA");
			for (i = 0; i < 3; i++)
			{
				Sleep(800);
				printf(".");
			}
			simbolo = 'O';
			isComputerTurn(vez, simbolo);
			vez = 1;
			Sleep(800);
		}

		if (isSequence())
		{
			finalizado = True;			
		}
		else if (isFull())
		{
			finalizado = True;			
		}
		printf("\n");
	}

	char *texto = vez ? "\n\n       O COMPUTADOR GANHOU!\n\n\n" : "\n\n     PARABENS! voce GANHOU!\n\n\n";	

	system("cls");
	printf("\n");
	showTab();

	if (isSequence())
	{
		printf("%s", texto);
		vez = vez ? 0 : 1;
	}
	else if (isFull())
	{
		printf("\n\n    O JOGO TERMINOU EMPATADO!\n\n\n");
	}

	system("pause");

	sair();

}

int main()
{
	system("title Jogo Da Velha");

	apresentarJogo();

	return 0;
}


void initMatrix()
{
	int i, j;	

	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			matriz[i][j] = ' ';
		}
	}
}

void showTab() // tabuleiro 1
{
	int i, j, cont;

	printf("\n\t");
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			printf("  %c  ", matriz[i][j]);

			if (j < 2)
			{
				printf("%c", -77);  //desenha as colunas.
			}
		}
		printf("\n\t");

		if (i < 2)
		{
			for (cont = 1; cont <= 15; cont++)
			{
				printf("%c", -60); //desenha as linhas.
				
				if (cont == 5 || cont == 10)
				{
					printf("%c", -59); //coloca o caractere '+' na junção das linhas e colunas.
				}
			}
		}
		printf("\n\t");
	}
}

void requestPlay(char simbolo)
{	
	int jogada = 0, i, j;
	char *limparBuffer = NULL;

	do 
	{	
		printf("\nLINHA: ");
		scanf("%d", &i);
		scanf("%c", &limparBuffer);

		printf("COLUNA: ");
		scanf("%d", &j);
		scanf("%c", &limparBuffer);

		if ((i > 3 || i < 1) || (j < 1 || j > 3))
		{			
			printf("\nERRO: Jogada invalida!\n");
			jogada = 0;
			continue;
		}
		else  
			jogada = 1; 

		if (matriz[i - 1][j - 1] != ' ')
		{			
			printf("\nERRO: Essa jogada ja foi efetuada!\n");			
			jogada = 0;
			continue;
		}
		else 
			jogada = 1; 
		
	} while (!jogada);				
		
	matriz[i - 1][j - 1] = simbolo;
}


int isFull()
{
	int i, j;	

	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			if (matriz[i][j] == ' ')
			{
				return 0;
			}
		}
	}
	return 1;
}


int isSequence()
{
	// Linhas
	if (matriz[0][0] == matriz[0][1] && matriz[0][1] == matriz[0][2] && matriz[0][0] != ' ')
	{
		return 1;
	}
	if (matriz[1][0] == matriz[1][1] && matriz[1][1] == matriz[1][2] && matriz[1][0] != ' ')
	{
		return 1;
	}
	if (matriz[2][0] == matriz[2][1] && matriz[2][1] == matriz[2][2] && matriz[2][0] != ' ')
	{
		return 1;
	}
	// Colunas
	if (matriz[0][0] == matriz[1][0] && matriz[1][0] == matriz[2][0] && matriz[0][0] != ' ')
	{
		return 1;
	}
	if (matriz[0][1] == matriz[1][1] && matriz[1][1] == matriz[2][1] && matriz[0][1] != ' ')
	{
		return 1;
	}
	if (matriz[0][2] == matriz[1][2] && matriz[1][2] == matriz[2][2] && matriz[0][2] != ' ')
	{
		return 1;
	}
	// Diagonais
	if (matriz[0][0] == matriz[1][1] && matriz[1][1] == matriz[2][2] && matriz[0][0] != ' ')
	{
		return 1;
	}
	if (matriz[2][0] == matriz[1][1] && matriz[1][1] == matriz[0][2] && matriz[2][0] != ' ')
	{
		return 1;
	}

	return 0;
}


int podeJogar(int x, int y)
{
	return (matriz[x][y] == ' ');	
}


int isComputerTurn(int varVez, char simbolo)
{
	char x;
	char o;

	if (varVez == 0)
	{
		x = 'X';
		o = 'O';
	}
	else if (varVez == 1)
	{
		x = 'O';
		o = 'X';
	}

	int random = 0, jogada;
	int i, j;
		
	// vitoria linhas 1
	if (matriz[0][0] == o && matriz[0][1] == o)
	{
		if (podeJogar(0, 2))		
			return matriz[0][2] = simbolo;		
	}
	if (matriz[0][1] == o && matriz[0][2] == o)
	{
		if (podeJogar(0, 0))		
			return matriz[0][0] = simbolo;		
	}
	if (matriz[0][0] == o && matriz[0][2] == o)
	{
		if (podeJogar(0, 1))		
			return matriz[0][1] = simbolo;		
	}
	// vitoria linhas 2
	if (matriz[1][0] == o && matriz[1][1] == o)
	{
		if (podeJogar(1, 2))		
			return matriz[1][2] = simbolo;		
	}
	if (matriz[1][1] == o && matriz[1][2] == o)
	{
		if (podeJogar(1, 0))		
			return matriz[1][0] = simbolo;		
	}
	if (matriz[1][0] == o && matriz[1][2] == o)
	{
		if (podeJogar(1, 1))		
			return matriz[1][1] = simbolo;		
	}
	// vitoria linhas 3
	if (matriz[2][0] == o && matriz[2][1] == o)
	{
		if (podeJogar(2, 2))		
			return matriz[2][2] = simbolo;		
	}
	if (matriz[2][1] == o && matriz[2][2] == o)
	{
		if (podeJogar(2, 0))		
			return matriz[2][0] = simbolo;		
	}
	if (matriz[2][0] == o && matriz[2][2] == o)
	{
		if (podeJogar(2, 1))		
			return matriz[2][1] = simbolo;		
	}
	// vitoria colunas 1
	if (matriz[0][0] == o && matriz[1][0] == o)
	{
		if (podeJogar(2, 0))		
			return matriz[2][0] = simbolo;		
	}
	if (matriz[2][0] == o && matriz[1][0] == o)
	{
		if (podeJogar(0, 0))		
			return matriz[0][0] = simbolo;		
	}
	if (matriz[0][0] == o && matriz[2][0] == o)
	{
		if (podeJogar(1, 0))		
			return matriz[1][0] = simbolo;		
	}

	// vitoria colunas 2
	if (matriz[0][1] == o && matriz[1][1] == o)
	{
		if (podeJogar(2, 1))		
			return matriz[2][1] = simbolo;		
	}
	if (matriz[2][1] == o && matriz[1][1] == o)
	{
		if (podeJogar(0, 1))		
			return matriz[0][1] = simbolo;		
	}
	if (matriz[0][1] == o && matriz[2][1] == o)
	{
		if (podeJogar(1, 1))		
			return matriz[1][1] = simbolo;		
	}

	// vitoria colunas 3
	if (matriz[0][2] == o && matriz[1][2] == o)
	{
		if (podeJogar(2, 2))		
			return matriz[2][2] = simbolo;		
	}
	if (matriz[1][2] == o && matriz[2][2] == o)
	{
		if (podeJogar(0, 2))		
			return matriz[0][2] = simbolo;		
	}
	if (matriz[0][2] == o && matriz[2][2] == o)
	{
		if (podeJogar(1, 2))		
			return matriz[1][2] = simbolo;		
	}

	// vitoria diagonais
	if (matriz[0][0] == o && matriz[1][1] == o)
	{
		if (podeJogar(2, 2))		
			return matriz[2][2] = simbolo;		
	}
	if (matriz[2][2] == o && matriz[1][1] == o)
	{
		if (podeJogar(0, 0))		
			return matriz[0][0] = simbolo;		
	}
	if (matriz[0][0] == o && matriz[2][2] == o)
	{
		if (podeJogar(1, 1))		
			return matriz[1][1] = simbolo;		
	}

	// ao contrario
	if (matriz[2][0] == o && matriz[1][1] == o)
	{
		if (podeJogar(0, 2))		
			return matriz[0][2] = simbolo;		
	}
	if (matriz[0][2] == o && matriz[1][1] == o)
	{
		if (podeJogar(2, 0))		
			return matriz[2][0] = simbolo;		
	}
	if (matriz[2][0] == o && matriz[0][2] == o)
	{
		if (podeJogar(1, 1))		
			return matriz[1][1] = simbolo;		
	}
	// bloqueio linhas 1

	if (matriz[0][0] == x && matriz[0][1] == x)
	{
		if (podeJogar(0, 2))		
			return matriz[0][2] = simbolo;		
	}
	if (matriz[0][1] == x && matriz[0][2] == x)
	{
		if (podeJogar(0, 0))		
			return matriz[0][0] = simbolo;		
	}
	if (matriz[0][0] == x && matriz[0][2] == x)
	{
		if (podeJogar(0, 1))		
			return matriz[0][1] = simbolo;		
	}
	// bloqueio linhas 2
	if (matriz[1][0] == x && matriz[1][1] == x)
	{
		if (podeJogar(1, 2))		
			return matriz[1][2] = simbolo;		
	}
	if (matriz[1][1] == x && matriz[1][2] == x)
	{
		if (podeJogar(1, 0))		
			return matriz[1][0] = simbolo;		
	}
	if (matriz[1][0] == x && matriz[1][2] == x)
	{
		if (podeJogar(1, 1))		
			return matriz[1][1] = simbolo;		
	}
	// bloqueio linhas 3
	if (matriz[2][0] == x && matriz[2][1] == x)
	{
		if (podeJogar(2, 2))		
			return matriz[2][2] = simbolo;		
	}
	if (matriz[2][0] == x && matriz[2][2] == x)
	{
		if (podeJogar(2, 1))		
			return matriz[2][1] = simbolo;		
	}
	if (matriz[2][1] == x && matriz[2][2] == x)
	{
		if (podeJogar(2, 0))		
			return matriz[2][0] = simbolo;		
	}
	// bloqueio colunas 1
	if (matriz[0][0] == x && matriz[1][0] == x)
	{
		if (podeJogar(2, 0))		
			return matriz[2][0] = simbolo;		
	}
	if (matriz[1][0] == x && matriz[2][0] == x)
	{
		if (podeJogar(0, 0))		
			return matriz[0][0] = simbolo;		
	}
	if (matriz[0][0] == x && matriz[2][0] == x)
	{
		if (podeJogar(1, 0))		
			return matriz[1][0] = simbolo;		
	}
	// bloqueio colunas 2
	if (matriz[0][1] == x && matriz[1][1] == x)
	{
		if (podeJogar(2, 1))		
			return matriz[2][1] = simbolo;		
	}
	if (matriz[0][1] == x && matriz[2][1] == x)
	{
		if (podeJogar(1, 1))		
			return matriz[1][1] = simbolo;		
	}
	if (matriz[1][1] == x && matriz[2][1] == x)
	{
		if (podeJogar(0, 1))		
			return matriz[0][1] = simbolo;		
	}
	// bloqueio colunas 3
	if (matriz[0][2] == x && matriz[1][2] == x)
	{
		if (podeJogar(2, 2))		
			return matriz[2][2] = simbolo;		
	}
	if (matriz[1][2] == x && matriz[2][2] == x)
	{
		if (podeJogar(0, 2))		
			return matriz[0][2] = simbolo;		
	}
	if (matriz[0][2] == x && matriz[2][2] == x)
	{
		if (podeJogar(1, 2))		
			return matriz[1][2] = simbolo;		
	}
	// bloqueio diagonais
	if (matriz[0][0] == x && matriz[2][2] == x)
	{
		if (podeJogar(1, 1))		
			return matriz[1][1] = simbolo;		
	}
	if (matriz[2][0] == x && matriz[0][2] == x)
	{
		if (podeJogar(1, 1))		
			return matriz[1][1] = simbolo;		
	}
	if (matriz[0][0] == x && matriz[1][1] == x)
	{
		if (podeJogar(2, 2))		
			return matriz[2][2] = simbolo;
		
	}
	if (matriz[2][2] == x && matriz[1][1] == x)
	{
		if (podeJogar(0, 0))		
			return matriz[0][0] = simbolo;		
	}
	if (matriz[2][0] == x && matriz[1][1] == x)
	{
		if (podeJogar(0, 2))		
			return matriz[0][2] = simbolo;		
	}
	if (matriz[0][2] == x && matriz[1][1] == x)
	{
		if (podeJogar(2, 0))		
			return matriz[2][0] = simbolo;		
	}	
	// Fechando o meio
	if (matriz[0][0] == x || matriz[2][0] == x || matriz[0][2] == x || matriz[2][2] == x)
	{
		if (podeJogar(1, 1))		
			return matriz[1][1] = simbolo;		
	}
	// cercando as pontas
	srand(time(NULL));
	random = rand() % 4 + 1;

	if (matriz[0][0] == x && matriz[2][2] == x && matriz[1][1] == o)
	{
		switch (random)
		{
		case 1:
			if (podeJogar(0, 1))			
				return matriz[0][1] = simbolo;			
			break;
		case 2:
			if (podeJogar(1, 0))			
				return matriz[1][0] = simbolo;			
			break;
		case 3:
			if (podeJogar(1, 2))			
				return matriz[1][2] = simbolo;			
			break;
		case 4:
			if (podeJogar(2, 1))			
				return matriz[2][1] = simbolo;			
			break;
		}
	}
	if (matriz[2][0] == x && matriz[0][2] == x && matriz[1][1] == o)
	{
		switch (random)
		{
		case 1:
			if (podeJogar(0, 1))			
				return matriz[0][1] = simbolo;			
			break;
		case 2:
			if (podeJogar(1, 0))			
				return matriz[1][0] = simbolo;			
			break;
		case 3:
			if (podeJogar(1, 2))		
				return matriz[1][2] = simbolo;			
			break;
		case 4:
			if (podeJogar(2, 1))			
				return matriz[2][1] = simbolo;			
			break;
		}
	}
	// jogadas iniciais
	if (matriz[0][0] == x && matriz[1][1] == o)
	{
		if (podeJogar(2, 2))		
			return matriz[2][2] = simbolo;		
	}
	if (matriz[2][0] == x && matriz[1][1] == o)
	{
		if (podeJogar(0, 2))		
			return matriz[0][2] = simbolo;		
	}
	if (matriz[0][2] == x && matriz[1][1] == o)
	{
		if (podeJogar(2, 0))		
			return matriz[2][0] = simbolo;		
	}
	if (matriz[2][2] == x && matriz[1][1] == o)
	{
		if (podeJogar(0, 0))		
			return matriz[0][0] = simbolo;		
	}

	// jogadas iniciais
	if (matriz[0][0] == o && matriz[1][1] == x)
	{
		if (podeJogar(2, 2))		
			return matriz[2][2] = simbolo;		
	}
	if (matriz[2][0] == o && matriz[1][1] == x)
	{
		if (podeJogar(0, 2))		
			return matriz[0][2] = simbolo;		
	}
	if (matriz[0][2] == o && matriz[1][1] == x)
	{
		if (podeJogar(2, 0))		
			return matriz[2][0] = simbolo;		
	}
	if (matriz[2][2] == o && matriz[1][1] == x)
	{
		if (podeJogar(0, 0))		
			return matriz[0][0] = simbolo;		
	}
	// meio
	if (matriz[1][1] == x && matriz[0][0] == ' ' && matriz[2][0] == ' ' && matriz[0][2] == ' ' && matriz[2][2] == ' ')
	{
		switch (random)
		{
		case 1:
			if (podeJogar(0, 0))			
				return matriz[0][0] = simbolo;			
			break;
		case 2:
			if (podeJogar(0, 2))			
				return matriz[0][2] = simbolo;			
			break;
		case 3:
			if (podeJogar(2, 0))			
				return matriz[2][0] = simbolo;			
			break;
		case 4:
			if (podeJogar(2, 2))			
				return matriz[2][2] = simbolo;			
			break;
		}
	}
	// pontas meio
	if (matriz[0][1] == x || matriz[1][0] == x || matriz[1][2] == x || matriz[2][1] == x)
	{
		if (podeJogar(1, 1))
			return matriz[1][1] = simbolo;		
	}

	// estrategia para nao perder
	if (matriz[0][0] == x && matriz[1][2] == x && matriz[1][1] == o)
	{
		if (podeJogar(0, 2))		
			return matriz[0][2] = simbolo;		
	}
	if (matriz[0][0] == x && matriz[2][1] == x && matriz[1][1] == o)
	{
		if (podeJogar(2, 0))		
			return matriz[2][0] = simbolo;		
	}
	if (matriz[0][2] == x && matriz[1][0] == x && matriz[1][1] == o)
	{
		if (podeJogar(0, 0))		
			return matriz[0][0] = simbolo;		
	}
	if (matriz[0][2] == x && matriz[2][1] == x && matriz[1][1] == o)
	{
		if (podeJogar(2, 2))		
			return matriz[2][2] = simbolo;		
	}
	if (matriz[2][2] == x && matriz[1][0] == x && matriz[1][1] == o)
	{
		if (podeJogar(2, 0))		
			return matriz[2][0] = simbolo;		
	}
	if (matriz[2][2] == x && matriz[0][1] == x && matriz[1][1] == o)
	{
		if (podeJogar(0, 2))		
			return matriz[0][2] = simbolo;		
	}
	if (matriz[2][0] == x && matriz[0][1] == x && matriz[1][1] == o)
	{
		if (podeJogar(0, 0))		
			return matriz[0][0] = simbolo;		
	}
	if (matriz[2][0] == x && matriz[1][2] == x && matriz[1][1] == o)
	{
		if (podeJogar(2, 2))		
			return matriz[2][2] = simbolo;		
	}
	// estrategias de vitoria 
	if (matriz[0][1] == x && matriz[2][1] == x)
	{
		if (podeJogar(0, 0))		
			return matriz[0][0] = simbolo;		
	}
	if (matriz[1][0] == x && matriz[1][2] == x)
	{
		if (podeJogar(0, 2))		
			return matriz[0][2] = simbolo;		
	}
	// outras estrategias
	if (matriz[1][0] == x && matriz[0][1] == x)
	{
		if (podeJogar(0, 0))		
			return matriz[0][0] = simbolo;		
	}
	if (matriz[1][0] == x && matriz[2][1] == x)
	{
		if (podeJogar(2, 0))		
			return matriz[2][0] = simbolo;		
	}
	if (matriz[0][1] == x && matriz[1][0] == x)
	{
		if (podeJogar(0, 2))		
			return matriz[0][2] = simbolo;		
	}
	if (matriz[0][1] == x && matriz[1][2] == x)
	{
		if (podeJogar(0, 2))		
			return matriz[0][2] = simbolo;		
	}
	if (matriz[2][1] == x && matriz[1][2] == x)
	{
		if (podeJogar(2, 2))		
			return matriz[2][2] = simbolo;		
	}
	// fechando as portas - mais estrategias
	if (matriz[0][0] == x && matriz[1][1] == x && matriz[2][2] == o)
	{
		if (podeJogar(0, 2))		
			return matriz[0][2] = simbolo;		
	}
	if (matriz[2][0] == x && matriz[1][1] == x && matriz[0][2] == o)
	{
		if (podeJogar(0, 0))		
			return matriz[0][0] = simbolo;		
	}
	if (matriz[2][2] == x && matriz[1][1] == x && matriz[0][0] == o)
	{
		if (podeJogar(0, 2))		
			return matriz[0][2] = simbolo;		
	}
	if (matriz[0][2] == x && matriz[1][1] == x && matriz[2][0] == o)
	{
		if (podeJogar(0, 0))		
			return matriz[0][0] = simbolo;		
	}
	//srand(time(NULL));
	jogada = rand() % 9 + 1;

	// jogadas iniciais
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			if (matriz[i][j] == ' ') {
				switch (jogada)
				{
				case 1:
					if (podeJogar(0, 0))					
						return matriz[0][0] = simbolo;					
					break;
				case 2:
					if (podeJogar(0, 1))					
						return matriz[0][1] = simbolo;					
					break;
				case 3:
					if (podeJogar(0, 2))					
						return matriz[0][2] = simbolo;					
					break;
				case 4:
					if (podeJogar(1, 0))					
						return matriz[1][0] = simbolo;					
					break;
				case 5:
					if (podeJogar(1, 1))					
						return matriz[1][1] = simbolo;					
					break;
				case 6:
					if (podeJogar(1, 2))					
						return matriz[1][2] = simbolo;					
					break;
				case 7:
					if (podeJogar(2, 0))					
						return matriz[2][0] = simbolo;					
					break;
				case 8:
					if (podeJogar(2, 1))					
						return matriz[2][1] = simbolo;					
					break;
				case 9:
					if (podeJogar(2, 2))					
						return matriz[2][2] = simbolo;					
					break;
				}
			}
		}
	}

	// quando nao ha o q fazer
	if (matriz[0][0] == o && matriz[1][0] == x && matriz[2][0] == o && matriz[1][1] == o && matriz[0][2] == x
		&& matriz[1][2] == o && matriz[2][2] == x)
	{
		if (podeJogar(2, 1))		
			return matriz[2][1] = simbolo;		
	}
	if (matriz[0][0] == o && matriz[0][1] == x && matriz[0][2] == o && matriz[1][1] == o && matriz[2][0] == x
		&& matriz[2][1] == o && matriz[2][2] == x)
	{
		if (podeJogar(1, 0))		
			return matriz[1][0] = simbolo;		
	}
	if (matriz[0][0] == x && matriz[0][1] == o && matriz[0][2] == x && matriz[1][1] == o && matriz[2][0] == o
		&& matriz[2][1] == x && matriz[2][2] == o)
	{
		if (podeJogar(1, 0))		
			return matriz[1][0] = simbolo;		
	}
	if (matriz[0][0] == x && matriz[0][2] == o && matriz[1][0] == o && matriz[1][1] == o && matriz[1][2] == x
		&& matriz[2][0] == x && matriz[2][2] == o)
	{
		if (podeJogar(0, 1))		
			return matriz[0][1] = simbolo;		
	}

	// quando nao ha o q fazer 2
	if (matriz[0][0] == x && matriz[0][1] == x && matriz[0][2] == o && matriz[1][0] == o &&
		matriz[1][1] == o && matriz[1][2] == x && matriz[2][0] == x && matriz[2][2] == o)
	{
		if (podeJogar(2, 1))		
			return matriz[2][1] = simbolo;		
	}

	if (matriz[0][0] == x && matriz[0][1] == o && matriz[0][2] == x && matriz[1][1] == o &&
		matriz[1][2] == x && matriz[2][0] == o && matriz[2][1] == x && matriz[2][2] == o)
	{
		if (podeJogar(1, 0))		
			return matriz[1][0] = simbolo;		
	}
	if (matriz[0][0] == o && matriz[0][2] == x && matriz[1][0] == x && matriz[1][1] == o &&
		matriz[1][2] == o && matriz[2][0] == o && matriz[2][1] == x && matriz[2][2] == x)
	{
		if (podeJogar(0, 1))		
			return matriz[0][1] = simbolo;		
	}
	if (matriz[0][0] == o && matriz[0][1] == x && matriz[0][2] == o && matriz[1][0] == x &&
		matriz[1][1] == o && matriz[2][0] == x && matriz[2][1] == o && matriz[2][2] == x)
	{
		if (podeJogar(1, 2))		
			return matriz[1][2] = simbolo;		
	}

	// mais quando nao ha o q fazer
	if (matriz[0][0] == x && matriz[0][1] == o && matriz[0][2] == x && matriz[1][0] == x &&
		matriz[1][1] == o && matriz[2][0] == o && matriz[2][1] == x && matriz[2][2] == o)
	{
		if (podeJogar(1, 1))		
			return matriz[1][2] = simbolo;		
	}
	if (matriz[0][0] == x && matriz[0][2] == o && matriz[1][0] == o && matriz[1][1] == o &&
		matriz[1][2] == x && matriz[2][0] == x && matriz[2][1] == x && matriz[2][2] == o)
	{
		if (podeJogar(0, 1))		
			return matriz[0][1] = simbolo;		
	}
	if (matriz[0][0] == o && matriz[0][1] == x && matriz[0][2] == o && matriz[1][1] == o &&
		matriz[1][2] == x && matriz[2][0] == x && matriz[2][1] == o && matriz[2][2] == x)
	{
		if (podeJogar(1, 0))		
			return matriz[1][0] = simbolo;		
	}
	if (matriz[0][0] == o && matriz[0][1] == x && matriz[0][2] == x && matriz[1][0] == x &&
		matriz[1][1] == o && matriz[1][2] == o && matriz[2][0] == o && matriz[2][2] == x)
	{
		if (podeJogar(2, 1))		
			return matriz[2][1] = simbolo;		
	}
	// quando nao ha o q fazer 3
	if (matriz[0][0] == o && matriz[0][1] == x && matriz[0][2] == o && matriz[1][1] == x && matriz[2][0] == x
		&& matriz[2][1] == o && matriz[2][2] == x)
	{
		if (podeJogar(1, 0))		
			return matriz[1][0] = simbolo;		
	}
	if (matriz[0][0] == x && matriz[0][2] == o && matriz[1][0] == o && matriz[1][1] == x && matriz[1][2] == x
		&& matriz[2][0] == x && matriz[2][2] == o)
	{
		if (podeJogar(0, 1))	
			return matriz[0][1] = simbolo;		
	}
	if (matriz[0][0] == x && matriz[0][1] == o && matriz[0][2] == x && matriz[1][1] == x && matriz[2][0] == o
		&& matriz[2][1] == x && matriz[2][2] == o)
	{
		if (podeJogar(1, 0))		
			return matriz[1][0] = simbolo;		
	}
	if (matriz[0][0] == o && matriz[0][2] == x && matriz[1][0] == x && matriz[1][1] == x && matriz[1][2] == o
		&& matriz[2][0] == o && matriz[2][2] == x)
	{
		if (podeJogar(0, 1))		
			return matriz[0][1] = simbolo;		
	}

	if (matriz[0][0] == x && matriz[0][1] == o && matriz[0][2] == x && matriz[1][0] == o && matriz[1][1] == x
		&& matriz[2][0] == o && matriz[2][1] == x && matriz[2][2] == o)
	{
		if (podeJogar(1, 2))		
			return matriz[1][2] = simbolo;		
	}

	if (matriz[0][0] == x && matriz[0][1] == o && matriz[0][2] == x && matriz[1][0] == x && matriz[1][1] == o
		&& matriz[2][0] == o && matriz[2][1] == x && matriz[2][2] == o)
	{
		if (podeJogar(1, 2))		
			return matriz[1][2] = simbolo;		
	}
}






 

adicionado 1 minuto depois

Rapaz, ficou bem extenso o código agora vendo o mesmo postado hehe

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Baseado no código q postei acima, alguém teria alguma dica para melhorar o implementação das jogadas do computador.

Para ser sincero, estou um tanto qto incomodado pela forma como fiz, usando a lógica q estou usando, como também pelo extenso código do modo como ficou.

Creio q deve haver alguma forma de deixar esse código mais automatizado e com a mesma funcionalidade

Grato! 

adicionado 1 minuto depois

Sem mencionar q a pergunta feita pela autora do tópico está fazendo menção ao C++, e eu passei códigos em C

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...