#include <iostream>
using namespace std;
char tabl[3][3];
int f=0,c=0;
char Jugador1[15];
char Jugador2[15];
char ficha='x';
int turno=0;
bool a=false;
void tablero(){
for(f=0;f<3;f++)
{
for(c=0;c<3;c++)
if(c <2 ) {
cout<<tabl[f][c]<<" | ";
}else{
cout<<tabl[f][c];
}
if (f < 2){
cout<<"\n---------\n";
}
}
}
void jugar(){
do{
if(ficha=='x')
{
cout<<Jugador1<<"Digita la posicion de x";
cout<<"\n ingresa la fila";
cin>>f;
cout<<"\n ingresa la columna";
cin>>c;
}
turno=turno+1;
if(ficha=='o')
{
cout<<Jugador2<<"Digita la posicion de o";
cout<<"\n ingresa la fila";
cin>>f;
cout<<"\n ingresa la columna";
cin>>c;
}
turno=turno+1;
if(ficha=='x' && tabl[f][c] != 'x' && tabl[f][c] !='o'){
tabl[f][c]='x';
ficha='o';
tablero();
}
else if(ficha=='o' && tabl[f][c] != 'x' && tabl[f][c] !='o'){
tabl[f][c]='o';
ficha='x';
tablero();
}else{
cout<<"casilla esta ocupada."<<endl;
jugar();
}
}while(turno>0 && turno<10);
}
bool ganador(){
for(int i=0;i<3;i++)
{
if(tabl[i][0]==tabl[i][1] && tabl[i][0]==tabl[i][2] || tabl[0][i]==tabl[1][i] && tabl[0][i]==tabl[2][i])
return true;
}
if(tabl[0][0]==tabl[1][1] && tabl[1][1]==tabl[2][2] || tabl[0][2]==tabl[1][1] && tabl[1][1]==tabl[2][0])
{
return true;
}
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(tabl[i][j] != 'x' && tabl [i][j] != 'o')
{
return false;
}
}
}
a=true;
return false;
}
int main()
{
cout<<"Digite el nombre del jugador 1: ";
cin>>Jugador1;
cout<<"Digite el nombre del jugador 2: ";
cin>>Jugador2;
while(!ganador())
{
tablero();
jugar();
ganador();
}
if(ficha == 'x' && a==false)
{
cout<<Jugador2<<"has ganado"<<endl;
}else if (ficha == 'o' && a==false){
cout<<Jugador1<<"has ganado"<<endl;
} else{
cout<<"Empate";
}
return 0;
}