internal Movida(TipoObjeto tipoOb, Direccion dir, Point posI, Point posF) { this.tipoObjeto = tipoOb; this.direccion = dir; this.posInicial = posI; this.posFinal = posF; }
public bool vecino(out Point nuevaPos, Point posicion, Direccion direccion) { nuevaPos = posicion + direccion.Desp; if (nuevaPos.X < 0 || nuevaPos.X >= lugares.Ancho || nuevaPos.Y < 0 || nuevaPos.Y >= lugares.Alto) { return false; } /*try { Lugar l = lugares[nuevaPos]; //prueba que no esté fuera de rango } catch (System.IndexOutOfRangeException e) { string msg = "El mapa no tiene posición " + nuevaPos; throw new FueraDelMapa(msg, e, nuevaPos); }*/ return true; }
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; }
private void moverTipito(Direccion direccion) { Movida movida; if (!Movida.crear(out movida, mapa.EstadoActual, direccion)) return; listaMovidas.Push(movida); mapa.EstadoActual.realizarMovida(movida); dibujaMapa.dibujaMovida(mapa, movida); this.labelMovidas.Text = listaMovidas.Count.ToString(); if (mapa.EstadoActual.MapaTerminado()) { MessageBox.Show("Mapa Completo!", "Felicitaciones!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } }
private Direccion(Size desp, Direccion inversa, string toString) { this.desp = desp; this.toString = toString; this.inversa = inversa; }
public bool tieneVecinoPasable(Point posicion, Direccion direccion) { Point posVecina; if (!mapa.vecino(out posVecina, posicion, direccion)) return false; return mapa.Lugares[posVecina] != Lugar.Pared; }