Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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));
            }
        }
Esempio n. 5
0
        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();
            }
        }
Esempio n. 6
0
 public Rompehielos(Posicion posicion, Direccion direccion, AreaDePosicionesValidas areaDePosicionesValidas)
     : base(TamanioInicial, posicion, direccion, typeof(ParteDobleDuracion), areaDePosicionesValidas)
 {
 }
Esempio n. 7
0
 public MinaPorContacto(Posicion posicionObjetivo)
     : base(posicionObjetivo)
 {
 }
Esempio n. 8
0
 public MinaConRetardo(Posicion posicionObjetivo)
     : base(posicionObjetivo)
 {
     this.VidaUtilRestante = 1;
 }
Esempio n. 9
0
        public AreaDePosicionesValidas(Posicion verticeNorOeste, Posicion verticeNorEste, Posicion verticeSurOeste, Posicion verticeSurEste)
        {
            this.ValidarVertices(verticeNorOeste, verticeNorEste, verticeSurOeste, verticeSurEste);

            this.CrearRectangulo(verticeNorOeste, verticeNorEste, verticeSurOeste, verticeSurEste);
        }
Esempio n. 10
0
        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));
        }
Esempio n. 11
0
 public bool PosicionEsValida(Posicion posicion)
 {
     return(this.rectangulo.Contains(this.ConvertirPosicionAPoint(posicion)));
 }
Esempio n. 12
0
 public Lancha(Posicion posicion, Direccion direccion, AreaDePosicionesValidas areaDePosicionesValidas)
     : base(TamanioInicial, posicion, direccion, typeof(Parte), areaDePosicionesValidas)
 {
 }
Esempio n. 13
0
 public virtual void DaniarConDisparoConvencional(Posicion posicionImpactada)
 {
     this.DestruirParte(new[] { posicionImpactada });
 }
Esempio n. 14
0
 public ParteDobleDuracion(Posicion posicion)
     : base(posicion)
 {
     this.impactosRecibidos = 0;
 }
Esempio n. 15
0
 public override void DaniarConDisparoConvencional(Posicion posicionImpactada)
 {
     this.DestruirBuque();
 }
Esempio n. 16
0
 public DisparoConvencional(Posicion posicionObjetivo)
     : base(posicionObjetivo)
 {
 }