/*
* Comprueba si la posicion (i,j) esta dentro del tablero
* Se utiliza dentro de invertir()
*/
bool esta_dentro_tablero (int i, int j, tablero& t)
{
	return ( ( i >= 0 ) && ( i < t.tam ) && ( j >= 0 ) && ( j < t.tam ));
}

/*
* Comprueba si la nueva posicion (x,y) permite invertir fichas
* en los 8 sentidos posibles. Devuelve true si es posible, 
* false si no lo es. En el caso true, hace efectiva la inversion
* de las fichas y pone la nueva ficha en su sitio
*/
bool invertir (int x, int y, tablero& t, char mi_color)
{
	int x_vec, y_vec; 
	int sent_x, sent_y; //indican el sentido en el que se analiza el volteo
	int fila, col; //coordenadas de las fichas afectadas por el volteo
	bool invierte; //resultado de la funcion
	const char LIBRE = '.'; //para identificar las casillas libres
	bool movido; //para saber si se invierte al menos 1 ficha

	invierte = false;

	for (sent_x = -1; sent_x <= +1; sent_x++)
		for (sent_y = -1; sent_y <= +1; sent_y++)
			if ( (sent_x!=0) || (sent_y!=0) ) //(0,0) no es una direccion valida
			{
				x_vec = x + sent_x;
				y_vec = y + sent_y;
				movido = false;
				//Desplazarse mientras haya casillas del tablero, en el sentido analizado,
				//que esten ocupadas por fichas del otro color
				while ( esta_dentro_tablero (x_vec, y_vec, t) && ( t.casillas[x_vec][y_vec] != LIBRE ) && ( t.casillas[x_vec][y_vec] != mi_color ) )
				{
					movido = true;
					x_vec = x_vec + sent_x;;
					y_vec = y_vec + sent_y;
				}
				//Final: 
				//si nos salimos del tablero (no se invierte), 
				//se llega a una casilla libre (no se invierte)
				//o se llega a una casilla de mi_color (SI se invierte)

				//Las comprobaciones se hacen si hemos entrado alguna vez 
				//al bucle while (movido = true). lo que indica que se invierte
				//al menos 1 ficha
				//En caso contrario tampoco se invierte
				if ( movido == true )
					//Comprobar como se sale del bucle
					if ( esta_dentro_tablero (x_vec, y_vec, t) ) //se acaba dentro del tablero
						if ( t.casillas[x_vec][y_vec] != LIBRE ) //en una casilla ocupada
							if ( t.casillas[x_vec][y_vec] == mi_color ) //de mi color
							{
								//se puede invertir fichas en este sentido
								invierte = true;
								//empiezo a voltear fichas desde el primer vecino
								fila = x + sent_x;
								col = y + sent_y;
								//hasta la posicion x_vec, y_vec que ya es de mi color
								while ( ( fila != x_vec ) || ( col != y_vec ) )
								{
									t.casillas[fila][col] = mi_color;
									col = col + sent_y;
									fila = fila + sent_x;
								}
							} //acaban los 3 IF
			} //acaban los FOR

	if ( invierte  == true ) //si se ha conseguido invertir, se pone la nueva ficha
		t.casillas[x][y] = mi_color;

	return (invierte);
}


