[AYUDA[Error/Problema Cuatro en Línea

Iniciado por toomi.143, 25 Marzo 2017, 01:20 AM

0 Miembros y 1 Visitante están viendo este tema.

toomi.143

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


Código (cpp) [Seleccionar]
#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;
}


Natalia94x

Hola toomi.143 , te podrias explicar un poco mejor? para poder ayudarte, Saludos!

toomi.143

Cita de: Natalia94x en 25 Marzo 2017, 01:49 AM
Hola toomi.143 , te podrias explicar un poco mejor? para poder ayudarte, Saludos!

Hola Natalia, el problema que tengo es el siguiente, por algún motivo cuando arranca el juego e inserto la primer ficha en cualquiera de las columnas 6, 9 o 10, tengo un bug, que lo que pasa es que saltea el turno y no coloca la ficha en esas columnas. Esto ocurre la primera vez que se desea insertar las fichas en dichas columnas.

Espero poder haber sido lo suficientemente claro =D

Gracias espero tu ayuda.