// mover una pieza, la barca y a homero del lado adecuado public static Estado GenerarNuevoEstado(Estado EstadoPadre, char Homero, int ObjetoMover) { Estado EstadoCopia = Estado.CopiarEstado(EstadoPadre); // mover a homero junto con algun obejto y la barca al aldo contrario if (EstadoPadre.LadoDer) { // mover a homero EstadoCopia.CosasLadoDer[0] = '0'; EstadoCopia.CosasLadoIzq[0] = 'H'; // mover alguna de las cosas de lado derecho al izquierdo if (EstadoCopia.CosasLadoDer[ObjetoMover] != '0') { EstadoCopia.CosasLadoIzq[ObjetoMover] = EstadoCopia.CosasLadoDer[ObjetoMover]; EstadoCopia.CosasLadoDer[ObjetoMover] = '0'; } else { return(null); } // cambiar la bandera del estado EstadoCopia.CambiarEstado(); } else { // mover a homero EstadoCopia.CosasLadoDer[0] = 'H'; EstadoCopia.CosasLadoIzq[0] = '0'; // mover alguna de las cosas de lado izquierdo al derecho // mover alguna de las cosas de lado derecho al izquierdo if (EstadoCopia.CosasLadoIzq[ObjetoMover] != '0') { EstadoCopia.CosasLadoDer[ObjetoMover] = EstadoCopia.CosasLadoIzq[ObjetoMover]; EstadoCopia.CosasLadoIzq[ObjetoMover] = '0'; } else { return(null); } // cambiar la bandera del estado EstadoCopia.CambiarEstado(); } return(EstadoCopia); }
// construir un nuevo estado, moviendo a homero solo al lado indicado public static Estado CrearEstadoSimplo(char Homero, Estado EstadoPadre) { Estado NuevoEstado = Estado.CopiarEstado(EstadoPadre); // verificar de que lado esta el estado padre if (EstadoPadre.LadoDer) { // mover a homero al lado izquiero NuevoEstado.CosasLadoIzq[0] = 'H'; NuevoEstado.CosasLadoDer[0] = '0'; NuevoEstado.CambiarEstado(); } else { // mover a homero al lado derecho NuevoEstado.CosasLadoIzq[0] = '0'; NuevoEstado.CosasLadoDer[0] = 'H'; NuevoEstado.CambiarEstado(); } return(NuevoEstado); }