Hola a todos gente! Primero que nada quería comentarles que soy nuevo en este foro, y bastante nuevo en el mundo de la programación. Estoy programando un cuatro en línea de una manera bastante rudimentaria, no es eficaz, pero la idea es que funcione.
No tiene una interfaz gráfica, el tablero vacío son 0 y cuando juega el jugador 1 y 2 son 1 y 2 respectivamente.
Hasta ahora llegué a programar todo excepto cuando hay un cuatro en línea en diagonal, algo que todavía no llegué a hacer, pero me encontré con otro problema que la verdad pedí ayuda y nadie supo brindarmela.
MI PROBLEMA ES EL SIGUIENTE:
Cuando alguien desea introducir una "ficha" en la columna 6, 9, o 10,
POR PRIMERA VEZ automáticamente se "saltea" el turno, es decir, no toma el valor de esa ficha, y le corresponde jugar al siguiente jugador.
Esto solo me ocurre la primera vez en las columnas 6, 9 y 10 la verdad me cuesta entender por que, en fin, adjunto el código y agradecería mucho al que encontrará este error
ACLARO: La lógica no es la mejor ni la más eficaz.
MUCHAS GRACIAS A LOS QUE TOMAN SU TIEMPO PARA DARME UNA MANO #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;
}