#include <iostream>
using namespace std;
const int numeroDeFilas=10;
const int numeroDeColumnas=10;
const int empate=(numeroDeFilas*numeroDeColumnas);
bool ganador=false;
void inicializarCuadro(int cuadro[][numeroDeColumnas])
{
int i,j;
for (i=0; i<numeroDeFilas; i++)
{
for (j=0; j<numeroDeColumnas; j++)
{
cuadro[i][j]=0;
}
}
}
void imprimirCuadro(int cuadro[][numeroDeColumnas])
{
int i,j;
for (i=0; i<numeroDeFilas; i++)
{
for (j=0; j<numeroDeColumnas; j++)
{
cout << cuadro[i][j];
}
cout << endl;
}
}
void turnoUno(int cuadro[][numeroDeColumnas]) // Turno del Jugador 1
{
bool movimientoValido=false;
int c,i;
while (!movimientoValido)
{
cout << "Juega el Jugador 1" << endl;
cout << "Ingrese el numero de columna, de 1 a 10" << endl;
cin >> c;
c--;
while (c<0 || c>9)
{
cout << "Movimiento Invalido, reingrese la jugada" << endl;
imprimirCuadro(cuadro);
cout << "Juega el Jugador 1" << endl;
cout << "Ingrese el numero de columna, de 1 a 10" << endl;
cin >> c;
c--;
}
for (i=numeroDeFilas;i>-1;i--)
{
if (cuadro[i][c]==0 && !movimientoValido)
{
cuadro[i][c]=1;
movimientoValido=true;
}
}
if (cuadro[numeroDeFilas][c]!=0 && !movimientoValido)
{
imprimirCuadro(cuadro);
cout << "La Columna está llena, reingrese la jugada" << endl;
}
}
}
void turnoDos(int cuadro[][numeroDeColumnas]) //Turno del Jugador 2
{
bool movimientoValido=false;
int c,i;
while (!movimientoValido)
{
cout << "Juega el Jugador 2" << endl;
cout << "Ingrese el numero de columna, de 1 a 10" << endl;
cin >> c;
c--;
while (c<0 || c>9)
{
cout << "Movimiento Invalido, reingrese la jugada" << endl;
imprimirCuadro(cuadro);
cout << "Juega el Jugador 2" << endl;
cout << "Ingrese el numero de columna, de 1 a 10" << endl;
cin >> c;
c--;
}
for (i=numeroDeFilas;i>-1;i--)
{
if (cuadro[i][c]==0 && !movimientoValido)
{
cuadro[i][c]=2;
movimientoValido=true;
}
}
if (cuadro[numeroDeFilas][c]!=0 && !movimientoValido)
{
imprimirCuadro(cuadro);
cout << "La Columna está llena, reingrese la jugada" << endl;
}
}
}
void vertical(int cuadro[][numeroDeColumnas])
{
bool encontradoUno, encontradoDos=false;
int i,j;
int totalUno =0;
int totalDos=0;
for (j=0;j<numeroDeColumnas;j++)
{
totalUno=0;
totalDos=0;
for (i=0;i<numeroDeFilas;i++)
{
if (cuadro[i][j] == 1 && encontradoUno) //Si el Jugador1 Hace 4 en linea Vertical
{
totalUno++;
}
else
{
encontradoUno=false;
totalUno=0;
}
if (cuadro[i][j] == 1 && !encontradoUno)
{
totalUno++;
encontradoUno=true;
}
if (totalUno == 4)
{
cout << "El jugador 1 gana!" << endl;
ganador=true;
}
if (cuadro[i][j] == 2 && encontradoDos) //Si el Jugador 2 Hace 4 en linea Vertical
{
totalDos++;
}
else
{
totalDos=0;
encontradoDos=false;
}
if (cuadro[i][j] == 2 && !encontradoDos)
{
totalDos++;
encontradoDos=true;
}
if (totalDos == 4)
{
cout << "El jugador 2 gana!" << endl;
ganador=true;
}
}
}
}
void horizontal(int cuadro[][numeroDeColumnas])
{
bool encontradoUno, encontradoDos=false;
int i,j;
int totalUno =0;
int totalDos=0;
for (i=0;i<numeroDeFilas;i++)
{
totalUno=0;
totalDos=0;
for (j=0;j<numeroDeColumnas;j++)
{
if (cuadro[i][j] == 1 && encontradoUno) //Si el Jugador1 Hace 4 en linea Horizontal
{
totalUno++;
}
else
{
encontradoUno=false;
totalUno=0;
}
if (cuadro[i][j] == 1 && !encontradoUno)
{
totalUno++;
encontradoUno=true;
}
if (totalUno == 4)
{
cout << "El jugador 1 gana!" << endl;
ganador=true;
}
if (cuadro[i][j] == 2 && encontradoDos) //Si el Jugador 2 Hace 4 en linea horizontal
{
totalDos++;
}
else
{
totalDos=0;
encontradoDos=false;
}
if (cuadro[i][j] == 2 && !encontradoDos)
{
totalDos++;
encontradoDos=true;
}
if (totalDos == 4)
{
cout << "El jugador 2 gana!" << endl;
ganador=true;
}
}
}
}
void jugar(int cuadro[][numeroDeColumnas])
{
int fichas=0;
while (fichas!=empate && !ganador)
{
if (fichas%2==0)
{
turnoUno(cuadro);
vertical(cuadro);
horizontal(cuadro);
fichas++;
imprimirCuadro(cuadro);
}
else
{
turnoDos(cuadro);
vertical(cuadro);
horizontal(cuadro);
fichas++;
imprimirCuadro(cuadro);
}
}
if (fichas == empate) //Caso de Empate
{
cout << "EMPATE! El juego ha terminado" << endl;
}
}
int main() //Programa Principal
{
int cuadro[numeroDeFilas][numeroDeColumnas];
cout << "Cuatro en Linea" << endl;
inicializarCuadro(cuadro);
imprimirCuadro(cuadro);
jugar(cuadro);
return 0;
}