Escolar Documentos
Profissional Documentos
Cultura Documentos
http://novojeitonerd.blogspot.com.br/2013/12/jogo-da-velha-emcc_24.html
CARIACICA-ES 20013
Objetivo
Fazer um jogo da velha em c/c++, e explicar como funciona e como formar um raciocnio para
este programa.
Uma regra que ao ficou clara acima que um jogador realiza uma jogada de cada vez, assim o
primeiro realiza uma jogada a e depois o outro.
E todos os alinhamentos podem ser feitos por qualquer um jogador.
este comando se encontra dentro do for ou seja com a variao de x e y vai preenchendo
todas as posies com (vazio).
3.1.2. Funo mostrar.
Objetivo desta funo mostrar a matriz com os seus devidos valores preenchidos, esta
funo foi feita de uma bem simples.
void mostrar()
{
system("cls");
cout<<" "<< matrix[0][0] <<" | "<< matrix[0][1] <<"| "<< matrix[0][2] <<"\n"
<<" --|--|--\n"
<< " "<< matrix[1][0] <<" | "<< matrix[1][1] <<"| "<< matrix[1][2]<<"\n"
<<" --|--|--\n"
<< " "<< matrix[2][0] <<" | "<< matrix[2][1] <<"| "<< matrix[2][2]<<"\n"<<endl;
}
O que pode ser reparado aqui neste trecho a funo system(cls), esta funo limpa a
tela, o comando, cout<< ,tem a funo de mostra na tela, pode reparar diversos
espaos vazios , eles tem a simples funo te dar algum espao para ficar as linhas e
colunas ficarem bem alinhados.
O comando <<endl ele normalmente usado com o cout como mostra acima e ele serve
para forar o cout a jogar os dados na tela.
no caso; void preenchimento() significa que retornar nada e a funo tem o nome
de preenchimento.
Esta funo tem algumas coisas interessantes foi levado em considerao como
nos interpretamos. Ao invs de nos considerar que inicie com 0 podemos
considerar que a contagem comece com 1 , a figura abaixo mostra este fato, se
torna muito mais fcil pensar que a contagem comece com 1 .
Aps o recebimento dos dados feito pelo comando cin>>, feito a analise
Com o comando IF , a condio analisada se x e maior que zero e menor
igual que 3, e se y maior que zero e menor igual a 3, se o campo em questo se
encontra como (vazio). Feito pelo comando abaixo:
matrix[x-1][y-1]==' ', se esta e as outras condies forem verdadeiras ento
armazenada o X na posio digitada.
Caso for falsa a condio dentro do comando if executado o bloco de comando
dentro do else que chama a prpria funo preenchimento como mostra trecho
de programa abaixo:
else
{
cout<<"\n posicao invalida";
preenchimento();
}
void teste()
{
//teste horizontal
if((matrix[0][0]==matrix[0][1])&&(matrix[0][1]==matrix[0][2])&&(matrix[0][0]!
=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[1][0]==matrix[1][1])&&(matrix[1][1]==matrix[1][2])&&(matrix[1][0]!
=' '))
{
termino=1;
venceu=matrix[1][0];
fimjogo();
}
if((matrix[2][0]==matrix[2][1])&&(matrix[2][1]==matrix[2][2])&&(matrix[2][0]!
=' '))
{
termino=1;
venceu=matrix[2][0];
fimjogo();
}
//teste vertical
if((matrix[0][0]==matrix[1][0])&&(matrix[1][0]==matrix[2][0])&&(matrix[0][0]!
=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][1]==matrix[1][1])&&(matrix[1][1]==matrix[2][1])&&(matrix[0][1]!
=' '))
{
termino=1;
venceu=matrix[0][1];
fimjogo();
}
if((matrix[0][2]==matrix[1][2])&&(matrix[1][2]==matrix[2][2])&&(matrix[0][2]!
=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
//teste na digonal
if((matrix[0][0]==matrix[1][1])&&(matrix[1][1]==matrix[2][2])&&(matrix[0][0]!
=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][2]==matrix[1][1])&&(matrix[1][1]==matrix[2][0])&&(matrix[0][2]!
=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
// teste sedeu velha
if ((jogada==5)&&(venceu==' '))
{
system("cls");
cout<<"\n\n de Velha \n digite s para Jogar de novo:";
char denovo;
cin>>denovo;
if(denovo=='s')
{
termino=0;
jogada=0;
jogo();
}
}
}
Um ponto importante a salientar o teste se deu velha, uma observao, Maximo de jogadas
que um jogador consegue realizar 5 , ento se o numero de jogada for igual a 5 e venceu
iagual a (vazio) entaoo jogo deu velha.
Outro ponto importante deste cdigo, a possibilidade de jogar de novo a partida sem ter que
sair do programa e entrar de novo. Para isto foi declarado uma varivel chamada denovo se
a pessoa digitar s coloca a varivel termino como 0, e jogada tambm como 0, e chama a
funo jogo(), esta funo chama as demais funo do jogo, mais a frente ser falado dela.
Caso seja marcado algum outro quadrado o computador marcar o meio. Como j
definido anteriormente.
Trecho do cdigo da primeira jogada.
if(jogada==0)
{
if((matrix[0][0]==' ')&&(matrix[0][2]==' ')&&(matrix[2][0]=='
')&&(matrix[2][2]==' '))
{
if(matrix[1][1]==' ')
{
matrix[0][0]='O';
cond=1;
}else{
matrix[1][0]='O';
cond=1;
}
}else
{
matrix[1][1]='O';
cond=1;
}
}
Repare que possui uma varivel, cond e ela recebe 1, ES todas as condies esta
varivel, foi uma forma de encontra do jogador jogar s uma vez por partida. No
momento em a funo chamada inicia esta varivel com 0, e ento no inicio da
funo tem uma condio que s executar estes comandos caso cond for 0, e no
momento que acontece uma jogado do PC ele coloca 1 na cond e no executa
mais este bloco de cdigos.
3.2.3.2. Outras jogadas.
Apartir da segunda jogada o computador j tem material para analise.
E assim efetuar uma jogada de acordo com as condies, devo lembrar que as
combinaes de jogadas so muito grandes, mas tentei fazer isto pensar nas
jogadas mais comuns.
Separei a lgica basicamente em 3 situaoes:
Para fim de ganhar
Para atrapalhar
Jogada para preencher.
Pode reparar que basicamente ns quando estamos jogando usamos tambm,
esta estratgia, se no posso ganhar, vou tentar atrapalhar o outro ganhar , e um
terceira opo em que ainda no tem as condies suficiente para analisar para
efetuar as duas estatgia de cima , jogamos por jogar sem levar muita coisa em
considerao.
3.2.3.2.1.
E lembrando o mapa :
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[1][0]=='O')&&(matrix[2][0]=='O')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[2][2]=='O')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[2][1]=='O')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[2][1]=='O')&&(matrix[2][2]=='O')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][2]=='O')&&(matrix[0][2]=='O')&&(matrix[1][2]==' '))
{
matrix[1][2]='O';
cond=1;
}else
if((matrix[2][2]=='O')&&(matrix[1][2]=='O')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[1][2]=='O')&&(matrix[0][2]=='O')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[0][1]=='O')&&(matrix[2][1]=='O')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][1]=='O')&&(matrix[1][1]=='O')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[1][1]=='O')&&(matrix[2][1]=='O')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][2]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[1][1]=='O')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[1][1]=='O')&&(matrix[2][2]=='O')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[2][0]=='O')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[1][1]=='O')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[1][1]=='O')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}
O cdigo acima bem simples, ento no vejo por que explicar cada linha. No geral s analisa
cada linha como demonstrei as situaes possveis na figura das jogadas para ganhar, e
preenche o que faltar para poder fazer o alinhamento.
3.2.3.2.2.
Para atrapalhar.
Esta situao consiste aquele momento em que o adversrio esta quase
formando um alinhamento e vc vai La e atrapalha.
As condies so a mesma para ganhar se que neste momento , analisado a
situao das peas do adversrio, e ento vai La e atrapalha.
Figura de possibilidades:
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[0][1]=='X')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][0]=='X')&&(matrix[1][0]==' '))
{
matrix[1][0]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[1][0]=='X')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[1][0]=='X')&&(matrix[2][0]=='X')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[2][2]=='X')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[2][1]=='X')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[2][1]=='X')&&(matrix[2][2]=='X')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][2]=='X')&&(matrix[0][2]=='X')&&(matrix[1][2]==' '))
{
matrix[1][2]='O';
cond=1;
}else
if((matrix[2][2]=='X')&&(matrix[1][2]=='X')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[1][2]=='X')&&(matrix[0][2]=='X')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[0][1]=='X')&&(matrix[2][1]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][1]=='X')&&(matrix[1][1]=='X')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[1][1]=='X')&&(matrix[2][1]=='X')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][2]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[1][1]=='X')&&(matrix[2][2]==' '))
{
matrix[2][2]='0';
cond=1;
}else
if((matrix[1][1]=='X')&&(matrix[2][2]=='X')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[2][0]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[1][1]=='X')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[1][1]=='X')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}
Como j mencionado o cdigo muito simples,no tem nenhuma
complicao.
3.2.3.2.3.
Cdigo abaixo.
for (int x=0;x<3;x++)
for (int y=0;y<3;y++)
{
if((cond==0)&&(matrix[x][y]==' '))
{
matrix[x][y]='O';
cond=1;
}
}
O cdigo acima, bem simples e j detalhei anteriormente.
if((matrix[0][0]=='O')&&(matrix[0][2]=='O')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[0][1]=='O')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[0][1]=='O')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[2][0]=='O')&&(matrix[1][0]==' '))
{
matrix[1][0]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[1][0]=='O')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[1][0]=='O')&&(matrix[2][0]=='O')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[2][2]=='O')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[2][1]=='O')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[2][1]=='O')&&(matrix[2][2]=='O')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][2]=='O')&&(matrix[0][2]=='O')&&(matrix[1][2]==' '))
{
matrix[1][2]='O';
cond=1;
}else
if((matrix[2][2]=='O')&&(matrix[1][2]=='O')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[1][2]=='O')&&(matrix[0][2]=='O')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[0][1]=='O')&&(matrix[2][1]=='O')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][1]=='O')&&(matrix[1][1]=='O')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[1][1]=='O')&&(matrix[2][1]=='O')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][2]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[1][1]=='O')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[1][1]=='O')&&(matrix[2][2]=='O')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[2][0]=='O')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[1][1]=='O')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[1][1]=='O')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
//para atrapalhar o oponente a ganhar
if((matrix[0][0]=='X')&&(matrix[0][2]=='X')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[0][1]=='X')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[0][1]=='X')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][0]=='X')&&(matrix[1][0]==' '))
{
matrix[1][0]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[1][0]=='X')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[1][0]=='X')&&(matrix[2][0]=='X')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[2][2]=='X')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[2][1]=='X')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[2][1]=='X')&&(matrix[2][2]=='X')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][2]=='X')&&(matrix[0][2]=='X')&&(matrix[1][2]==' '))
{
matrix[1][2]='O';
cond=1;
}else
if((matrix[2][2]=='X')&&(matrix[1][2]=='X')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[1][2]=='X')&&(matrix[0][2]=='X')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[0][1]=='X')&&(matrix[2][1]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][1]=='X')&&(matrix[1][1]=='X')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[1][1]=='X')&&(matrix[2][1]=='X')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][2]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[1][1]=='X')&&(matrix[2][2]==' '))
{
matrix[2][2]='0';
cond=1;
}else
if((matrix[1][1]=='X')&&(matrix[2][2]=='X')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[2][0]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[1][1]=='X')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[1][1]=='X')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}
else{
for (int x=0;x<3;x++)
for (int y=0;y<3;y++)
{
if((cond==0)&&(matrix[x][y]==' '))
{
matrix[x][y]='O';
cond=1;
}
}
}
}} }
Funo main
Cdigo completo da funo.
int main()
{
while ((jogada<=9)&&(termino!=1))
{
jogo();
jogada++;
}
system("pause");
}
Pode ver que uma funo bem simples por que eu concentrei as chamadas das funes
dentro de outras como por exemplo a funo jogo e a funo teste.
char matrix[3][3];
int termino=0, jogada=0;
char venceu=' ';
void iniciacao();
void mostrar();
void preenchimento();
void movimento();
void jogo();
void fimjogo();
void teste();
int main()
{
while ((jogada<=9)&&(termino!=1))
{
jogo();
jogada++;
}
system("pause");
}
void iniciacao()
{
for(int x=0;x<3;x++)
for(int y=0;y<3;y++)
matrix[x][y]=' ';
}
void mostrar()
{
system("cls");
cout<<" "<< matrix[0][0] <<" | "<< matrix[0][1] <<"| "<< matrix[0][2] <<"\n"
<<" --|--|--\n"
<< " "<< matrix[1][0] <<" | "<< matrix[1][1] <<"| "<< matrix[1][2]<<"\n"
<<" --|--|--\n"
<< " "<< matrix[2][0] <<" | "<< matrix[2][1] <<"| "<<
matrix[2][2]<<"\n"<<endl;
}
void preenchimento()
{
int x=0,y=0;
{
cout<<"\n posicao invalida";
preenchimento();
}
}
void movimento()
{
int cond=0;
if (cond==0)
{
if(jogada==0)
{
if((matrix[0][0]==' ')&&(matrix[0][2]==' ')&&(matrix[2][0]=='
')&&(matrix[2][2]==' '))
{
if(matrix[1][1]==' ')
{
matrix[0][0]='O';
cond=1;
}else{
matrix[1][0]='O';
cond=1;
}
}else
{
matrix[1][1]='O';
cond=1;
}
}
else
{
if((matrix[0][0]=='O')&&(matrix[0][2]=='O')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[0][1]=='O')&&(matrix[0][2]=='
'))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[0][1]=='O')&&(matrix[0][0]=='
'))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[2][0]=='O')&&(matrix[1][0]=='
'))
{
matrix[1][0]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[1][0]=='O')&&(matrix[2][0]=='
'))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[1][0]=='O')&&(matrix[2][0]=='O')&&(matrix[0][0]=='
'))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[2][2]=='O')&&(matrix[2][1]=='
'))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[2][1]=='O')&&(matrix[2][2]=='
'))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[2][1]=='O')&&(matrix[2][2]=='O')&&(matrix[2][0]=='
'))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][2]=='O')&&(matrix[0][2]=='O')&&(matrix[1][2]=='
'))
{
matrix[1][2]='O';
cond=1;
}else
if((matrix[2][2]=='O')&&(matrix[1][2]=='O')&&(matrix[0][2]=='
'))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[1][2]=='O')&&(matrix[0][2]=='O')&&(matrix[2][2]=='
'))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[0][1]=='O')&&(matrix[2][1]=='O')&&(matrix[1][1]=='
'))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][1]=='O')&&(matrix[1][1]=='O')&&(matrix[2][1]=='
'))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[1][1]=='O')&&(matrix[2][1]=='O')&&(matrix[0][1]=='
'))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][2]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[1][1]=='O')&&(matrix[2][2]=='
'))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[1][1]=='O')&&(matrix[2][2]=='O')&&(matrix[0][0]=='
'))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[2][0]=='O')&&(matrix[1][1]=='
'))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[1][1]=='O')&&(matrix[2][0]=='
'))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[1][1]=='O')&&(matrix[0][2]=='
'))
{
matrix[0][2]='O';
cond=1;
}else
//para atrapalhar o oponente a ganhar
if((matrix[0][0]=='X')&&(matrix[0][2]=='X')&&(matrix[0][1]=='
'))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[0][1]=='X')&&(matrix[0][2]=='
'))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[0][1]=='X')&&(matrix[0][0]=='
'))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][0]=='X')&&(matrix[1][0]=='
'))
{
matrix[1][0]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[1][0]=='X')&&(matrix[2][0]=='
'))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[1][0]=='X')&&(matrix[2][0]=='X')&&(matrix[0][0]=='
'))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[2][2]=='X')&&(matrix[2][1]=='
'))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[2][1]=='X')&&(matrix[2][2]=='
'))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[2][1]=='X')&&(matrix[2][2]=='X')&&(matrix[2][0]=='
'))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][2]=='X')&&(matrix[0][2]=='X')&&(matrix[1][2]=='
'))
{
matrix[1][2]='O';
cond=1;
}else
if((matrix[2][2]=='X')&&(matrix[1][2]=='X')&&(matrix[0][2]=='
'))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[1][2]=='X')&&(matrix[0][2]=='X')&&(matrix[2][2]=='
'))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[0][1]=='X')&&(matrix[2][1]=='X')&&(matrix[1][1]=='
'))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][1]=='X')&&(matrix[1][1]=='X')&&(matrix[2][1]=='
'))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[1][1]=='X')&&(matrix[2][1]=='X')&&(matrix[0][1]=='
'))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][2]=='X')&&(matrix[1][1]=='
'))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[1][1]=='X')&&(matrix[2][2]=='
'))
{
matrix[2][2]='0';
cond=1;
}else
if((matrix[1][1]=='X')&&(matrix[2][2]=='X')&&(matrix[0][0]=='
'))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[2][0]=='X')&&(matrix[1][1]=='
'))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[1][1]=='X')&&(matrix[2][0]=='
'))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[1][1]=='X')&&(matrix[0][2]=='
'))
{
matrix[0][2]='O';
cond=1;
}
else{
for (int x=0;x<3;x++)
for (int y=0;y<3;y++)
{
if((cond==0)&&(matrix[x][y]==' '))
{
matrix[x][y]='O';
cond=1;
}
}
}
}
}
}
void jogo()
{
if (jogada==0) iniciacao();
mostrar();
preenchimento();
teste();
movimento();
teste();
}
void fimjogo()
{
system("cls");
mostrar();
cout<<"o jogador "<<venceu<<" Venceu\n digite s para jogar de novo: ";
char denovo;
cin>>denovo;
if(denovo=='s')
{
venceu=' ';
termino=0;
jogada=0;
jogo();
}
}
void teste()
{
//teste horizontal
if((matrix[0][0]==matrix[0][1])&&(matrix[0][1]==matrix[0][2])&&(matrix[0][0]!
=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[1][0]==matrix[1][1])&&(matrix[1][1]==matrix[1][2])&&(matrix[1][0]!
=' '))
{
termino=1;
venceu=matrix[1][0];
fimjogo();
}
if((matrix[2][0]==matrix[2][1])&&(matrix[2][1]==matrix[2][2])&&(matrix[2][0]!
=' '))
{
termino=1;
venceu=matrix[2][0];
fimjogo();
}
//teste vertical
if((matrix[0][0]==matrix[1][0])&&(matrix[1][0]==matrix[2][0])&&(matrix[0][0]!
=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][1]==matrix[1][1])&&(matrix[1][1]==matrix[2][1])&&(matrix[0][1]!
=' '))
{
termino=1;
venceu=matrix[0][1];
fimjogo();
}
if((matrix[0][2]==matrix[1][2])&&(matrix[1][2]==matrix[2][2])&&(matrix[0][2]!
=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
//teste na digonal
if((matrix[0][0]==matrix[1][1])&&(matrix[1][1]==matrix[2][2])&&(matrix[0][0]!
=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][2]==matrix[1][1])&&(matrix[1][1]==matrix[2][0])&&(matrix[0][2]!
=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
// teste sedeu velha
if ((jogada==4)&&(venceu==' '))
{
system("cls");
cout<<"\n\n de Velha \n digite s para Jogar de novo:";
char denovo;
cin>>denovo;
if(denovo=='s')
{
venceu=' ';
termino=0;
jogada=0;
jogo();
}
}
}
char matrix[3][3];
int termino=0, jogada=0;
char venceu=' ';
void iniciacao();
void mostrar();
void preenchimento();
void movimento();
void jogo();
void fimjogo();
void teste();
int main()
{
while ((jogada<=9)&&(termino!=1))
{
jogo();
jogada++;
}
system("pause");
}
void iniciacao()
{
for(int x=0;x<3;x++)
for(int y=0;y<3;y++)
matrix[x][y]=' ';
}
void mostrar()
{
system("cls");
cout<<" "<< matrix[0][0] <<" | "<< matrix[0][1] <<"| "<< matrix[0][2] <<"\n"
<<" --|--|--\n"
<< " "<< matrix[1][0] <<" | "<< matrix[1][1] <<"| "<< matrix[1][2]<<"\n"
<<" --|--|--\n"
<< " "<< matrix[2][0] <<" | "<< matrix[2][1] <<"| "<<
matrix[2][2]<<"\n"<<endl;
}
void preenchimento()
{
int x=0,y=0;
}
void movimento()
{
int cond=0;
fimjogo();
}
if((matrix[1][0]==matrix[1][1])&&(matrix[1][1]==matrix[1][2])&&(matrix[1][0]!
=' '))
{
termino=1;
venceu=matrix[1][0];
fimjogo();
}
if((matrix[2][0]==matrix[2][1])&&(matrix[2][1]==matrix[2][2])&&(matrix[2][0]!
=' '))
{
termino=1;
venceu=matrix[2][0];
fimjogo();
}
//teste vertical
if((matrix[0][0]==matrix[1][0])&&(matrix[1][0]==matrix[2][0])&&(matrix[0][0]!
=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][1]==matrix[1][1])&&(matrix[1][1]==matrix[2][1])&&(matrix[0][1]!
=' '))
{
termino=1;
venceu=matrix[0][1];
fimjogo();
}
if((matrix[0][2]==matrix[1][2])&&(matrix[1][2]==matrix[2][2])&&(matrix[0][2]!
=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
//teste na digonal
if((matrix[0][0]==matrix[1][1])&&(matrix[1][1]==matrix[2][2])&&(matrix[0][0]!
=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][2]==matrix[1][1])&&(matrix[1][1]==matrix[2][0])&&(matrix[0][2]!
=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
// teste sedeu velha
if ((jogada==4)&&(venceu==' '))
{
system("cls");
cout<<"\n\n de Velha \n digite s para Jogar de novo:";
char denovo;
cin>>denovo;
if(denovo=='s')
{
venceu=' ';
termino=0;
jogada=0;
jogo();
}
}
}
char matrix[3][3];
int termino=0, jogada=0;
char venceu=' ';
void iniciacao();
void mostrar();
void preenchimento();
void movimento();
void jogo();
void fimjogo();
void teste();
int main()
{
while ((jogada<=9)&&(termino!=1))
{
jogo();
jogada++;
}
system("pause");
}
void iniciacao()
{
for(int x=0;x<3;x++)
for(int y=0;y<3;y++)
matrix[x][y]=' ';
}
void mostrar()
{
system("cls");
cout<<" "<< matrix[0][0] <<" | "<< matrix[0][1] <<"| "<< matrix[0][2] <<"\n"
<<" --|--|--\n"
<< " "<< matrix[1][0] <<" | "<< matrix[1][1] <<"| "<< matrix[1][2]<<"\n"
<<" --|--|--\n"
<< " "<< matrix[2][0] <<" | "<< matrix[2][1] <<"| "<<
matrix[2][2]<<"\n"<<endl;
}
void preenchimento()
{
int x=0,y=0;
cin>>y;
if((x<=3)&&(x>0)&&(y<=3)&&(y>0)&&(matrix[x-1][y-1]==' '))
{
matrix[x-1][y-1]='X';
}else
{
cout<<"\n posicao invalida";
preenchimento();
}
}
void movimento()
{
int x=0,y=0;
}
void jogo()
{
if (jogada==0) iniciacao();
mostrar();
preenchimento();
teste();
movimento();
teste();
}
void fimjogo()
{
system("cls");
mostrar();
cout<<"o jogador "<<venceu<<" Venceu\n digite s para jogar de novo: ";
char denovo;
cin>>denovo;
if(denovo=='s')
{
venceu=' ';
termino=0;
jogada=0;
jogo();
}
}
void teste()
{
//teste horizontal
if((matrix[0][0]==matrix[0][1])&&(matrix[0][1]==matrix[0][2])&&(matrix[0][0]!
=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[1][0]==matrix[1][1])&&(matrix[1][1]==matrix[1][2])&&(matrix[1][0]!
=' '))
{
termino=1;
venceu=matrix[1][0];
fimjogo();
}
if((matrix[2][0]==matrix[2][1])&&(matrix[2][1]==matrix[2][2])&&(matrix[2][0]!
=' '))
{
termino=1;
venceu=matrix[2][0];
fimjogo();
}
//teste vertical
if((matrix[0][0]==matrix[1][0])&&(matrix[1][0]==matrix[2][0])&&(matrix[0][0]!
=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][1]==matrix[1][1])&&(matrix[1][1]==matrix[2][1])&&(matrix[0][1]!
=' '))
{
termino=1;
venceu=matrix[0][1];
fimjogo();
}
if((matrix[0][2]==matrix[1][2])&&(matrix[1][2]==matrix[2][2])&&(matrix[0][2]!
=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
//teste na digonal
if((matrix[0][0]==matrix[1][1])&&(matrix[1][1]==matrix[2][2])&&(matrix[0][0]!
=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][2]==matrix[1][1])&&(matrix[1][1]==matrix[2][0])&&(matrix[0][2]!
=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
// teste sedeu velha
if ((jogada==4)&&(venceu==' '))
{
system("cls");
cout<<"\n\n de Velha \n digite s para Jogar de novo:";
char denovo;
cin>>denovo;
if(denovo=='s')
{
venceu=' ';
termino=0;
jogada=0;
jogo();
}
}
}
7. Concluso
Quis aqui fazer um material completo, sobre este jogo , e explicando passo a passo. E
cada raciocnio que seguir, bem provvel, que se desenvolvesse este cdigo de novo
, varia de outra forma, de uma maneira talvez mais dinmica.
Foi desenvolvido um jogo da velha pode ter algumas melhorias, mas no tempo em que
tive me dou como satisfeito, em obter estes resultados.
Este programa , tem uma verso que simula uma inteligncia artificial. uma
parte interessante do programa.
Objetivo
Fazer um jogo da velha em c/c++, e explicar como funciona e como formar um
raciocnio para este programa.
1.
Jogo, com Regras simples , recebeu este nome na Inglaterra quando um grupo de
mulheres que se reuniam para conversar e bordar , as idosas por causas das
debilidades e suas vises, jogavam este jogo. Por isto o nome Jogo da Velha por que
em maiorias eram as idosas que jogavam , como no poderiam bordar e fazer outras
coisas nos seus momentos de distraes.
Este Jogo foi encontrados em diversas culturas da antiguidade, um deles foram
encontrados no Egito com data do sculo XIV antes de Cristo. E na china com data de
500 A.C.
Tambm encontradas na Amrica Pr-Colombiana.
2.
Alinhamentos nas
horizontais
Uma regra que ao ficou clara acima que um jogador realiza uma jogada de cada vez,
assim o primeiro realiza uma jogada a e depois o outro.
E todos os alinhamentos podem ser feitos por qualquer um jogador.
1.
funo de iniciao
Esta funo tem o objetivo de esvaziar (ou preencher com um caractere
conhecido ) a matriz do jogo.
O campo do Jogo da Velha, representada por uma matriz 3 por 3.
Segue a declarao desta matriz.
char matrix[3][3];
para evitar possveis erros de lgica uma boa forma de evitar isto
inicializar a matriz.
O comando for utilizado para efetuar repetio e assim preencher a
matriz de uma forma rpida.
void iniciacao()
{
for(int x=0;x<3;x++)
for(int y=0;y<3;y++)
matrix[x][y]=' ';
}
Na linha void iniciacao() , esta uma forma declarao de funo o void
significa que ir retornar vazio , ou seja que no retornara nada.
O comando:
for(int x=0;x<3;x++)
for(int y=0;y<3;y++)
Funo mostrar.
Objetivo desta funo mostrar a matriz com os seus devidos valores preenchidos,
esta funo foi feita de uma bem simples.
void mostrar()
{
system("cls");
cout<<" "<< matrix[0][0] <<" | "<< matrix[0][1] <<"| "<< matrix[0][2]
<<"\n"
<<" --|--|--\n"
<< " "<< matrix[1][0] <<" | "<< matrix[1][1] <<"| "<< matrix[1][2]<<"\n"
<<" --|--|--\n"
<< " "<< matrix[2][0] <<" | "<< matrix[2][1] <<"| "<<
matrix[2][2]<<"\n"<<endl;
}
O que pode ser reparado aqui neste trecho a funo system(cls), esta funo
limpa a tela, o comando, cout<< ,tem a funo de mostra na tela, pode reparar
diversos espaos vazios , eles tem a simples funo te dar algum espao para
ficar as linhas e colunas ficarem bem alinhados.
O comando <<endl ele normalmente usado com o cout como mostra acima e
ele serve para forar o cout a jogar os dados na tela.
3.1.3.
Funo de preenchimento
Esta funo tem com o objetivo de ns entrarmos com o dado, ou seja nos falarmos
aonde ser marcado o X
Esta funo tem algumas coisas interessantes foi levado em considerao como nos
interpretamos. Ao invs de nos considerar que inicie com 0 podemos considerar que a
contagem comece com 1 , a figura abaixo mostra este fato, se torna muito mais fcil
pensar que a contagem comece com 1 .
Para corrigir este erro foi feito o seguinte subtrado 1 da posio x e y no momento
em que gravado o valor x na posio cdigo abaixo:
matrix[x-1][y-1]='X';
Aps o recebimento dos dados feito pelo comando cin>>, feito a analise
Funo teste
O objetivo desta funo e verificar se houve vencedor , como so poucas
coisas a analisar foi feito um a um de forma que fique bem clara a analise.
Mais uma vez levando a considerao a figura.
void teste()
{
//teste horizontal
if((matrix[0][0]==matrix[0][1])&&(matrix[0][1]==matrix[0][2])&&(matrix[0
][0]!=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[1][0]==matrix[1][1])&&(matrix[1][1]==matrix[1][2])&&(matrix[1
][0]!=' '))
{
termino=1;
venceu=matrix[1][0];
fimjogo();
}
if((matrix[2][0]==matrix[2][1])&&(matrix[2][1]==matrix[2][2])&&(matrix[2
][0]!=' '))
{
termino=1;
venceu=matrix[2][0];
fimjogo();
}
//teste vertical
if((matrix[0][0]==matrix[1][0])&&(matrix[1][0]==matrix[2][0])&&(matrix[0
][0]!=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][1]==matrix[1][1])&&(matrix[1][1]==matrix[2][1])&&(matrix[0
][1]!=' '))
{
termino=1;
venceu=matrix[0][1];
fimjogo();
}
if((matrix[0][2]==matrix[1][2])&&(matrix[1][2]==matrix[2][2])&&(matrix[0
][2]!=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
//teste na digonal
if((matrix[0][0]==matrix[1][1])&&(matrix[1][1]==matrix[2][2])&&(matrix[0
][0]!=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][2]==matrix[1][1])&&(matrix[1][1]==matrix[2][0])&&(matrix[0
][2]!=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
// teste sedeu velha
if ((jogada==5)&&(venceu==' '))
{
system("cls");
cout<<"\n\n de Velha \n digite s para Jogar de novo:";
char denovo;
cin>>denovo;
if(denovo=='s')
{
termino=0;
jogada=0;
jogo();
}
}
}
3.2.1.
Esta jogada, o tipo mais simples de jogada feito pelo computador, esta consiste
simplesmente no computador passar a matriz e primeiro espao vazio que encontrar
colocar o O;
O conceito bem simples, embora tem que tomar cuidados com alguns conceitos
lgicos, para contornar este conceitos foi criado uma varivel com o nome de cond e
iniciado com 0, assim depois de que efetuado a jogada do computador, colocado e
dentro desta varivel ai no acontecera mais movimento pelo computador neste
momento.
O trecho do cdigo mencionado segue abaixo:
if((cond==0)&&(matrix[x][y]==' '))
{
matrix[x][y]='O';
cond=1;
}
S acontece o movimento se cond igual a 0 e matrix[x][y]== (vazio), elogo coloca 1
dentro da varivel cond desta forma no executa mais de uma jogada por vez.
Cdigo completo da funo segue abaixo:
void movimento()
{
int cond=0;
for (int x=0;x<=2;x++)
for (int y=0;y<=2;y++)
{
if((cond==0)&&(matrix[x][y]==' '))
{
matrix[x][y]='O';
cond=1;
}
}}
3.2.2.
void movimentopessoa()
{
int x=0,y=0;
}else
{
cout<<"\n posicao invalida";
preenchimento();
}
}
3.2.3.
Computador Com Analise (Inteligncia Artificial)
Foi deixado por ultimo por ser a parte mais complexa. Esta parte o tenta
fazer o computador parecer inteligente (por isto utilizei o termo Inteligncia
Artificial).
bem provvel que tenha como fazer isto de maneira mais dinmica, mas por causa
do fator tempo, vou demonstrar a analise por analise e desta forma fica mais fcil de
entender.
Caso seja marcado algum outro quadrado o computador marcar o meio. Como j
definido anteriormente.
if(jogada==0)
{
if((matrix[0][0]==' ')&&(matrix[0][2]==' ')&&(matrix[2][0]=='
')&&(matrix[2][2]==' '))
{
if(matrix[1][1]==' ')
{
matrix[0][0]='O';
cond=1;
}else{
matrix[1][0]='O';
cond=1;
}
}else
{
matrix[1][1]='O';
cond=1;
}
}
Repare que possui uma varivel, cond e ela recebe 1, ES todas as condies esta
varivel, foi uma forma de encontra do jogador jogar s uma vez por partida. No
momento em a funo chamada inicia esta varivel com 0, e ento no inicio da
funo tem uma condio que s executar estes comandos caso cond for 0, e no
momento que acontece uma jogado do PC ele coloca 1 na cond e no executa mais
este bloco de cdigos.
Apartir da segunda jogada o computador j tem material para analise.E assim efetuar
uma jogada de acordo com as condies, devo lembrar que as combinaes de
jogadas so muito grandes, mas tentei fazer isto pensar nas jogadas mais comuns.
Separei a lgica basicamente em 3 situaoes:
Para atrapalhar
Pode reparar que basicamente ns quando estamos jogando usamos tambm, esta
estratgia, se no posso ganhar, vou tentar atrapalhar o outro ganhar , e um terceira
opo em que ainda no tem as condies suficiente para analisar para efetuar as
duas estatgia de cima , jogamos por jogar sem levar muita coisa em considerao.
3.2.3.2.1.
E lembrando o mapa :
if((matrix[0][0]=='O')&&(matrix[0][2]=='O')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[0][1]=='O')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[0][1]=='O')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[2][0]=='O')&&(matrix[1][0]==' '))
{
matrix[1][0]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[1][0]=='O')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[1][0]=='O')&&(matrix[2][0]=='O')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[2][2]=='O')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[2][1]=='O')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[2][1]=='O')&&(matrix[2][2]=='O')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][2]=='O')&&(matrix[0][2]=='O')&&(matrix[1][2]==' '))
{
matrix[1][2]='O';
cond=1;
}else
if((matrix[2][2]=='O')&&(matrix[1][2]=='O')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[1][2]=='O')&&(matrix[0][2]=='O')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[0][1]=='O')&&(matrix[2][1]=='O')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][1]=='O')&&(matrix[1][1]=='O')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[1][1]=='O')&&(matrix[2][1]=='O')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][2]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[1][1]=='O')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[1][1]=='O')&&(matrix[2][2]=='O')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[2][0]=='O')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[1][1]=='O')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[1][1]=='O')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}
O cdigo acima bem simples, ento no vejo por que explicar cada linha. No geral
s analisa cada linha como demonstrei as situaes possveis na figura das jogadas
para ganhar, e preenche o que faltar para poder fazer o alinhamento.
3.2.3.2.2.
Para atrapalhar.
Esta situao consiste aquele momento em que o adversrio esta quase formando um
alinhamento e vc vai La e atrapalha.
if((matrix[0][0]=='X')&&(matrix[0][2]=='X')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[0][1]=='X')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[0][1]=='X')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][0]=='X')&&(matrix[1][0]==' '))
{
matrix[1][0]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[1][0]=='X')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[1][0]=='X')&&(matrix[2][0]=='X')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[2][2]=='X')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[2][1]=='X')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[2][1]=='X')&&(matrix[2][2]=='X')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][2]=='X')&&(matrix[0][2]=='X')&&(matrix[1][2]==' '))
{
matrix[1][2]='O';
cond=1;
}else
if((matrix[2][2]=='X')&&(matrix[1][2]=='X')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[1][2]=='X')&&(matrix[0][2]=='X')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[0][1]=='X')&&(matrix[2][1]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][1]=='X')&&(matrix[1][1]=='X')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[1][1]=='X')&&(matrix[2][1]=='X')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][2]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[1][1]=='X')&&(matrix[2][2]==' '))
{
matrix[2][2]='0';
cond=1;
}else
if((matrix[1][1]=='X')&&(matrix[2][2]=='X')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[2][0]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[1][1]=='X')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[1][1]=='X')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}
Como j mencionado o cdigo muito simples,no tem nenhuma
complicao.
3.2.3.2.3.
Cdigo abaixo.
for (int x=0;x<3;x++)
for (int y=0;y<3;y++)
{
if((cond==0)&&(matrix[x][y]==' '))
{
matrix[x][y]='O';
cond=1;
}
}
O cdigo acima, bem simples e j detalhei anteriormente.
void movimento()
{
int cond=0;
if (cond==0)
{
if(jogada==0)
{
if((matrix[0][0]==' ')&&(matrix[0][2]==' ')&&(matrix[2][0]=='
')&&(matrix[2][2]==' '))
{
if(matrix[1][1]==' ')
{
matrix[0][0]='O';
cond=1;
}else{
matrix[1][0]='O';
cond=1;
}
}else
{
matrix[1][1]='O';
cond=1;
}
}
else
{
if((matrix[0][0]=='O')&&(matrix[0][2]=='O')&&(matrix[0][1]=='
'))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[0][1]=='O')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[0][1]=='O')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[2][0]=='O')&&(matrix[1][0]==' '))
{
matrix[1][0]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[1][0]=='O')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[1][0]=='O')&&(matrix[2][0]=='O')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[2][2]=='O')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[2][1]=='O')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[2][1]=='O')&&(matrix[2][2]=='O')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][2]=='O')&&(matrix[0][2]=='O')&&(matrix[1][2]==' '))
{
matrix[1][2]='O';
cond=1;
}else
if((matrix[2][2]=='O')&&(matrix[1][2]=='O')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[1][2]=='O')&&(matrix[0][2]=='O')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[0][1]=='O')&&(matrix[2][1]=='O')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][1]=='O')&&(matrix[1][1]=='O')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[1][1]=='O')&&(matrix[2][1]=='O')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][2]=='X')&&(matrix[1][1]=='
'))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[1][1]=='O')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[1][1]=='O')&&(matrix[2][2]=='O')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[2][0]=='O')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[1][1]=='O')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[1][1]=='O')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
//para atrapalhar o oponente a ganhar
if((matrix[0][0]=='X')&&(matrix[0][2]=='X')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[0][1]=='X')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[0][1]=='X')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][0]=='X')&&(matrix[1][0]==' '))
{
matrix[1][0]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[1][0]=='X')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[1][0]=='X')&&(matrix[2][0]=='X')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[2][2]=='X')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[2][1]=='X')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[2][1]=='X')&&(matrix[2][2]=='X')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][2]=='X')&&(matrix[0][2]=='X')&&(matrix[1][2]==' '))
{
matrix[1][2]='O';
cond=1;
}else
if((matrix[2][2]=='X')&&(matrix[1][2]=='X')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[1][2]=='X')&&(matrix[0][2]=='X')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[0][1]=='X')&&(matrix[2][1]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][1]=='X')&&(matrix[1][1]=='X')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[1][1]=='X')&&(matrix[2][1]=='X')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][2]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[1][1]=='X')&&(matrix[2][2]==' '))
{
matrix[2][2]='0';
cond=1;
}else
if((matrix[1][1]=='X')&&(matrix[2][2]=='X')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[2][0]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[1][1]=='X')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[1][1]=='X')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}
else{
for (int x=0;x<3;x++)
for (int y=0;y<3;y++)
{
if((cond==0)&&(matrix[x][y]==' '))
{
matrix[x][y]='O';
cond=1;
}
}
}
}} }
Funo jogo
Funo jogo
Funo main
Pode ver que uma funo bem simples por que eu concentrei as chamadas das
funes dentro de outras como por exemplo a funo jogo e a funo teste.
2.
char matrix[3][3];
int termino=0, jogada=0;
char venceu=' ';
void iniciacao();
void mostrar();
void preenchimento();
void movimento();
void jogo();
void fimjogo();
void teste();
int main()
{
while ((jogada<=9)&&(termino!=1))
{
jogo();
jogada++;
}
system("pause");
}
void iniciacao()
{
for(int x=0;x<3;x++)
for(int y=0;y<3;y++)
matrix[x][y]=' ';
}
void mostrar()
{
system("cls");
cout<<" "<< matrix[0][0] <<" | "<< matrix[0][1] <<"| "<<
matrix[0][2] <<"\n"
<<" --|--|--\n"
<< " "<< matrix[1][0] <<" | "<< matrix[1][1] <<"| "<<
matrix[1][2]<<"\n"
<<" --|--|--\n"
<< " "<< matrix[2][0] <<" | "<< matrix[2][1] <<"| "<<
matrix[2][2]<<"\n"<<endl;
}
void preenchimento()
{
int x=0,y=0;
cin>>y;
if((x<=3)&&(x>0)&&(y<=3)&&(y>0)&&(matrix[x-1][y-1]==' '))
{
matrix[x-1][y-1]='X';
}else
{
cout<<"\n posicao invalida";
preenchimento();
}
}
void movimento()
{
int cond=0;
if (cond==0)
{
if(jogada==0)
{
if((matrix[0][0]==' ')&&(matrix[0][2]==' ')&&(matrix[2][0]=='
')&&(matrix[2][2]==' '))
{
if(matrix[1][1]==' ')
{
matrix[0][0]='O';
cond=1;
}else{
matrix[1][0]='O';
cond=1;
}
}else
{
matrix[1][1]='O';
cond=1;
}
}
else
{
if((matrix[0][0]=='O')&&(matrix[0][2]=='O')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[0][1]=='O')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[0][1]=='O')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[2][0]=='O')&&(matrix[1][0]==' '))
{
matrix[1][0]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[1][0]=='O')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[1][0]=='O')&&(matrix[2][0]=='O')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[2][2]=='O')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[2][1]=='O')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[2][1]=='O')&&(matrix[2][2]=='O')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][2]=='O')&&(matrix[0][2]=='O')&&(matrix[1][2]==' '))
{
matrix[1][2]='O';
cond=1;
}else
if((matrix[2][2]=='O')&&(matrix[1][2]=='O')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[1][2]=='O')&&(matrix[0][2]=='O')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[0][1]=='O')&&(matrix[2][1]=='O')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][1]=='O')&&(matrix[1][1]=='O')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[1][1]=='O')&&(matrix[2][1]=='O')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][2]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][0]=='O')&&(matrix[1][1]=='O')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[1][1]=='O')&&(matrix[2][2]=='O')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[2][0]=='O')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][2]=='O')&&(matrix[1][1]=='O')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][0]=='O')&&(matrix[1][1]=='O')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
//para atrapalhar o oponente a ganhar
if((matrix[0][0]=='X')&&(matrix[0][2]=='X')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[0][1]=='X')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[0][1]=='X')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][0]=='X')&&(matrix[1][0]==' '))
{
matrix[1][0]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[1][0]=='X')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[1][0]=='X')&&(matrix[2][0]=='X')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[2][2]=='X')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[2][1]=='X')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[2][1]=='X')&&(matrix[2][2]=='X')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][2]=='X')&&(matrix[0][2]=='X')&&(matrix[1][2]==' '))
{
matrix[1][2]='O';
cond=1;
}else
if((matrix[2][2]=='X')&&(matrix[1][2]=='X')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}else
if((matrix[1][2]=='X')&&(matrix[0][2]=='X')&&(matrix[2][2]==' '))
{
matrix[2][2]='O';
cond=1;
}else
if((matrix[0][1]=='X')&&(matrix[2][1]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][1]=='X')&&(matrix[1][1]=='X')&&(matrix[2][1]==' '))
{
matrix[2][1]='O';
cond=1;
}else
if((matrix[1][1]=='X')&&(matrix[2][1]=='X')&&(matrix[0][1]==' '))
{
matrix[0][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[2][2]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][0]=='X')&&(matrix[1][1]=='X')&&(matrix[2][2]==' '))
{
matrix[2][2]='0';
cond=1;
}else
if((matrix[1][1]=='X')&&(matrix[2][2]=='X')&&(matrix[0][0]==' '))
{
matrix[0][0]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[2][0]=='X')&&(matrix[1][1]==' '))
{
matrix[1][1]='O';
cond=1;
}else
if((matrix[0][2]=='X')&&(matrix[1][1]=='X')&&(matrix[2][0]==' '))
{
matrix[2][0]='O';
cond=1;
}else
if((matrix[2][0]=='X')&&(matrix[1][1]=='X')&&(matrix[0][2]==' '))
{
matrix[0][2]='O';
cond=1;
}
else{
for (int x=0;x<3;x++)
for (int y=0;y<3;y++)
{
if((cond==0)&&(matrix[x][y]==' '))
{
matrix[x][y]='O';
cond=1;
}
}
}
}
}
}
void jogo()
{
if (jogada==0) iniciacao();
mostrar();
preenchimento();
teste();
movimento();
teste();
}
void fimjogo()
{
system("cls");
mostrar();
cout<<"o jogador "<<venceu<<" Venceu\n digite s para jogar de
novo: ";
char denovo;
cin>>denovo;
if(denovo=='s')
{
venceu=' ';
termino=0;
jogada=0;
jogo();
}
}
void teste()
{
//teste horizontal
if((matrix[0][0]==matrix[0][1])&&(matrix[0][1]==matrix[0][2])&&(matrix[0][0]
!=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[1][0]==matrix[1][1])&&(matrix[1][1]==matrix[1][2])&&(matrix[1][0]
!=' '))
{
termino=1;
venceu=matrix[1][0];
fimjogo();
}
if((matrix[2][0]==matrix[2][1])&&(matrix[2][1]==matrix[2][2])&&(matrix[2][0]
!=' '))
{
termino=1;
venceu=matrix[2][0];
fimjogo();
}
//teste vertical
if((matrix[0][0]==matrix[1][0])&&(matrix[1][0]==matrix[2][0])&&(matrix[0][0]
!=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][1]==matrix[1][1])&&(matrix[1][1]==matrix[2][1])&&(matrix[0][1]
!=' '))
{
termino=1;
venceu=matrix[0][1];
fimjogo();
}
if((matrix[0][2]==matrix[1][2])&&(matrix[1][2]==matrix[2][2])&&(matrix[0][2]
!=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
//teste na digonal
if((matrix[0][0]==matrix[1][1])&&(matrix[1][1]==matrix[2][2])&&(matrix[0][0]
!=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][2]==matrix[1][1])&&(matrix[1][1]==matrix[2][0])&&(matrix[0][2]
!=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
// teste sedeu velha
if ((jogada==4)&&(venceu==' '))
{
system("cls");
cout<<"\n\n de Velha \n digite s para Jogar de novo:";
char denovo;
cin>>denovo;
if(denovo=='s')
{
venceu=' ';
termino=0;
jogada=0;
jogo();
}
}
}
35.
char matrix[3][3];
int termino=0, jogada=0;
char venceu=' ';
void iniciacao();
void mostrar();
void preenchimento();
void movimento();
void jogo();
void fimjogo();
void teste();
int main()
{
while ((jogada<=9)&&(termino!=1))
{
jogo();
jogada++;
}
system("pause");
}
void iniciacao()
{
for(int x=0;x<3;x++)
for(int y=0;y<3;y++)
matrix[x][y]=' ';
}
void mostrar()
{
system("cls");
cout<<" "<< matrix[0][0] <<" | "<< matrix[0][1] <<"| "<<
matrix[0][2] <<"\n"
<<" --|--|--\n"
<< " "<< matrix[1][0] <<" | "<< matrix[1][1] <<"| "<<
matrix[1][2]<<"\n"
<<" --|--|--\n"
<< " "<< matrix[2][0] <<" | "<< matrix[2][1] <<"| "<<
matrix[2][2]<<"\n"<<endl;
}
void preenchimento()
{
int x=0,y=0;
}
void movimento()
{
int cond=0;
for (int x=0;x<=2;x++)
for (int y=0;y<=2;y++)
{
if((cond==0)&&(matrix[x][y]==' '))
{
matrix[x][y]='O';
cond=1;
}
}}
void jogo()
{
if (jogada==0) iniciacao();
mostrar();
preenchimento();
teste();
movimento();
teste();
}
void fimjogo()
{
system("cls");
mostrar();
cout<<"o jogador "<<venceu<<" Venceu\n digite s para jogar de
novo: ";
char denovo;
cin>>denovo;
if(denovo=='s')
{
venceu=' ';
termino=0;
jogada=0;
jogo();
}
}
void teste()
{
//teste horizontal
if((matrix[0][0]==matrix[0][1])&&(matrix[0][1]==matrix[0][2])&&(matrix[0][0]
!=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[1][0]==matrix[1][1])&&(matrix[1][1]==matrix[1][2])&&(matrix[1][0]
!=' '))
{
termino=1;
venceu=matrix[1][0];
fimjogo();
}
if((matrix[2][0]==matrix[2][1])&&(matrix[2][1]==matrix[2][2])&&(matrix[2][0]
!=' '))
{
termino=1;
venceu=matrix[2][0];
fimjogo();
}
//teste vertical
if((matrix[0][0]==matrix[1][0])&&(matrix[1][0]==matrix[2][0])&&(matrix[0][0]
!=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][1]==matrix[1][1])&&(matrix[1][1]==matrix[2][1])&&(matrix[0][1]
!=' '))
{
termino=1;
venceu=matrix[0][1];
fimjogo();
}
if((matrix[0][2]==matrix[1][2])&&(matrix[1][2]==matrix[2][2])&&(matrix[0][2]
!=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
//teste na digonal
if((matrix[0][0]==matrix[1][1])&&(matrix[1][1]==matrix[2][2])&&(matrix[0][0]
!=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][2]==matrix[1][1])&&(matrix[1][1]==matrix[2][0])&&(matrix[0][2]
!=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
// teste sedeu velha
if ((jogada==4)&&(venceu==' '))
{
system("cls");
cout<<"\n\n de Velha \n digite s para Jogar de novo:";
char denovo;
cin>>denovo;
if(denovo=='s')
{
venceu=' ';
termino=0;
jogada=0;
jogo();
}
}
}
char matrix[3][3];
int termino=0, jogada=0;
char venceu=' ';
void iniciacao();
void mostrar();
void preenchimento();
void movimento();
void jogo();
void fimjogo();
void teste();
int main()
{
while ((jogada<=9)&&(termino!=1))
{
jogo();
jogada++;
}
system("pause");
}
void iniciacao()
{
for(int x=0;x<3;x++)
for(int y=0;y<3;y++)
matrix[x][y]=' ';
}
void mostrar()
{
system("cls");
cout<<" "<< matrix[0][0] <<" | "<< matrix[0][1] <<"| "<<
matrix[0][2] <<"\n"
<<" --|--|--\n"
<< " "<< matrix[1][0] <<" | "<< matrix[1][1] <<"| "<<
matrix[1][2]<<"\n"
<<" --|--|--\n"
<< " "<< matrix[2][0] <<" | "<< matrix[2][1] <<"| "<<
matrix[2][2]<<"\n"<<endl;
}
void preenchimento()
{
int x=0,y=0;
}
void movimento()
{
int x=0,y=0;
}
void jogo()
{
if (jogada==0) iniciacao();
mostrar();
preenchimento();
teste();
movimento();
teste();
}
void fimjogo()
{
system("cls");
mostrar();
cout<<"o jogador "<<venceu<<" Venceu\n digite s para jogar de
novo: ";
char denovo;
cin>>denovo;
if(denovo=='s')
{
venceu=' ';
termino=0;
jogada=0;
jogo();
}
}
void teste()
{
//teste horizontal
if((matrix[0][0]==matrix[0][1])&&(matrix[0][1]==matrix[0][2])&&(matrix[0][0]
!=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[1][0]==matrix[1][1])&&(matrix[1][1]==matrix[1][2])&&(matrix[1][0]
!=' '))
{
termino=1;
venceu=matrix[1][0];
fimjogo();
}
if((matrix[2][0]==matrix[2][1])&&(matrix[2][1]==matrix[2][2])&&(matrix[2][0]
!=' '))
{
termino=1;
venceu=matrix[2][0];
fimjogo();
}
//teste vertical
if((matrix[0][0]==matrix[1][0])&&(matrix[1][0]==matrix[2][0])&&(matrix[0][0]
!=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][1]==matrix[1][1])&&(matrix[1][1]==matrix[2][1])&&(matrix[0][1]
!=' '))
{
termino=1;
venceu=matrix[0][1];
fimjogo();
}
if((matrix[0][2]==matrix[1][2])&&(matrix[1][2]==matrix[2][2])&&(matrix[0][2]
!=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
//teste na digonal
if((matrix[0][0]==matrix[1][1])&&(matrix[1][1]==matrix[2][2])&&(matrix[0][0]
!=' '))
{
termino=1;
venceu=matrix[0][0];
fimjogo();
}
if((matrix[0][2]==matrix[1][1])&&(matrix[1][1]==matrix[2][0])&&(matrix[0][2]
!=' '))
{
termino=1;
venceu=matrix[0][2];
fimjogo();
}
// teste sedeu velha
if ((jogada==4)&&(venceu==' '))
{
system("cls");
cout<<"\n\n de Velha \n digite s para Jogar de novo:";
char denovo;
cin>>denovo;
if(denovo=='s')
{
venceu=' ';
termino=0;
jogada=0;
jogo();
}
}
}
57
Concluso