Esempio n. 1
0
 /// <summary>
 /// Клетка карты
 /// </summary>
 /// <param name="Place">Покрытие</param>
 /// <param name="Walls">Стены</param>
 public MapCell(MapPlace Place, Dictionary<MapDirection, MapWall> Walls)
 {
     if (Place == null) throw new ArgumentNullException("Place");
     this.Place = Place;
     if (Walls != null)
     {
         foreach (KeyValuePair<MapDirection, MapWall> wall in Walls)
         {
             this.SetWall(wall.Key, wall.Value);
         }
     }
 }
Esempio n. 2
0
        public MapCellState SetPlace(MapPlace place, MapPoint point)
        {
            MapCellState cell = this[point];

            if (cell == null)
            {
                return(cell = CreateCell(place, null, point));
            }
            else
            {
                return(cell = CreateCell(place, cell.Cell.Walls, point));
            }
        }
Esempio n. 3
0
 /// <summary>
 /// Клетка карты
 /// </summary>
 /// <param name="Place">Покрытие</param>
 /// <param name="Walls">Стены</param>
 public MapCell(MapPlace Place, Dictionary <MapDirection, MapWall> Walls)
 {
     if (Place == null)
     {
         throw new ArgumentNullException("Place");
     }
     this.Place = Place;
     if (Walls != null)
     {
         foreach (KeyValuePair <MapDirection, MapWall> wall in Walls)
         {
             this.SetWall(wall.Key, wall.Value);
         }
     }
 }
        /// <summary>
        /// Тест создания карты
        /// </summary>
        /// <param name="MapWidth">Ширина карты (в клетках)</param>
        /// <param name="MapHeight">Высота карты (в клетках)</param>
        /// <param name="LevelsCount">Количество уровней</param>
        /// <param name="WallsCountOnWalledCells">Количество стен в клетке, на которой будут размещаться стены (0..4)</param>
        /// <param name="WalledCellProbability">Вероятность того, что на клетке будут размещаться стены (0..1)</param>
        /// <returns>Занимаемая память</returns>        
        public static Int64 MapCreation(UInt16 MapWidth, UInt16 MapHeight, UInt16 LevelsCount, UInt16 WallsCountOnWalledCells, double WalledCellProbability)
        {
            GameMap game;
            Map map;

            Random rand = new Random();
            try
            {
                MapImage image = new MapImage(MapImageType.Bmp, null);
                MapPlace place = new MapPlace(image, (float)0.8);
                MapWall destroyedWall = new MapWall(image, MapDirection.North, 200);
                MapWall wall = new MapWall(image, MapDirection.North, 200);
                Dictionary<MapDirection, MapWall> walls = new Dictionary<MapDirection, MapWall>();

                if (WallsCountOnWalledCells > 0)
                    walls.Add(MapDirection.North, wall);
                if (WallsCountOnWalledCells > 1)
                    walls.Add(MapDirection.South, wall);
                if (WallsCountOnWalledCells > 2)
                    walls.Add(MapDirection.West, wall);
                if (WallsCountOnWalledCells > 3)
                    walls.Add(MapDirection.East, wall);

                bool isWall = false;
                int probability = (int)Math.Round(WalledCellProbability * 100.0);

                map = new Map(LevelsCount, new MapSize(MapWidth, MapHeight));
                for (int z = 0; z < map.LevelsCount; z++)
                    for (int x = 0; x < map.Size.Width; x++)
                        for (int y = 0; y < map.Size.Height; y++)
                        {
                            isWall = rand.Next(0, 100) < probability;
                            map.Levels[z].Cells[x, y] = new MapCell(place, isWall ? walls : null);
                        }
                game = new GameMap(new MapState(map));
            }
            catch
            {
            }

            Int64 memory = GC.GetTotalMemory(false);

            map = null;
            game = null;
            GC.Collect();

            return memory;
        }
Esempio n. 5
0
        public MapCellState CreateCell(MapPlace place, Dictionary <MapDirection, MapWall> walls, MapPoint point)
        {
            MapCellState currentCell = this[point];

            if (currentCell != null)
            {
                if (currentCell.ActiveObjects != null)
                {
                    foreach (var activeObject in currentCell.ActiveObjects)
                    {
                        this.RemoveActiveObject(GetIdOfActiveObject(activeObject));
                    }
                }
            }
            MapCell cell = Map[point] = new MapCell(place, walls);

            return(this[point] = new MapCellState(cell, point));
        }
