double alineacion3(int jugador, const Environment &estado){ double contador=0; for (int filas=0; filas<7; filas++){ for (int columnas=0; columnas<7; columnas++){ if(columnas<4){ if(estado.See_Casilla(filas,columnas)%3==estado.See_Casilla(filas,columnas+1)%3 && estado.See_Casilla(filas,columnas+1)%3==estado.See_Casilla(filas,columnas+2)%3 && estado.See_Casilla(filas,columnas+2)%3==jugador && estado.See_Casilla(filas,columnas+3)%3==0){ contador++; } } if(columnas>=4){ if(estado.See_Casilla(filas,columnas)%3==estado.See_Casilla(filas,columnas-1)%3 && estado.See_Casilla(filas,columnas-1)%3==estado.See_Casilla(filas,columnas-2)%3 && estado.See_Casilla(filas,columnas-2)%3==jugador && estado.See_Casilla(filas,columnas-3)%3==0) contador++; } if(filas<4){ if(estado.See_Casilla(filas,columnas)%3==estado.See_Casilla(filas+1,columnas)%3 && estado.See_Casilla(filas+1,columnas)%3==estado.See_Casilla(filas+2,columnas)%3 && estado.See_Casilla(filas+2,columnas)%3==jugador && estado.See_Casilla(filas+3,columnas)%3==0){ contador++; } } if (filas<4 and columnas<4){ if (estado.See_Casilla(filas,columnas)%3==estado.See_Casilla(filas+1,columnas+1)%3 && estado.See_Casilla(filas+1,columnas+1)%3== estado.See_Casilla(filas+2,columnas+2)%3 && estado.See_Casilla(filas+2,columnas+2)%3==jugador && estado.See_Casilla(filas+3,columnas+3)%3==0) contador++; } if (filas>2 and columnas<4){ if(estado.See_Casilla(filas,columnas)%3==estado.See_Casilla(filas-1,columnas+1)%3 && estado.See_Casilla(filas-1,columnas+1)%3==estado.See_Casilla(filas-2,columnas+2)%3 && estado.See_Casilla(filas-2,columnas+2)%3==jugador && estado.See_Casilla(filas-3,columnas+3)%3==0) contador++; } } } return contador; }
double puntuacion_(int jugador, const Environment &estado){ double suma=0; for (int i=0; i<7; i++) for (int j=0; j<7; j++){ if (estado.See_Casilla(i,j)==jugador || esMiBomba(estado.See_Casilla(i,j), jugador)){ if (j<3) suma += j; else suma += (6-j); } } return suma; }
/* Comprueba si existe una secuencia de tamaño secuencia_meta en la diagonal ascendente y descendente de la ficha en la posicion (fila,columna) del tablero */ int checkDiagonal(const Environment &estado, int fila, int columna, int jugador, int secuencia_meta) { int total_secuencias=0; // Comprobamos los diagonales ascendentes double secuencia_actual = 0; int col=columna; // Comprobamos las diagonales ascendentes en primer lugar for(int i=fila; i<7; ++i){ if(col>6) break; else if (estado.See_Casilla(i,col)==jugador) secuencia_actual++; else break; col++; } // Si se ha dado una secuencia mayor o igual que secuencia_meta aumentamos el numero total de secuencias if(secuencia_actual >= secuencia_meta) total_secuencias++; // Reestablecemos el valor de las variables para poder contar de nuevo la secuencia_actual secuencia_actual=0; col=columna; // Comprobamos los diagonales descendentes en segundo lugar for(int i=fila; i>=0; i--) { if(col>6) break; else if (estado.See_Casilla(i,col) == jugador) secuencia_actual++; else break; col++; } // Si se ha dado una secuencia mayor o igual que secuencia_meta aumentamos el numero total de secuencias if (secuencia_actual >= secuencia_meta) total_secuencias++; return total_secuencias; }
/* Comprueba si existe una secuencia de tamaño secuencia_meta en la vertical descendente de la ficha en la posicion (fila,columna) del tablero */ int checkVerticalInferior(const Environment &estado, int fila, int columna, int jugador, int secuencia_meta) { int secuencia_actual=0; for(int i=fila; i>=0; i--) { if(estado.See_Casilla(i,columna) == jugador) secuencia_actual++; else break; } int ret = (secuencia_actual >= secuencia_meta) ? 1 : 0; return ret; }
/* Comprueba si existe una secuencia de tamaño secuencia_meta en la horizontal izquierda de la ficha en la posicion (fila,columna) del tablero */ int checkHorizontalIzquierda(const Environment &estado, int fila, int columna, int jugador, int secuencia_meta) { int secuencia_actual=0; for(int j=columna; j>=0; j--) { if(estado.See_Casilla(fila,j) == jugador) secuencia_actual++; else break; } int ret = (secuencia_actual >= secuencia_meta) ? 1 : 0; return ret; }
vector<vector<char> > getMatrixMov(const Environment &tablero){ vector<vector<char> > matrix; matrix.resize(total); matrix[0].resize(total); matrix[1].resize(total); matrix[2].resize(total); matrix[3].resize(total); matrix[4].resize(total); matrix[5].resize(total); matrix[6].resize(total); for(int i = 0; i < total; i++) for(int j = 0; j < total; j++) matrix[i][j] = tablero.See_Casilla(i,j); return matrix; }
int checkAll(const Environment &estado, int jugador, int longitud_secuencia) { /* Para todo el tablero: Comprobamos que la casilla sea de nuestro jugador y en caso de serla buscamos las secuencias verticales, horizontales y diagonales de longitud longitud_secuencia. */ int secuencias = 0; for (int i=0; i<7;i++) { for (int j=0; j<7;j++) { if (estado.See_Casilla(i,j) == jugador) { secuencias += checkVerticalSuperior(estado, i, j, jugador, longitud_secuencia); secuencias += checkVerticalInferior(estado, i, j, jugador, longitud_secuencia); secuencias += checkHorizontalDerecha(estado, i, j, jugador, longitud_secuencia); secuencias += checkHorizontalIzquierda(estado, i, j, jugador, longitud_secuencia); secuencias += checkDiagonal(estado, i, j, jugador, longitud_secuencia); } } } return secuencias; }