package aima.core.environment.hidato;
import aima.core.agent.Action;
import aima.core.search.framework.ResultFunction;
/**
* Clase que implementa la funcion que devuelve el estado resultante de aplicar una accion sobre un estado.
*/
public class ResultadoAccion implements ResultFunction{
@Override
public Object result(Object s, Action a) {
Estado estado = (Estado) s; //Estado sobre el que se aplica la accion
Accion accion = (Accion) a; //Accion a aplicar sobre el estado
Estado sucesor = new Estado(estado);
/* Realizar el cambio de estado sobre el estado 'sucesor' al ejecutar la accion 'a'
en el estado anterior 's' */
for (int i=0; i<estado.matrix.length; i++){ /*recorrer toda la matriz*/
for (int j=0; j<estado.matrix[i].length; j++){
if(accion.x == i && accion.y == j){
/* si la posicion recorrida coincide con la que la accion quiere cambiar, se escribe el nuevo valor y se cambia la posiciĆ³n actual (ultima escrita) */
sucesor.matrix[i][j]=accion.valor;
sucesor.actual[0]=accion.x;
sucesor.actual[1]=accion.y;
}else{ /* para el resto de posiciones se copia el mismo valor que tenian */
sucesor.matrix[i][j]=estado.matrix[i][j];
}
}
}
return sucesor;
}
}