Esempio n. 6
0
 public MapCellState SetPlace(MapPlace place, MapPoint point)
 {
     MapCellState cell = this[point];
     if (cell == null)
     {
         return (cell = CreateCell(place, null, point));
     }
     else
     {
         return (cell = CreateCell(place, cell.Cell.Walls, point));
     }
 }
Esempio n. 7
0
 public MapCellState CreateCell(MapPlace place, Dictionary<MapDirection, MapWall> walls, MapPoint point)
 {
     MapCellState currentCell = this[point];
     if (currentCell != null)
     {
         if (currentCell.ActiveObjects != null)
         {
             foreach (var activeObject in currentCell.ActiveObjects)
                 this.RemoveActiveObject(GetIdOfActiveObject(activeObject));
         }
     }
     MapCell cell = Map[point] = new MapCell(place, walls);
     return (this[point] = new MapCellState(cell, point));
 }
        public static void PathTest()
        {
            GameMap game;
            Map map;

            Random rand = new Random();
            try
            {
                MapImage image = new MapImage(MapImageType.Bmp, null);
                MapPlace place = new MapPlace(image, (float)0.8) { Name = "1" };
                //MapWall destroyedWall = new MapWall("2", image, MapDirection.North, 200);
                MapWall wall = new MapWall(image, MapDirection.North, 200) { Name = "3" };
                Dictionary<MapDirection, MapWall> walls = new Dictionary<MapDirection, MapWall>();

                map = new Map(1, new MapSize(16, 16)) { Name = "Map" };
                for (int z = 0; z < map.LevelsCount; z++)
                    for (int x = 0; x < map.Size.Width; x++)
                        for (int y = 0; y < map.Size.Height; y++)
                        {
                            map.Levels[z].Cells[x, y] = new MapCell(place, null);
                        }
                MapAreas areas= new MapAreas();
             //   MapAreaTransitionPoint pnt1=new MapAreaTransitionPoint("", "",
                areas.Areas.Add(new MapArea(new MapPoint(0, 0, 0), new MapSize(4, 4)));
                areas.Areas.Add(new MapArea(new MapPoint(0, 4, 0), new MapSize(4, 4)));
                areas.Areas.Add(new MapArea(new MapPoint(0, 8, 0), new MapSize(4, 4)));
                areas.Areas.Add(new MapArea(new MapPoint(0, 12, 0), new MapSize(4, 4)));
                areas.Areas.Add(new MapArea(new MapPoint(0, 0, 4), new MapSize(4, 4)));
                areas.Areas.Add(new MapArea(new MapPoint(0, 4, 4), new MapSize(4, 4)));
                areas.Areas.Add(new MapArea(new MapPoint(0, 8, 4), new MapSize(4, 4)));
                areas.Areas.Add(new MapArea(new MapPoint(0, 12, 4), new MapSize(4, 4)));
                areas.Areas.Add(new MapArea(new MapPoint(0, 0, 8), new MapSize(4, 4)));
                areas.Areas.Add(new MapArea(new MapPoint(0, 4, 8), new MapSize(4, 4)));
                areas.Areas.Add(new MapArea(new MapPoint(0, 8, 8), new MapSize(4, 4)));
                areas.Areas.Add(new MapArea(new MapPoint(0, 12, 8), new MapSize(4, 4)));
                areas.Areas.Add(new MapArea(new MapPoint(0, 0, 12), new MapSize(4, 4)));
                areas.Areas.Add(new MapArea(new MapPoint(0, 4, 12), new MapSize(4, 4)));
                areas.Areas.Add(new MapArea(new MapPoint(0, 8, 12), new MapSize(4, 4)));
                areas.Areas.Add(new MapArea(new MapPoint(0, 12, 12), new MapSize(4, 4)));
                MapAreaTransitionPoint[] tr0 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[0], areas.Areas[1], new MapPoint(0, 0, 0), new MapSize(1, 1)), new MapAreaTransitionPoint(areas.Areas[0], areas.Areas[5], new MapPoint(0, 1, 1), new MapSize(1, 1)) };
                MapAreaTransitionPoint[] tr1 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[1], areas.Areas[0], new MapPoint(0, 0, 0), new MapSize(1, 1)) };
                MapAreaTransitionPoint[] tr5 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[5], areas.Areas[0], new MapPoint(0, 0, 0), new MapSize(1, 1)), new MapAreaTransitionPoint(areas.Areas[5], areas.Areas[2], new MapPoint(0, 0, 0), new MapSize(1, 1)) };
                MapAreaTransitionPoint[] tr2 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[2], areas.Areas[5], new MapPoint(0, 0, 0), new MapSize(1, 1)), new MapAreaTransitionPoint(areas.Areas[2], areas.Areas[7], new MapPoint(0, 0, 0), new MapSize(1, 1)) };
                MapAreaTransitionPoint[] tr3 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[3], areas.Areas[6], new MapPoint(0, 0, 0), new MapSize(1, 1)) };
                MapAreaTransitionPoint[] tr4 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[4], areas.Areas[8], new MapPoint(0, 0, 0), new MapSize(1, 1)) };
                MapAreaTransitionPoint[] tr6 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[6], areas.Areas[3], new MapPoint(0, 0, 0), new MapSize(1, 1)), new MapAreaTransitionPoint(areas.Areas[6], areas.Areas[10], new MapPoint(0, 0, 0), new MapSize(1, 1)) };
                MapAreaTransitionPoint[] tr7 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[7], areas.Areas[2], new MapPoint(0, 0, 0), new MapSize(1, 1)), new MapAreaTransitionPoint(areas.Areas[7], areas.Areas[10], new MapPoint(0, 0, 0), new MapSize(1, 1)) };
                MapAreaTransitionPoint[] tr8 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[8], areas.Areas[4], new MapPoint(0, 0, 0), new MapSize(1, 1)), new MapAreaTransitionPoint(areas.Areas[8], areas.Areas[9], new MapPoint(0, 0, 0), new MapSize(1, 1)), new MapAreaTransitionPoint(areas.Areas[8], areas.Areas[12], new MapPoint(0, 0, 0), new MapSize(1, 1)) };
                MapAreaTransitionPoint[] tr13 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[13], areas.Areas[9], new MapPoint(0, 0, 0), new MapSize(1, 1)), new MapAreaTransitionPoint(areas.Areas[13], areas.Areas[14], new MapPoint(0, 0, 0), new MapSize(1, 1)), new MapAreaTransitionPoint(areas.Areas[13], areas.Areas[10], new MapPoint(0, 0, 0), new MapSize(1, 1)) };
                MapAreaTransitionPoint[] tr9 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[9], areas.Areas[8], new MapPoint(0, 0, 0), new MapSize(1, 1)), new MapAreaTransitionPoint(areas.Areas[9], areas.Areas[13], new MapPoint(0, 0, 0), new MapSize(1, 1)) };
                MapAreaTransitionPoint[] tr12 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[12], areas.Areas[8], new MapPoint(0, 0, 0), new MapSize(1, 1)) };
                MapAreaTransitionPoint[] tr14 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[14], areas.Areas[13], new MapPoint(0, 0, 0), new MapSize(1, 1)) };
                MapAreaTransitionPoint[] tr15 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[15], areas.Areas[10], new MapPoint(0, 0, 0), new MapSize(1, 1)) };
                MapAreaTransitionPoint[] tr11 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[11], areas.Areas[10], new MapPoint(0, 0, 0), new MapSize(1, 1)) };
                MapAreaTransitionPoint[] tr10 = new MapAreaTransitionPoint[] { new MapAreaTransitionPoint(areas.Areas[10], areas.Areas[6], new MapPoint(0, 0, 0), new MapSize(1, 1)), new MapAreaTransitionPoint(areas.Areas[10], areas.Areas[7], new MapPoint(0, 0, 0), new MapSize(1, 1)), new MapAreaTransitionPoint(areas.Areas[10], areas.Areas[11], new MapPoint(0, 0, 0), new MapSize(1, 1)), new MapAreaTransitionPoint(areas.Areas[10], areas.Areas[15], new MapPoint(0, 0, 0), new MapSize(1, 1)), new MapAreaTransitionPoint(areas.Areas[10], areas.Areas[13], new MapPoint(0, 0, 0), new MapSize(1, 1)) };
                areas.Areas[0].TransitionPoints.AddRange(tr0);
                areas.Areas[1].TransitionPoints.AddRange(tr1);
                areas.Areas[2].TransitionPoints.AddRange(tr2);
                areas.Areas[3].TransitionPoints.AddRange(tr3);
                areas.Areas[4].TransitionPoints.AddRange(tr4);
                areas.Areas[5].TransitionPoints.AddRange(tr5);
                areas.Areas[6].TransitionPoints.AddRange(tr6);
                areas.Areas[7].TransitionPoints.AddRange(tr7);
                areas.Areas[8].TransitionPoints.AddRange(tr8);
                areas.Areas[9].TransitionPoints.AddRange(tr9);
                areas.Areas[10].TransitionPoints.AddRange(tr10);
                areas.Areas[11].TransitionPoints.AddRange(tr11);
                areas.Areas[12].TransitionPoints.AddRange(tr12);
                areas.Areas[13].TransitionPoints.AddRange(tr13);
                areas.Areas[14].TransitionPoints.AddRange(tr14);
                areas.Areas[15].TransitionPoints.AddRange(tr15);

                map.Areas = areas;

                MapState state = new MapState(map);

                game = new GameMap(new MapState(map));

            }
            catch
            {
            }

            Int64 memory = GC.GetTotalMemory(false);

            map = null;
            game = null;
            GC.Collect();
        }
