예제 #1
0
// Funcion heuristica (ESTA ES LA QUE TENEIS QUE MODIFICAR)
double Valoracion(const Environment &estado, int jugador){
  int ganador = estado.RevisarTablero();
  int enemigo = enemigoDe(ganador);
  int valoracion = 0;


  if (ganador==jugador)
       return ganar; // Gana el jugador que pide la valoracion
    else if (ganador!=0)
            return perder; // Pierde el jugador que pide la valoracion
    else if (estado.Get_Casillas_Libres()==0)
            return 0;  // Hay un empate global y se ha rellenado completamente el tablero
    else{

            

      valoracion = evaluame(jugador,estado) - evalua_enemigo(enemigo,estado);


      if (fichasDe(estado,jugador) > (fichasDe(estado,enemigo)+1))
         valoracion *= escala;
       else
          valoracion -= escala * 2;

          
      return valoracion;
    }

}
예제 #2
0
// Funcion de valoracion para testear Poda Alfabeta
double ValoracionTest(const Environment &estado, int jugador){
    int ganador = estado.RevisarTablero();

    if (ganador==jugador)
       return 99999999.0; // Gana el jugador que pide la valoracion
    else if (ganador!=0)
            return -99999999.0; // Pierde el jugador que pide la valoracion
    else if (estado.Get_Casillas_Libres()==0)
            return 0;  // Hay un empate global y se ha rellenado completamente el tablero
    else
          return Puntuacion(jugador,estado);
}
예제 #3
0
// Funcion heuristica (ESTA ES LA QUE TENEIS QUE MODIFICAR)
double Valoracion(const Environment &estado, int jugador){
    double valor;
    int ganador = estado.RevisarTablero();
    int contricante;
    int bomba;
    int bomba_contricante;
    double bomb_contricante=0;
    Environment estado_bom;
    int ocu_columnas;
    double bomb_jugador=0;
    int jug=jugador;
    if(jugador==1){
        contricante=2;
	bomba=4;
	bomba_contricante=5;
    }
    else{
        contricante=1;
	bomba=5;
	bomba_contricante=4;
    }
/*
    if(estado.Have_BOOM(jugador)==true){
        estado_bom=estado;
        for(int i=0;i<7;i++){
            for(int j=0;j<7;j++){
                if((int)estado.See_Casilla(i,j)==bomba){
                    estado_bom.AplicarExplosion(i,j);
                    bomb_jugador=Bombas(jugador,contricante,estado_bom);
                }
            }
        }
    }
    if(estado.Have_BOOM(contricante)==true){
        estado_bom=estado;
        for(int i=0;i<7;i++){
            for(int j=0;j<7;j++){
                if((int)estado.See_Casilla(i,j)==bomba_contricante){
                    estado_bom.AplicarExplosion(i,j);
                    bomb_contricante=Bombas(contricante,jugador,estado_bom);
                }
            }
        }
    }*/
    double contador_3alineacion_jugador=alineacion3(jugador,estado);
    double contador_3alineacion_contricante=alineacion3(contricante,estado);
    double contador_2lineas_jugador=alineacion2(jugador,estado);
    double contador_2lineas_contricante=alineacion2(contricante,estado);
    double contador_hueco_jugador=FaltaUnHueco(jugador,estado);
    double contador_hueco_contricante=FaltaUnHueco(contricante,estado);
    if(ganador==jugador)
        return 9999999999999999999999999999999999999999999999.0;
    else if(ganador!=0)
        return -999999999999999999999999999999999999999999999.0;
    else if(estado.Get_Casillas_Libres()==0)
        return 0;
    else if(jugador==1 ||jugador==2){
            valor=(((contador_3alineacion_jugador*6)+(contador_hueco_jugador*4)+(contador_2lineas_jugador)+bomb_jugador*8)-((contador_3alineacion_contricante*6)+(contador_hueco_contricante*4)+(contador_2lineas_contricante*2)+bomba_contricante*8));
        return valor;
    }
    else{
        return Puntuacion(jugador,estado);
    }
    }