Una forma sencilla pudiera ser tener un catálogo de funciones:
* Función para comprobar 4 en línea en diagonal hacia la derecha
* Función para comprobar 4 en línea en diagonal hacia la izquierda
* Función para comprobar 4 en línea en vertical
* Función para comprobar 4 en línea en horizontal
Cada una de estas funciones podría recibir únicamente la fila y columna desde la que empezar a comprobar:
Con este catálogo el proceso se puede simplificar bastante:
* Función para comprobar 4 en línea en diagonal hacia la derecha
* Función para comprobar 4 en línea en diagonal hacia la izquierda
* Función para comprobar 4 en línea en vertical
* Función para comprobar 4 en línea en horizontal
Cada una de estas funciones podría recibir únicamente la fila y columna desde la que empezar a comprobar:
Código (cpp) [Seleccionar]
bool Comprobar4EnLinea( int fila, int columna, int incFila, int incColumna )
{
bool to_return = true;
if ( fila > 0 && fila < MAXFILAS && columna >= 0 && columna < MAXCOLUMNAS )
{
int ficha = Mint[fila][columna];
for ( int i = 0; i < 3; i++ )
{
fila += incFila;
columna += incColumna;
if ( fila >= 0 && fila < MAXFILAS && columna >= 0 && columna < MAXCOLUMNAS )
{
if ( Mint[fila][columna] != ficha )
{
to_return = false;
break;
}
}
else
to_return = false;
}
}
else
to_return = false;
return to_return;
}
bool ComprobarDiagonalDerecha( int fila, int columna )
{
bool to_return = false;
// Se prueban todas las combinaciones en las que esta involucrada la ficha recien puesta
for ( int i = 0; i < 4; i++ )
{
if ( Comprobar4EnLinea( fila + i, columna + i, -1, -1 ) )
{
to_return = true;
break;
}
}
return to_return;
}
Con este catálogo el proceso se puede simplificar bastante:
Código (cpp) [Seleccionar]
void MainWindow::Ganado(int fila,int columna,int ficha)
{
bool ganador = false;
ganador |= ComprobarDiagonalDerecha( fila, columna );
ganador |= ComprobarDiagonalIzquierda( fila, columna );
ganador |= ComprobarVertical( fila, columna) ;
ganador |= ComprobarHorizontal( fila, columna );
if ( ganador )
{
if ( ficha == 1 )
cout << "Ganan las amarillas" << endl;
else
cout << "Ganan las rojas" << endl;
}
}