private void InvertirPartes() { int indexDesdeFrente = 0; int indexDesdeAtras = this.Partes.Count() - 1; for (; indexDesdeFrente < indexDesdeAtras; indexDesdeFrente++, indexDesdeAtras--) { IParte parteFrente = this.Partes.ElementAt(indexDesdeFrente); IParte parteAtras = this.Partes.ElementAt(indexDesdeAtras); Posicion posicionAtras = parteAtras.Posicion; parteAtras.ActualizarPosicion(parteFrente.Posicion); parteFrente.ActualizarPosicion(posicionAtras); } }
public INave GetNaveEn(Posicion posicion) { if (!this.areaDePosicionesValidas.PosicionEsValida(posicion)) { throw new PosicionFueraDeAreaDePosicionesValidasException(); } foreach (INave nave in this.naves) { if (nave.PosicionesOcupadas.Any(p => p.Equals(posicion))) { return(nave); } } return(default(INave)); }
protected Nave(int tamanio, Posicion posicion, Direccion direccion, Type tipoDeParte, AreaDePosicionesValidas areaDePosicionesValidas) { if (tamanio <= 0) { throw new TamanioInvalidoDeNaveException(tamanio); } if (posicion == null) { throw new ArgumentNullException("posicion"); } this.areaDePosicionesValidas = areaDePosicionesValidas; this.Direccion = direccion; this.CrearPartes(tamanio, posicion, tipoDeParte); }
private void ValidarVertices(Posicion verticeNorOeste, Posicion verticeNorEste, Posicion verticeSurOeste, Posicion verticeSurEste) { if (verticeSurOeste.Columna > verticeSurEste.Columna) { throw new CoordenadasInvalidasParaAreaDePosicionesValidasException(string.Format("El vertice SO ({0},{1}) no puede estar al Este del vertice SE ({2},{3})", verticeSurOeste.Columna, verticeSurOeste.Fila, verticeSurEste.Columna, verticeSurEste.Fila)); } if (verticeSurOeste.Fila < verticeNorOeste.Fila) { throw new CoordenadasInvalidasParaAreaDePosicionesValidasException(string.Format("El vertice SO ({0},{1}) no puede estar al Norte del vertice NO ({2},{3})", verticeSurOeste.Columna, verticeSurOeste.Fila, verticeNorOeste.Columna, verticeNorOeste.Fila)); } if (verticeSurEste.Fila < verticeNorEste.Fila) { throw new CoordenadasInvalidasParaAreaDePosicionesValidasException(string.Format("El vertice SE ({0},{1}) no puede estar al Norte del vertice NE ({2},{3})", verticeSurEste.Columna, verticeSurEste.Fila, verticeNorEste.Columna, verticeNorEste.Fila)); } if (verticeNorEste.Columna < verticeNorOeste.Columna) { throw new CoordenadasInvalidasParaAreaDePosicionesValidasException(string.Format("El vertice NE ({0},{1}) no puede estar al Oeste del vertice NO ({2},{3})", verticeNorEste.Columna, verticeNorEste.Fila, verticeNorOeste.Columna, verticeNorOeste.Fila)); } if (verticeSurEste.Columna != verticeNorEste.Columna) { throw new CoordenadasInvalidasParaAreaDePosicionesValidasException(string.Format("El vertice SE ({0},{1}) debe estar en la misma latitud que el vertice NE ({2},{3})", verticeSurEste.Columna, verticeSurEste.Fila, verticeNorEste.Columna, verticeNorEste.Fila)); } if (verticeSurEste.Fila != verticeSurOeste.Fila) { throw new CoordenadasInvalidasParaAreaDePosicionesValidasException(string.Format("El vertice SE ({0},{1}) debe estar en la misma longitud que el vertice SO ({2},{3})", verticeSurEste.Columna, verticeSurEste.Fila, verticeSurOeste.Columna, verticeSurOeste.Fila)); } if (verticeNorEste.Fila != verticeNorOeste.Fila) { throw new CoordenadasInvalidasParaAreaDePosicionesValidasException(string.Format("El vertice NE ({0},{1}) debe estar en la misma longitud que el vertice NO ({2},{3})", verticeNorEste.Columna, verticeNorEste.Fila, verticeNorOeste.Columna, verticeNorOeste.Fila)); } if (verticeNorOeste.Columna != verticeSurOeste.Columna) { throw new CoordenadasInvalidasParaAreaDePosicionesValidasException(string.Format("El vertice NO ({0},{1}) debe estar en la misma latitud que el vertice SO ({2},{3})", verticeNorOeste.Columna, verticeNorOeste.Fila, verticeSurOeste.Columna, verticeSurOeste.Fila)); } }
private void CrearPartes(int tamanio, Posicion posicionInicial, Type tipoDeParte) { var partesCreadas = new List <IParte>(); Posicion posicionParaParteCreada = posicionInicial; try { for (int i = 0; i < tamanio; i++) { partesCreadas.Add((IParte)Activator.CreateInstance(tipoDeParte, posicionParaParteCreada)); if (i < tamanio - 1) { posicionParaParteCreada = posicionParaParteCreada.ObtenerSiguientePosicion(this.Direccion); } } this.Partes = partesCreadas; } catch (PosicionInvalidaException) { throw new NaveFueraDeRangoException(); } }
public Rompehielos(Posicion posicion, Direccion direccion, AreaDePosicionesValidas areaDePosicionesValidas) : base(TamanioInicial, posicion, direccion, typeof(ParteDobleDuracion), areaDePosicionesValidas) { }
public MinaPorContacto(Posicion posicionObjetivo) : base(posicionObjetivo) { }
public MinaConRetardo(Posicion posicionObjetivo) : base(posicionObjetivo) { this.VidaUtilRestante = 1; }
public AreaDePosicionesValidas(Posicion verticeNorOeste, Posicion verticeNorEste, Posicion verticeSurOeste, Posicion verticeSurEste) { this.ValidarVertices(verticeNorOeste, verticeNorEste, verticeSurOeste, verticeSurEste); this.CrearRectangulo(verticeNorOeste, verticeNorEste, verticeSurOeste, verticeSurEste); }
private void CrearRectangulo(Posicion verticeNorOeste, Posicion verticeNorEste, Posicion verticeSurOeste, Posicion verticeSurEste) { Point origen = this.ConvertirPosicionAPoint(verticeNorOeste); int ancho = (int)(verticeNorEste.Columna - verticeNorOeste.Columna) + 1; int alto = verticeSurOeste.Fila - verticeNorOeste.Fila + 1; this.rectangulo = new Rectangle(origen, new Size(ancho, alto)); }
public bool PosicionEsValida(Posicion posicion) { return(this.rectangulo.Contains(this.ConvertirPosicionAPoint(posicion))); }
public Lancha(Posicion posicion, Direccion direccion, AreaDePosicionesValidas areaDePosicionesValidas) : base(TamanioInicial, posicion, direccion, typeof(Parte), areaDePosicionesValidas) { }
public virtual void DaniarConDisparoConvencional(Posicion posicionImpactada) { this.DestruirParte(new[] { posicionImpactada }); }
public ParteDobleDuracion(Posicion posicion) : base(posicion) { this.impactosRecibidos = 0; }
public override void DaniarConDisparoConvencional(Posicion posicionImpactada) { this.DestruirBuque(); }
public DisparoConvencional(Posicion posicionObjetivo) : base(posicionObjetivo) { }