예제 #1
0
 public static bool esEstupida(Movida movida, Analizador analizador)
 {
     if (movida.SubMovida != null)
     {
         Point nuevaPosCaja = movida.SubMovida.PosFinal;
         if (!analizador[nuevaPosCaja])
             return true;
     }
     return false;
 }
예제 #2
0
 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);
 }
예제 #3
0
 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;
 }
예제 #4
0
 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");
 }
예제 #5
0
 private static Movida crearInversa(Movida original)
 {
     return new Movida(original.TipoObjeto, original.Direccion.Inversa,
       original.posFinal, original.PosInicial);
 }
예제 #6
0
 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;
 }