// 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; } }
// 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); }
// 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); } }