public static bool esEstupida(Movida movida, Analizador analizador) { if (movida.SubMovida != null) { Point nuevaPosCaja = movida.SubMovida.PosFinal; if (!analizador[nuevaPosCaja]) return true; } return false; }
public void dibujaMovida(Mapa mapa, Movida movida) { form.SuspendLayout(); foreach (Point posicion in movida.PosAfectadas) { int nImagen = getNumImagen(mapa, posicion); this.pictureBoxs[posicion.X, posicion.Y].Image = (nImagen >= 0) ? imagenes.Images[nImagen] : null; } form.ResumeLayout(false); }
public static bool crear(out Movida movida, Estado estado, Direccion direccion) { movida = null; Point posDest; if (!estado.Mapa.vecino(out posDest, estado.PosTipito, direccion)) return false; movida = new Movida(TipoObjeto.Tipito, direccion, estado.PosTipito, posDest); if (!estado.pasable(posDest)) { if (!estado.MatrizCajas[posDest]) return false; Point posFinal; if (!estado.Mapa.vecino(out posFinal, posDest, direccion)) return false; movida.SubMovida = new Movida(TipoObjeto.Caja, direccion, posDest, posFinal); if (!estado.pasable(movida.SubMovida.PosFinal)) return false; } return true; }
public void realizarMovida(Movida movida) { if (movida.SubMovida != null) realizarMovida(movida.SubMovida); if (movida.TipoObjeto == TipoObjeto.Caja) { matrizCajas[movida.PosInicial] = false; matrizCajas[movida.PosFinal] = true; } else if (movida.TipoObjeto == TipoObjeto.Tipito) { posTipito = movida.PosFinal; } else throw new ErrorSokoVen("Movida de TipoObjeto.Ninguno"); }
private static Movida crearInversa(Movida original) { return new Movida(original.TipoObjeto, original.Direccion.Inversa, original.posFinal, original.PosInicial); }
public static Movida crearDeshacedora(Movida original) { Movida inversa = Movida.crearInversa(original); if (original.SubMovida == null) return inversa; Movida inversaSub = Movida.crearInversa(original.SubMovida); inversaSub.SubMovida = inversa; return inversaSub; }