Esempio n. 9
0
        //[TestMethod]
        public void TestSaveMap()
        {
            MapImage image = new MapImage(MapImageType.Bmp, null);
            MapSize mapSize = new MapSize(1000, 1000);
            Map map = new Map(1, mapSize);
            map.Version = new Version(1, 2, 3, 4);
            MapPlace place1 = new MapPlace(image, 1);
            MapPlace place2 = new MapPlace(image, 0.8f);
            MapWall wall = new MapWall(image, MapDirection.North, 200);

            MapActiveObject testObj1 = new MapActiveObject(image, null, new MapSize(2, 3), MapDirection.West, MapArmorType.Heavy, 120, 1);
            MapActiveObject testObj2 = new MapActiveObject(image, null, new MapSize(20, 30), MapDirection.West, MapArmorType.Machine, 121, 1);
            MapActiveObject testObj3 = new MapActiveObject(image, null, new MapSize(200, 300), MapDirection.West, MapArmorType.None, 122, 1);
            MapActiveObject testObj4 = new MapActiveObject(image, null, new MapSize(259, 355), MapDirection.West, MapArmorType.Undead, 123, 1);

            MapArea area1 = new MapArea(new MapPoint(0, 20, 30), new MapSize(50, 50));
            MapArea area2 = new MapArea(new MapPoint(0, 200, 300), new MapSize(100, 100));
            MapArea area3 = new MapArea(new MapPoint(0, 100, 100), new MapSize(10, 10));

            MapAreaTransitionPoint transPoint1 = new MapAreaTransitionPoint(area1, area2, new MapPoint(0, 25, 35), new MapSize(5, 5));
            MapAreaTransitionPoint transPoint2 = new MapAreaTransitionPoint(area2, area3, new MapPoint(0, 225, 325), new MapSize(5, 5));
            MapAreaTransitionPoint transPoint3 = new MapAreaTransitionPoint(area3, area1, new MapPoint(0, 105, 105), new MapSize(2, 2));

            area1.TransitionPoints.Add(transPoint1);
            area2.TransitionPoints.Add(transPoint2);
            area3.TransitionPoints.Add(transPoint3);

            map.TileSet.Add(place1);
            map.TileSet.Add(place2);
            map.TileSet.Add(wall);
            map.TileSet.Add(testObj1);
            map.TileSet.Add(testObj2);
            map.TileSet.Add(testObj3);
            map.TileSet.Add(testObj4);
            map.Areas.Areas.Add(area1);
            map.Areas.Areas.Add(area2);
            map.Areas.Areas.Add(area3);

            for (int x = 0; x < mapSize.Width / 2; x++)
                for (int y = 0; y < mapSize.Height; y++)
                    map.Levels[0].Cells[x, y] = new MapCell(place1, new Dictionary<MapDirection, MapWall>());

            for (int x = mapSize.Width / 2; x < mapSize.Width; x++)
                for (int y = 0; y < mapSize.Height; y++)
                    map.Levels[0].Cells[x, y] = new MapCell(place2, new Dictionary<MapDirection, MapWall>());

            map.Levels[0].Cells[5, 6].SetWall(MapDirection.South, wall);

            Exception exception = null;

            MapState mapState = new MapState(map);

            mapState.AddActiveObject(testObj1, new MapPoint(0, 1, 1));
            mapState.AddActiveObject(testObj2, new MapPoint(0, 100, 100));
            mapState.AddActiveObject(testObj3, new MapPoint(0, 200, 200));
            mapState.AddActiveObject(testObj4, new MapPoint(0, 500, 500));
            Map map2 = null;
            MapState mapState2 = null;

            try
            {
                DateTime start = DateTime.Now;
                byte[] data = MapSerializer.Instance.SerializeMapState(mapState);
                DateTime finish = DateTime.Now;
                mapState2 = MapSerializer.Instance.DeserializeMapState(data);
                map2 = mapState2.Map;

            }
            catch (Exception ex)
            {
                exception = ex;
            }

            Assert.IsNull(exception);

            Assert.IsNotNull(map2);
            Assert.AreEqual(map2[0, 0, 0].Place.Id, place1.Id);
            Assert.AreEqual(map2[0, 0, 0].Place.Passability, place1.Passability);
            Assert.AreEqual(map2[0, mapSize.Width - 1, 0].Place.Id, place2.Id);
            Assert.AreEqual(map2[0, mapSize.Width - 1, 0].Place.Passability, place2.Passability);
            Assert.AreEqual(map2[0, 5, 6].Walls[MapDirection.South].Id, wall.Id);
            Assert.AreEqual(map2[0, 5, 6].Walls[MapDirection.South].Health, wall.Health);
            Assert.AreEqual(map2.Areas.Areas[1].Position, map.Areas.Areas[1].Position);
            Assert.AreEqual(map2.Areas.Areas[2].TransitionPoints[0].From.Name, map.Areas.Areas[2].TransitionPoints[0].From.Name);
            Assert.AreEqual(map2.Areas.Areas[2].TransitionPoints[0].To.Name, map.Areas.Areas[2].TransitionPoints[0].To.Name);
            Assert.AreEqual(map2.Areas.Areas[2].TransitionPoints[0].Position, map.Areas.Areas[2].TransitionPoints[0].Position);
            Assert.AreEqual(mapState2.ActiveObjects.Count, mapState.ActiveObjects.Count);
        }
