예제 #1
0
 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;
 }
예제 #2
0
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;
}
예제 #3
0
파일: player.cpp 프로젝트: Cerv1/2GII
/*
            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;
}
예제 #4
0
파일: player.cpp 프로젝트: Cerv1/2GII
/*
            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;
}
예제 #5
0
파일: player.cpp 프로젝트: Cerv1/2GII
/*
            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;
}
예제 #6
0
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;

}
예제 #7
0
파일: player.cpp 프로젝트: Cerv1/2GII
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;
}