コード例 #1
0
        public Map CopyAndFlip(Map map, CoordinateFlipper flipper, Dictionary <int, Entity> flippedEntities)
        {
            var copy = new Map(map);

            // Copy all entities including walls
            for (var y = 0; y < map.Height; y++)
            {
                for (var x = 0; x < map.Width; x++)
                {
                    var entity = map.GetEntity(x, y);

                    if (entity == null)
                    {
                        continue;
                    }

                    Entity flippedEntity = null;
                    if (entity.GetType() == typeof(Alien))
                    {
                        flippedEntity = Alien.CopyAndFlip((Alien)entity, flipper, flippedEntities);
                    }
                    else if (entity.GetType() == typeof(Missile))
                    {
                        flippedEntity = Missile.CopyAndFlip((Missile)entity, flipper, flippedEntities);
                    }
                    else if (entity.GetType() == typeof(Bullet))
                    {
                        flippedEntity = Bullet.CopyAndFlip((Bullet)entity, flipper, flippedEntities);
                    }
                    else if (entity.GetType() == typeof(Shield))
                    {
                        flippedEntity = Shield.CopyAndFlip((Shield)entity, flipper, flippedEntities);
                    }
                    else if (entity.GetType() == typeof(Ship))
                    {
                        flippedEntity = Ship.CopyAndFlip((Ship)entity, flipper, flippedEntities);
                    }
                    else if (entity.GetType() == typeof(AlienFactory))
                    {
                        flippedEntity = AlienFactory.CopyAndFlip((AlienFactory)entity, flipper, flippedEntities);
                    }
                    else if (entity.GetType() == typeof(MissileController))
                    {
                        flippedEntity = MissileController.CopyAndFlip((MissileController)entity, flipper,
                                                                      flippedEntities);
                    }
                    else if (entity.GetType() == typeof(Wall))
                    {
                        flippedEntity = Wall.CopyAndFlip((Wall)entity, flipper, flippedEntities);
                    }

                    if ((flippedEntity != null) && (copy.GetEntity(flippedEntity.X, flippedEntity.Y) == null))
                    {
                        copy.AddEntity(flippedEntity);
                    }
                }
            }

            return(copy);
        }
コード例 #2
0
        public static AlienManager CopyAndFlip(AlienManager alienManager, CoordinateFlipper flipper,
                                               Dictionary <int, Entity> flippedEntities)
        {
            var copy = new AlienManager(alienManager)
            {
                PlayerNumber = alienManager.PlayerNumber == 1 ? 2 : 1,
                DeltaX       = -alienManager.DeltaX
            };

            // Clear default copy of waves
            foreach (var wave in copy.Waves)
            {
                wave.Clear();
            }
            copy.Waves.Clear();

            // Copy waves flipped
            for (var i = alienManager.Waves.Count - 1; i >= 0; i--)
            {
                var wave     = alienManager.Waves[i];
                var waveList = new List <Alien>();
                copy.Waves.Add(waveList);

                foreach (var alien in wave)
                {
                    waveList.Add(Alien.CopyAndFlip(alien, flipper, flippedEntities));
                }
            }

            return(copy);
        }