Esempio n. 10
0
        public void TestCellsMatrix()
        {
            MapSize size = new MapSize(1000, 1000);
            MapPlace place = new MapPlace(new MapImage(MapImageType.Bmp, null), 1);
            MapCell cell = new MapCell(place, null);

            MapMatrix<MapCell> matrix1 = new MapMatrix<MapCell>(size);
            MapCell[,] matrix2 = new MapCell[size.Width, size.Height];

            for (int x = 0; x < size.Width; x++)
                for (int y = 0; y < size.Height; y++)
                {
                    matrix1[x, y] = cell;
                    matrix2[x, y] = cell;
                }

            DateTime start1 = DateTime.Now;

            for (int i = 0; i < 1000000; i++)
            {
                cell = matrix1[25, 68];
            }

            DateTime finish1 = DateTime.Now;

            DateTime start2 = DateTime.Now;

            for (int i = 0; i < 1000000; i++)
            {
                cell = matrix2[25, 68];
            }

            DateTime finish2 = DateTime.Now;

            double result1 = (finish1 - start1).TotalMilliseconds;
            double result2 = (finish2 - start2).TotalMilliseconds;

            Assert.IsTrue(result1 < 100);
        }
 /// <summary>
 /// Состояние покрытия клекти карты
 /// </summary>
 /// <param name="Place">Покрытие</param>
 public MapPlaceState(MapPlace Place)
     : base(Place)
 {
     this.Passability = Place.Passability;
 }
 public PlaceViewModel(MapPlace place)
     : base(place)
 {
     Source = place;
 }
 /// <summary>
 /// Состояние покрытия клекти карты
 /// </summary>
 /// <param name="Place">Покрытие</param>
 public MapPlaceState(MapPlace Place)
     : base(Place)
 {
     this.Passability = Place.Passability;
 }